将数据插入 BigQuery table
Insert data into BigQuery table
基本上我的代码看起来像 https://cloud.google.com/bigquery/streaming-data-into-bigquery
上的官方示例
我的代码:
TableRow data = new TableRow();
data.set("type", eventType);
data.set("timestamp", new Date());
TableDataInsertAllRequest.Rows row = new TableDataInsertAllRequest.Rows();
row.setInsertId(System.currentTimeMillis());
row.setJson(data);
request = new TableDataInsertAllRequest();
request.setRows(Arrays.asList(row));
TableDataInsertAllResponse response = bigquery.tabledata().insertAll(projectId, datasetId, tableId, request).execute();
for (TableDataInsertAllResponse.InsertErrors err: response.getInsertErrors()) {
for (ErrorProto ep: err.getErrors()) {
log.error(ep.getReason() + " : " + ep.getMessage() + " at " + ep.getLocation());
}
}
但我收到错误:
invalid : JSON map specified for non-record field at null
似乎我错过了什么,但不知道我的代码有什么问题。我有两个字段,String
和 Date
,错误消息对我来说没有任何意义。
如何在 BigQuery 中插入数据table?
经过几个小时的调试,我发现 BigQuery Java 客户端不支持 Date
值。并且应该使用 com.google.api.client.util.DateTime
包装器。
所以,而不是
data.set("timestamp", new Date());
应该有:
data.set("timestamp", new DateTime(new Date()));
希望对大家有所帮助。
基本上我的代码看起来像 https://cloud.google.com/bigquery/streaming-data-into-bigquery
上的官方示例我的代码:
TableRow data = new TableRow();
data.set("type", eventType);
data.set("timestamp", new Date());
TableDataInsertAllRequest.Rows row = new TableDataInsertAllRequest.Rows();
row.setInsertId(System.currentTimeMillis());
row.setJson(data);
request = new TableDataInsertAllRequest();
request.setRows(Arrays.asList(row));
TableDataInsertAllResponse response = bigquery.tabledata().insertAll(projectId, datasetId, tableId, request).execute();
for (TableDataInsertAllResponse.InsertErrors err: response.getInsertErrors()) {
for (ErrorProto ep: err.getErrors()) {
log.error(ep.getReason() + " : " + ep.getMessage() + " at " + ep.getLocation());
}
}
但我收到错误:
invalid : JSON map specified for non-record field at null
似乎我错过了什么,但不知道我的代码有什么问题。我有两个字段,String
和 Date
,错误消息对我来说没有任何意义。
如何在 BigQuery 中插入数据table?
经过几个小时的调试,我发现 BigQuery Java 客户端不支持 Date
值。并且应该使用 com.google.api.client.util.DateTime
包装器。
所以,而不是
data.set("timestamp", new Date());
应该有:
data.set("timestamp", new DateTime(new Date()));
希望对大家有所帮助。