如何在 BigQuery 中获取时区边界?

Max*_*iol 1 gis timezone timestamp google-bigquery google-cloud-platform

提供以下 GCP 服务:

  • 大查询
  • 云储存
  • 云贝壳

创建具有以下 2 列结构的 BigQuery 表的最简单方法是什么?

柱子 描述 类型 首要的关键
齐德 时区标识符 细绳 X
邦德 边界 地理

例如:

齐德 邦德
非洲/阿比让 多边形((-5.440683 4.896553, -5.303699 4.912035, -5.183637 4.923927, ...))
非洲/阿克拉 多边形((-0.136231 11.13951,-0.15175 11.142384,-0.161168 11.14698,...))
太平洋/沃利斯 多重多边形(((-178.350043 -14.384951, -178.344628 -14.394109, ...)))

Max*_*iol 5

  1. 从计算机上的timezones.geojson.zip@evan-siroky存储库下载并解压。坐标结构如下(geojson格式):
{
  "type": "FeatureCollection",
  "features":
  [
   {
     "type":"Feature",
     "properties":
     {
      "tzid":"Africa/Abidjan"
     },
     "geometry":
     {
        "type":"Polygon",
        "coordinates":[[[-5.440683,4.896553],[-5.303699,4.912035], ...]]]
     }
   },
   {
     "type":"Feature",
     "properties": ...
   }
  ]
}
Run Code Online (Sandbox Code Playgroud)

BigQuery 不接受geojson,但接受jsonl(换行符分隔的 json)格式来加载表。步骤3到5旨在转换为jsonl格式。

  1. 将文件上传timezones_geojson.json到云存储gs://your-bucket/
  2. 在 Cloud Shell 虚拟机中移动文件
gsutil mv gs://your-bucket/timezones_geojson.json .
Run Code Online (Sandbox Code Playgroud)
  1. 解析文件 timezones_geojson.json,过滤“features”并每个元素返回一行(请参阅jq 命令):
cat timezones_geojson.json | jq -c ".features[]" > timezones_jsonl.json
Run Code Online (Sandbox Code Playgroud)

之前的格式将转换为:

{
 "type":"Feature",
 "properties":
 {
  "tzid":"Africa/Abidjan"
 },
 "geometry":
 {
  "type":"Polygon",
  "coordinates":[[[-5.440683,4.896553],[-5.303699,4.912035], ... ]]]
 }
}
{
 "type":"Feature",
 "properties":...
 "geometry":...
}

Run Code Online (Sandbox Code Playgroud)
  1. jsonl移至Cloud Storage
gsutil mv timezones_jsonl.json gs://your-bucket/
Run Code Online (Sandbox Code Playgroud)
  1. 将jsonl加载到 BigQuery
bq load --autodetect --source_format=NEWLINE_DELIMITED_JSON --json_extension=GEOJSON your_dataset.timezones gs://your-bucket/timezones_jsonl.json
Run Code Online (Sandbox Code Playgroud)