Bigquery 流式插入使用具有空字段的数据流

Posted

技术标签:

【中文标题】Bigquery 流式插入使用具有空字段的数据流【英文标题】:Bigquery streaming inserts using dataflow with null fields 【发布时间】:2017-10-19 00:34:11 【问题描述】:

我们使用预定义的 Dataflow 作业模板将 Bigquery 流式插入与 Dataflow 结合使用。

在将它与可为空和重复的字段一起使用时遇到了一些特殊情况。

例如,使用架构

name   STRING, NULLABLE

正在尝试插入name: null

因错误而失败:

generic::invalid_argument: This field is not a record.","location":"name","message":"This field is not a record."

这没什么大不了的,因为删除空字段很容易,对于空数组也是如此。

但是,现在如果我们的架构是:

name   STRING, REPEATED

如果我们想插入["a", "b", null, "c"],我们在引用第三个元素时遇到了类似的错误。

【问题讨论】:

【参考方案1】:

要为 NULLABLE 字段提供具有空值的行,只需从您要插入的行中省略该字段。对于您的第二个示例,REPEATED 字段(或 SQL 术语中的 ARRAY)不能有 null 元素。例如,要对 NULLABLE STRING 数组建模,可以使用包含名为 value 的 STRING 字段的 REPEATED RECORD,或者在 SQL 术语中等效地使用 ARRAY<STRUCT<value STRING>>

【讨论】:

谢谢!对于后代,我认为我在这里的部分困惑是由于将数据存储导出加载到 bigquery 为结构化属性创建架构的方式。具有单个字段的重复结构化属性作为具有重复字段的单个记录加载到 bigquery 中(我不知道这对于具有重复字段的重复结构化属性如何工作......)我能够将架构更改为 Elliott 建议的内容,并且一切正常。 @Viknesh 你是如何解决你的问题的?您是否使用此处列出的 ARRAY> 方法?

以上是关于Bigquery 流式插入使用具有空字段的数据流的主要内容,如果未能解决你的问题,请参考以下文章

BigQuery 插入作业而不是流式传输

BigQuery 流式插入在 GKE 上失败

使用 AVRO 格式的 BigQuery 流式插入

BigQuery 流式插入使用模板表数据可用性问题

BigQuery 流式插入数据可用性延迟

BigQuery 流式插入如何计费?