是否可以使用架构自动检测加载 BigQuery 但修改自动检测的架构?

Posted

技术标签:

【中文标题】是否可以使用架构自动检测加载 BigQuery 但修改自动检测的架构?【英文标题】:Is it possible to load BigQuery with schema autodetect but modify the auto-detected schema? 【发布时间】:2021-12-17 02:57:08 【问题描述】:
bq load --autodetect

很好,但有时根据后面的数据行推断会失败。我相信根据文档 autodetect 使用前 50 行。 https://cloud.google.com/bigquery/docs/schema-detect

有没有办法用特定类型覆盖一个或多个列,但对剩余的行使用自动检测?

例如我想跑步:

bq load --source_format=NEWLINE_DELIMITED_JSON --autodetect --schema SomeField:SomeOtherType <target table> <input ndjson>

并且只会自动检测输入源中未指定的字段。

或者,是否有 bq 显示自动检测到的架构而不尝试加载?

我的解决方法有点乏味

将不良记录 --max_bad_records 加载并允许到临时表中。 获取架构。 根据需要手动修改。 加载到真正的目标表中。

【问题讨论】:

目前,bq 中没有满足您要求的功能。您可以使用此 BigQuery issue tracker template 提交功能请求。请注意,feature requests 没有 ETA 或实施保证,但您可以在您创建的问题跟踪器中看到所有更新。 【参考方案1】:

实际上我刚刚找到了一个很好的工具:

https://github.com/bxparks/bigquery-schema-generator

假设您使用的是虚拟环境:

pip3 install bigquery_schema_generator
cat input-data.ndjson | ./env/bin/generate-schema --keep_nulls > ./output-schema
bq load --source_format=NEWLINE_DELIMITED_JSON <target table> ./input-data.ndjson ./output-schema

【讨论】:

以上是关于是否可以使用架构自动检测加载 BigQuery 但修改自动检测的架构?的主要内容,如果未能解决你的问题,请参考以下文章

推断 BigQuery 表加载的 avro 架构

使用自动检测的动态 BigQuery 架构:错误架构没有字段

让 BigQuery 自动检测架构

如何将特定日期格式加载到 BigQuery

BigQuery 加载作业的无架构解决方案

Google-BigQuery - CSV 文件的架构解析