我们使用预定义的 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"]
,我们在引用第三个元素时遇到类似的错误。
要为 NULLABLE 字段提供具有空值的行,只需从要插入的行中省略该字段即可。对于第二个示例,REPEATED 字段(或 SQL 术语中的 ARRAY)不能有 null 元素。要对 NULLABLE STRING 数组进行建模,您可以使用包含名为
value
的 STRING 字段的 REPEATED RECORD,或者相当于 SQL 术语中的 ARRAY<STRUCT<value STRING>>
。
“此字段不是记录”:
如果您遇到字段是否可为空的问题,并且您正在运行 Node 包@google-cloud/bigquery
,请尝试改用
@google-cloud/bigquery-storage
。这为我解决了=)