Google Dataflow: как вставить поле многократного ввода типа RECORD в Big Query? - PullRequest
1 голос
/ 13 июня 2019

Я новичок в потоке данных.У меня есть предопределенная схема, содержащая неповторяющееся поле RECORD под названием «устройство»:

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 Ответ

2 голосов
/ 13 июня 2019

Обнаружил проблему.По-видимому, это сообщение об ошибке было вызвано только в том случае, если для поля «configId» было установлено значение «ноль», а не «conf1».Чтобы быть точным, это было неявно установлено в JSONObject.NULL, поступающий из некоторого входного объекта.

...