目前我使用 Parquet 文件将数据导入到 BigQuery(GIS)中。其中一个 Parquet 文件包含几何列,将几何数据表示为 WKT 字符串(MultiPolygon
),我想将该列作为 GEOGRAPHY
类型导入。
Q1. 文档提到不支持从 WKT(字符串)自动转换为 GEOGRAPHY
,那么我该如何解决这个问题? 我想避免使用 CSV 文件,并手动提供模式定义。
但是,即使我先创建空表,只想附加新的 Parquet 文件,它也无法工作:提供的模式与表 <org>-internal:test.<table> 不匹配。字段 geom 的类型已从 GEOGRAPHY 更改为 STRING。
。(Avro 也是一样)
Q2. 是否有选项以某种方式强制将包含 WKT 字符串的 Parquet 列转换为 GEOGRAPHY
类型? 我不想先加载临时表,然后运行查询以执行所有转换以加载目标表。
更新: 使用 python 客户端时,我能够手动为要导入的 Parquet 文件指定架构。加载完成后,GEOGRAPHY
列中的所有值都具有值INVALID
。 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()