我是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的任何想法?
答案 0 :(得分:2)
找出问题所在。显然,仅当“ configId”字段设置为null而不是“ conf1”时才引起此错误消息。确切地说,它是从某个输入对象隐式设置为JSONObject.NULL。