【问题标题】:Importing geography data into BigQuery using Avro/Parquet使用 Avro/Parquet 将地理数据导入 BigQuery
【发布时间】:2019-02-22 03:46:27
【问题描述】:

目前我使用 Parquet 文件将数据导入 BigQuery (GIS)。其中一个 Parquet 文件包含几何列,将几何数据表示为 WKT 字符串 (MultiPolygon),我想将该列导入为 GEOGRAPHY 类型。

第一季度。文档提到不支持从 WKT(字符串)到 GEOGRAPHY 的自动转换,那么我该如何解决这个问题呢? 我想避免使用 CSV 文件,并手动提供架构定义。

但是,即使我先创建空表,并且只想附加新的 Parquet 文件,它也不起作用: Provided Schema does not match Table <org>-internal:test.<table>. Field geom has changed type from GEOGRAPHY to STRING.。 (与 Avro 相同)

第二季度。是否有一种选择以某种方式强制将 Parquet 的包含 WKT 字符串的列转换为 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()

【问题讨论】:

    标签: google-cloud-platform google-bigquery gis avro parquet


    【解决方案1】:

    这在 GIS 测试版中尚无法实现。它将在 BigQuery GIS 正式发布之前可用,但目前您无法直接使用 Parquet 加载。在 Beta 期间,您可以使用 CSV、换行符分隔的 JSON 或流式加载 API 直接加载到地理列。

    更新(2018 年 10 月 30 日):现在应该可以使用了。您可以将 GEOGRAPHY 指定为列类型,也可以使用 GEOGRAPHY 列加载到现有表中。 Parquet/Avro 中的字符串列将被解析并转换为 GEOGRAPHY。

    【讨论】:

      猜你喜欢
      • 2017-04-06
      • 2018-10-19
      • 2018-11-18
      • 2022-01-20
      • 2020-08-05
      • 1970-01-01
      • 2021-11-05
      • 1970-01-01
      • 2015-05-11
      相关资源
      最近更新 更多