2016-01-26 21 views
0
我使用的Google BigQuery API進行插入數據至BigQuery

(解決)插入至BigQuery不相同的行號輸入

public void upload(Collection<Bucket> buckets){ 
log.finer("Uploading " + buckets.size() + " buckets to bigquery"); 
List<Rows> rows=new ArrayList<Rows>(); 
for ( Bucket bucket : buckets) { 
TableRow row=new TableRow(); 
row.set("uploaded",System.currentTimeMillis()/1000f); 
row.set("codepoint",bucket.getKey().getCodepoint()); 
row.set("namespace",bucket.getKey().getNamespace()); 
row.set("kind",bucket.getKey().getKind()); 
row.set("op",bucket.getKey().getOp()); 
row.set("query",bucket.getKey().getQuery()); 
row.set("time",bucket.getKey().getTime()/1000f); 
row.set("reads",bucket.getReads()); 
row.set("writes",bucket.getWrites()); 
TableDataInsertAllRequest.Rows rowWrapper=new TableDataInsertAllRequest.Rows(); 
rowWrapper.setJson(row); 
rows.add(rowWrapper); 
} 
TableDataInsertAllRequest request=new  
TableDataInsertAllRequest().setRows(rows); 
String tableId=tablePicker.pick(); 
try { 
TableDataInsertAllResponse response=bigquery.tabledata().insertAll(insightDataset.projectId(),insightDataset.datasetId(),tableId,request).execute(); 
if (response.getInsertErrors() != null && !response.getInsertErrors().isEmpty()) { 
    throw new RuntimeException("There were errors! " + response.getInsertErrors()); 
} 
} 
catch ( IOException e) { 
throw new RuntimeException(e); 
} 
} 

我的問題

我用2服務器呼叫功能插入至BigQuery同時,同樣的帳戶bigquery。

例子:

服務器A:有500行

服務器B:有400行

這是正確的,如果插入到Google BigQuery中的900行

但是當我檢查在谷歌的BigQuery有1300行。

當我測試1臺服務器時,它插入正確(500行與服務器A和400行與服務器B)。

你能幫我解決這個問題嗎?

回答

0

你應該正確設置​​propery。您需要了解如何使用您使用的庫。

public TableDataInsertAllRequest.Rows setInsertId(java.lang.String insertId) 
[Optional] A unique ID for each row. BigQuery uses this property to detect duplicate insertion requests on a best-effort basis. 
Parameters: 
insertId - insertId or null for none 

https://developers.google.com/resources/api-libraries/documentation/bigquery/v2/java/latest/com/google/api/services/bigquery/model/TableDataInsertAllRequest.Rows.html#setInsertId(java.lang.String)

+0

這是正確的。非常感謝! –

+0

我使用GUIID作爲insertID,但它不重複。你知道爲什麼嗎? –