2017-01-23 65 views
0

我想流使用templateSuffix和使用Java API 附加到表名的日期分區數據到大的查詢,但我得到以下異常:流數據到谷歌的BigQuery模板表日期分區

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

有兩個獨立的用例 - 流數據每天分片表數據和流數據,以每天分區表

日報date-sharded tables是那些有獨立的表的每一天對day partitioned table這是一個表,但分區「內部「

你可以在任何這些流中。
對於流式發生 - 表必須存在。因此,爲了避免爲每一個新的一天創建新表 - 使用了template table(如果您有分區表,則不需要)。
因此,要麼流式傳輸到日分區表的特定分區,要麼使用模板表流式分隔日分區表。
不是兩個在同一時間!

+0

那麼,在我的情況下,我有日期分區表。但它超過了每秒100K的插入限制。 (我的速度約爲每秒300K)那麼,我有什麼選擇?這就是我試圖創建多個模板表的原因。但由於明顯的性能原因,我必須保留日期分區。 – figaro

+0

只是簡單的選擇:你可以讓我們說10個表中的每一個表示模10,根據你的數據/環境有意義。所以你只需在你的代碼中進行管理即可。例如,如果您有多臺服務器從您流向BigQuery - 您可以對這些服務器進行模塊化等。希望您有想法 –

+0

正確。但我希望使用模板表可以免除管理個人表格架構的開銷。在這種情況下,我必須自己創建所有這10個具有相同模式的表。對? – figaro