使用java.util.randomUUID for setInsertId并在一段时间后没有新数据

时间:2014-10-21 05:27:57

标签: google-bigquery

在行级别上设置带有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有没有明显的理由将这些行确定为重复?

1 个答案:

答案 0 :(得分:1)

您能否提供您遇到此行为的时间/表格?在行可能出现之前有1-2分钟的预热期,如果关联的后端系统遇到某些数据可用性问题,偶尔行会花费更长的时间。