在行级别上设置带有randomUUID的insertid,经过一段时间后,我发现大型查询没有引入任何行。我已经检测了代码以捕获故障,即使没有导致重试的失败,也不会将数据流式传输到大型查询中。也许我应该提到的一件事是我们保持连接队列以避免热身期和所有。我怀疑它以某种方式识别任何传入的行是重复的!
将一批行填充为; rowList.add(new Rows()。setJson(this.row).setInsertId(UUID.randomUUID()。toString()));
然后,调用InsertBatch方法;
TableDataInsertAllRequest content = new TableDataInsertAllRequest().setRows(rowList);
Throwable cause = null;
try{
while(retryStrategy.retriesRemaining()){
try{
@SuppressWarnings("unused")
TableDataInsertAllResponse response = bq.tabledata().insertAll(bqProjectId, DataSetId, TableId, content).execute();
if (response.getInsertErrors()!=null){
warn("Inserting One of the rows has failed");
statsKeeper.post(BigQueryStat.REMOTE_SERVICE_UNAVAILABLE.getId(), 1L);
throw new SocketTimeoutException();
}
else
return true;
} catch(Throwable e){
cause = e;
if (!shouldRetry(e, retryStrategy)) {
statsKeeper.post(BigQueryStat.SERVICE_DOWN_REPORT.getId(), 1L);
throw e;
}
}
}
if(!retryStrategy.retriesRemaining())
statsKeeper.post(BigQueryStat.SERVICE_DOWN_REPORT.getId(), 1L);
} catch(Exception e){
throw Throwables.propagate(e);
}
google bq apis有没有明显的理由将这些行确定为重复?
答案 0 :(得分:1)
您能否提供您遇到此行为的时间/表格?在行可能出现之前有1-2分钟的预热期,如果关联的后端系统遇到某些数据可用性问题,偶尔行会花费更长的时间。