【问题标题】:Load geojson in bigquery在 bigquery 中加载 geojson
【发布时间】:2014-08-06 00:06:33
【问题描述】:
【问题讨论】:
标签:
json
load
google-bigquery
geojson
【解决方案1】:
2019 年一步一步:
如果您收到错误“读取数据时出错,错误消息:从位置 0 开始的行中的 JSON 解析错误:不允许嵌套数组。”,您可能有一个 GeoJSON 文件。
将 GeoJSON 转换为带有 jq 的换行符分隔的 JSON,以 CSV 格式加载到 BigQuery:
jq -c .features[] \
san_francisco_censustracts.json > sf_censustracts_201905.json
bq load --source_format=CSV \
--quote='' --field_delimiter='|' \
fh-bigquery:deleting.sf_censustracts_201905 \
sf_censustracts_201905.json row
在 BigQuery 中解析加载的文件:
CREATE OR REPLACE TABLE `fh-bigquery.uber_201905.sf_censustracts`
AS
SELECT FORMAT('%f,%f', ST_Y(centroid), ST_X(centroid)) lat_lon, *
FROM (
SELECT *, ST_CENTROID(geometry) centroid
FROM (
SELECT
CAST(JSON_EXTRACT_SCALAR(row, '$.properties.MOVEMENT_ID') AS INT64) movement_id
, JSON_EXTRACT_SCALAR(row, '$.properties.DISPLAY_NAME') display_name
, ST_GeogFromGeoJson(JSON_EXTRACT(row, '$.geometry')) geometry
FROM `fh-bigquery.deleting.sf_censustracts_201905`
)
)
替代方法:
【解决方案2】:
问题中的桶已不存在....然而五年后有一个新的答案。
2018 年 7 月,Google announced BigQuery GIS 的 alpha(现为 beta)。
docs 突出了一个限制
BigQuery GIS 仅支持 GeoJSON 中的单个几何对象。
BigQuery GIS 目前不支持 GeoJSON 要素对象,
特征集合,或 GeoJSON 文件格式。
这意味着特征集合属性的任何特征都需要添加到单独的列中,并使用地理列来保存 geojson 地理。
在 Google 培训师的 tutorial 中,使用 gdal 将 shape 文件中的多边形转换为 CSV 文件行内的 geojson 字符串。
ogr2ogr -f csv -dialect sqlite -sql "select AsGeoJSON(geometry) AS geom, * from LAYER_NAME" output.csv inputfilename.shp
您希望得到一列包含这样的几何内容
{"type":"Polygon","coordinates":[[....]]}
其他列可能包含特征属性。
然后可以将 CSV 导入 BQ。然后可以在BigQuery Geo Viz 中查看对表的查询。您需要告诉它哪一列包含几何图形。