首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >利用Avro/Parquet将地理数据导入BigQuery

利用Avro/Parquet将地理数据导入BigQuery
EN

Stack Overflow用户
提问于 2018-09-18 15:16:44
回答 1查看 841关注 0票数 3

目前,我使用拼图文件将数据导入BigQuery (地理信息系统)。其中一个拼图文件包含几何列,将几何数据表示为WKT字符串(MultiPolygon),我想将该列作为GEOGRAPHY类型导入。

Q1。文档提到不支持从WKT (string)到GEOGRAPHY的自动转换,那么我如何克服这个问题?我希望避免使用CSV文件,并手动提供模式定义。

然而,即使我首先创建了空表,并且只想添加新的拼图文件,它也不起作用:Provided Schema does not match Table <org>-internal:test.<table>. Field geom has changed type from GEOGRAPHY to STRING.。(Avro也是如此)

Q2。有没有办法强制将包含WKT字符串的拼图的列强制转换为GEOGRAPHY类型?我不想先加载临时表,然后运行查询来加载目标表。

python更新:当使用python客户端时,我可以为我想要导入的文件手动指定模式。加载完成后,GEOGRAPHY列中的所有值都具有值INVALID。同样的代码在CSV中也能正常工作。

代码语言:javascript
复制
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()
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-26 01:28:15

在GIS测试版期间,这是不可能的。它将在拼图地理信息系统正式上市之前可用,但目前您不能使用BigQuery直接加载。在Beta测试期间,您可以使用CSV、换行符分隔的JSON或流式加载API直接加载到地理列。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52380937

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档