将数据插入BigQuery表

时间:2015-02-17 15:06:19

标签: java google-app-engine google-bigquery google-cloud-platform

基本上我的代码看起来像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

似乎我错过了什么,但不知道我的代码有什么问题。我有两个字段,StringDate,错误消息对我没有任何意义。

如何在BigQuery表中插入数据?

1 个答案:

答案 0 :(得分:18)

经过几个小时的调试后,我发现BigQuery Java Client不支持Date值。并且应该使用com.google.api.client.util.DateTime包装器。

所以,而不是

data.set("timestamp", new Date());

应该有:

data.set("timestamp", new DateTime(new Date()));

希望它会对某人有所帮助。