使用日期分区将数据流式传输到google bigquery模板表

时间:2017-01-23 23:59:35

标签: google-bigquery

我正在尝试使用templateSuffix将数据流式传输到Big Query,并使用Java API将数据附加到表名称 但我得到以下例外:

com.google.api.client.googleapis.json.GoogleJsonResponseException: 400 Bad Request
{
"code" : 400,
"errors" : [ {
"domain" : "global",
"location" : "suffix",
"locationType" : "other",
"message" : "Table name should only contain _, a-z, A-Z, or 0-9.",
"reason" : "invalid"
} ],
"message" : "Table name should only contain _, a-z, A-Z, or 0-9."
}

我使用API​​作为:

String tableName = "testTable$201701"; // 201701 is partition_id
TableDataInsertAllRequest request = new TableDataInsertAllRequest()
                    .setIgnoreUnknownValues(true)
                    .setRows(rows);

// add a template suffix
request.setTemplateSuffix(templateSuffix);

return bigquery
 .tabledata()
 .insertAll(projectId, datasetId, tableName, request)
 .execute();

表上只有templateSuffix或只有日期分区才能正常工作。但不是两者在一起。任何想法如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

有两个单独的用例 - 将数据流式传输到每日分片表并将数据流式传输到每日分区表

每日date-sharded tables是那些每天都有单独表格的day partitioned table,而template table是一个表,但是在“内部”分区

您可以在其中任何一个流式传输 要实现流式传输 - 表必须存在。因此,为了避免为每个新的一天创建新表 - 使用{{3}}(如果您有分区表,则不需要)。
因此,要么流式传输到日分区表的特定分区,要么流式传输以使用模板表分隔每日分片表 不是两个在同一时间!