Google cloud platform 使用Avro/Parquet将地理数据导入BigQuery

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

目前,我使用拼花文件将数据导入BigQuery(GIS)。其中一个拼花文件包含几何体列,将几何体数据表示为WKT字符串(
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