Google cloud platform 使用Avro/Parquet将地理数据导入BigQuery
目前,我使用拼花文件将数据导入BigQuery(GIS)。其中一个拼花文件包含几何体列,将几何体数据表示为WKT字符串(Google cloud platform 使用Avro/Parquet将地理数据导入BigQuery,google-cloud-platform,google-bigquery,gis,avro,parquet,Google Cloud Platform,Google Bigquery,Gis,Avro,Parquet,目前,我使用拼花文件将数据导入BigQuery(GIS)。其中一个拼花文件包含几何体列,将几何体数据表示为WKT字符串(MultiPolygon),我希望将该列作为GEOGRAPHY类型导入 问题1。文档中提到不支持从WKT(字符串)到地理位置的自动转换,因此如何克服这个问题? 我希望避免使用CSV文件,并手动提供模式定义 然而,即使我先创建空表,并且只想附加新的拼花地板文件,它也不起作用: 提供的架构与表不匹配-内部:测试。。字段geom的类型已从地理更改为字符串。。(与Avro相同) 问题2
MultiPolygon
),我希望将该列作为GEOGRAPHY
类型导入
问题1。文档中提到不支持从WKT(字符串)到地理位置的自动转换,因此如何克服这个问题?
我希望避免使用CSV文件,并手动提供模式定义
然而,即使我先创建空表,并且只想附加新的拼花地板文件,它也不起作用:
提供的架构与表不匹配-内部:测试。。字段geom的类型已从地理更改为字符串。
。(与Avro相同)
问题2。是否有一种方法可以强制将装有WKT字符串的镶木地板柱铸造成GEOGRAPHY
type?我不想先加载临时表,然后运行一个执行所有转换的查询来加载目标表
更新:
在使用python客户端时,我能够手动指定要导入的拼花地板文件的模式。加载完成后,GEOGRAPHY
列中的所有值都具有值无效
。同样的代码也适用于CSV
from google.cloud import bigquery
client = bigquery.Client(project='<project>')
table_ref = client.dataset('test').table('geometry')
job_config = bigquery.LoadJobConfig()
job_config.write_disposition = bigquery.WriteDisposition.WRITE_TRUNCATE
job_config.schema = [
bigquery.SchemaField('id', 'INTEGER'),
bigquery.SchemaField('geom', 'GEOGRAPHY'),
]
# CSV works fine!
# uri = 'gs://<bucket>/multipoly_sample.csv'
# job_config.source_format = bigquery.SourceFormat.CSV
# With Parquet, values in geom column are all "INVALID"
uri = 'gs://<bucket>/multipoly_sample.parquet'
job_config.source_format = bigquery.SourceFormat.PARQUET
load_job = client.load_table_from_uri(
uri,
table_ref,
job_config=job_config)
load_job.result()
从google.cloud导入bigquery
client=bigquery.client(项目=“”)
table_ref=client.dataset('test')。table('geometry'))
job_config=bigquery.LoadJobConfig()
job_config.write_disposition=bigquery.WriteDisposition.write_TRUNCATE
作业配置.schema=[
SchemaField('id','INTEGER'),
SchemaField('geom','GEOGRAPHY'),
]
#CSV很好用!
#uri='gs:///multipoly_sample.csv'
#job\u config.source\u format=bigquery.SourceFormat.CSV
#对于拼花地板,geom列中的值均为“无效”
uri='gs:///multipoly_sample.parquet'
job\u config.source\u format=bigquery.SourceFormat.PARQUET
load_job=client.load_table_from_uri(
乌里,
表(参考),
作业配置=作业配置)
加载作业。结果()
这在GIS测试期间尚不可能实现。它将在BigQueryGIS上市之前可用,但现在您不能直接使用拼花地板加载。在测试期间,您可以使用CSV、换行符分隔的JSON或流式加载API直接加载到地理列
更新(2018年10月30日):现在应该可以了。您可以将地理信息指定为列类型,也可以将地理信息列加载到现有表中。Parquet/Avro中的字符串列将被解析并转换为GEOGRAPHY