将数据附加到从 BigQuery 中的 Avro 文件创建的表中

Posted

技术标签:

【中文标题】将数据附加到从 BigQuery 中的 Avro 文件创建的表中【英文标题】:Appending data to a table created from an Avro file in BigQuery 【发布时间】:2016-08-17 14:49:31 【问题描述】:

每天早上,自动作业都会从 Avro 文件创建一个新表。下午,我需要从 Query 中将一些数据附加到该表中。

尝试这样做时,我收到以下错误:

Error: Invalid schema update. Field chn has changed mode from REQUIRED to NULLABLE

我注意到我可以在 BigQuery Web UI 中将字段 chn 的属性从 REQUIRED 更改为 NULLABLE,然后它工作正常,但我必须每天手动执行此操作,这不是我要做的正在寻找。

有没有办法在追加查询期间将字段“转换”为REQUIRED

或者在第一次从 Avro 文件导入期间,强制字段为NULLABLE 而不是REQUIRED

谢谢!

【问题讨论】:

【参考方案1】:

允许在查询或加载作业中放宽字段的功能将很快在生产中可用。我会在它上线时更新这个答案(可能在一周内)。

更新:2016 年 8 月 25 日

您可以在加载或查询作业配置中提供 schemaUpdateOptions。 可以提供多个选项。 它允许将目标表的架构作为加载或查询作业的副作用进行更新。在两种情况下支持架构更新选项:

当 writeDisposition 为 WRITE_APPEND 时 当 writeDisposition 为 WRITE_TRUNCATE 并且目标表是表的分区时,由分区装饰器指定 对于非分区表,WRITE_TRUNCATE 将始终覆盖架构。

支持以下值:

ALLOW_FIELD_ADDITION: 允许向架构添加一个可为空的字段 ALLOW_FIELD_RELAXATION:允许将原始模式中的必填字段放宽为可为空

注意:这目前不适用于架构自动检测。我们计划尽快提供支持。

【讨论】:

更改已生效,但我们正在解决一些文档问题。我会尽快更新这篇文章,详细说明如何使用它 由于文档可能需要更多时间才能出来,我更新了答案,简要说明了如何使用这些选项。

以上是关于将数据附加到从 BigQuery 中的 Avro 文件创建的表中的主要内容,如果未能解决你的问题,请参考以下文章

从 Avro 将 unix 时间戳(以秒为单位)导入 Bigquery 中的正确时间戳

将 avro 十进制数据加载到 BigQuery 中?

如何将 AVRO 文件中的整数值加载到 bigquery 中的日期列?

将 Avro 文件加载到 BigQuery 失败并出现内部错误

使用压缩的 AVRO 从 BigQuery 导出表

Google BigQuery 从 Avro internalError 创建/追加到表