Объекты меток времени, отправленные через библиотеки BigQuery, возвращают ошибку «Это поле не является записью» - PullRequest
0 голосов
/ 27 сентября 2018

При отправке полей даты в виде объектов в таблицы BigQuery, которые печатаются как метки времени, библиотека API Java joogle не выдает исключение, но не получает данные.Изучение возвращаемых типов ответов «InsertAllResponse» включает ошибку «Это поле не является записью».

например,

Hashmap<String,Object> rowContent = new Hashmap<>();
rowContent.put("Time", new Date());
rowContent.put("Name", "Harry");

, а затем

BigQuery bq = BigQueryOptions.getDefaultInstance().getService();
TableId tableId = TableId.of(datasetName, tableName);
InsertAllRequest.Builder insertReqBuilder = InsertAllRequest.newBuilder(tableId);
insertReqBuilder.addRow({some string}, row);
InsertAllResponse response = bigquery.insertAll(insertReqBuilder.build());

возвращает ответ.hasErrors () true.

Также сообщается для python здесь и firebase здесь и javascript здесь

1 Ответ

0 голосов
/ 27 сентября 2018

Похоже, что отправка дат в виде объектов заставляет клиентский API создавать запись JSON, а не отдельное поле (и это также предполагает, что типизация даты и времени не была явно отображена, поэтому могут возникнуть проблемы с часовым поясом).

Вместо этого отправьте дату / время в формате UTC секунд с 1970 года, т.е. измените вышеприведенное:

Hashmap<String,Object> rowContent = new Hashmap<>();
rowContent.put("Time", Math.floor(new Date()/1000));
rowContent.put("Name", "Harry");

(Примечание: не знаете, как справиться с миллисекундами, см., Например, BigQuery не имеет дело с меткой времени в миллисекундах со столбцом раздела , я выясню и вернусь)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...