Google Dataflow:如何将RECORD非重复类型字段插入Big Query?

时间:2019-06-13 10:31:53

标签: google-bigquery google-cloud-dataflow apache-beam

我是Dataflow的新手。我有一个预定义模式,其中包含一个非重复的RECORD字段,称为“ device”:

device.configId: STRING
device.version: STRING

使用ParDo转换,我尝试插入具有这种字段的TableRow,如下所示:

TableRow row = new TableRow();
row.put("field1", "val1");
TableRow device = new TableRow();
device.put("configId", "conf1");
device.put("version", "1.2.3");
row.put("device", device);
out.output(row);

我记录了表格行,它看起来像这样:

{field1=val1, device={configId=conf1, version=1.2.3}}

我将其输出到标准转换:BigQueryIO.write()

但是后者发出一个错误:

java.lang.RuntimeException: java.io.IOException:
Insert failed: [{"errors":[{
    "debugInfo":"",
    "location":"device.configid",
    "message":"This field is not a record.",
    "reason":"invalid"
}],"index":0}]

不知道为什么,但是请注意该位置拼写为“ configid”(在小写形式下),而不是在骆驼式拼写形式下,如原始日志中那样。

关于如何将这样的对象插入BigQuery的任何想法?

1 个答案:

答案 0 :(得分:2)

找出问题所在。显然,仅当“ configId”字段设置为null而不是“ conf1”时才引起此错误消息。确切地说,它是从某个输入对象隐式设置为JSONObject.NULL。