Google bigquery Bigquery流:创建新表后缺少数据

Google bigquery Bigquery流:创建新表后缺少数据,google-bigquery,Google Bigquery,我们最近注意到,在创建新表后的一段短时间内,没有任何异常或错误的数据流就丢失了。是否有任何已知的宽限期,流式处理应该等待?在表上首次出现流式处理后,有几秒钟的“预热”时间,然后才可进行查询。如果您停止播放超过24小时的视频,然后重新开始播放,则会有类似的预热时间 请参阅此处的文档:我通过一步一步地打印跟踪信息,终于弄清了发生了什么。多线程有助于长期掩盖该问题 这是用于创建表的原始“缺失数据”代码: insert = sBIGQUERY.tables().insert(mProjectId, mD

我们最近注意到,在创建新表后的一段短时间内,没有任何异常或错误的数据流就丢失了。是否有任何已知的宽限期,流式处理应该等待?

在表上首次出现流式处理后,有几秒钟的“预热”时间,然后才可进行查询。如果您停止播放超过24小时的视频,然后重新开始播放,则会有类似的预热时间


请参阅此处的文档:

我通过一步一步地打印跟踪信息,终于弄清了发生了什么。多线程有助于长期掩盖该问题

这是用于创建表的原始“缺失数据”代码:

insert = sBIGQUERY.tables().insert(mProjectId, mDataset, table);
logger.info("Table " + tid.toString()+" is created at " + new Date(insert
                .execute().getCreationTime()));
其中insert.execute().getCreationTime()从未返回。。。。(我不知道为什么)因此我的进程的其余部分(将数据放回发送队列等待下一个流)没有执行

在我将其更改为:

sBIGQUERY.tables().insert(mProjectId, mDataset, table).execute();
logger.info("Table " + tid.toString()+" is created");
它运行正常,我们得到的所有数据到BQ


@Jordan Tigani,你知道getCreationTime()无法返回的原因吗?(或者在我可以等待的相当长的时间内)

我知道数据“可见”的预热时间。但所谓“缺失数据”,我的意思是这些数据不存在于BQ表中。你是说这些数据永远不可用?是的,它们永远不可用。但是我想我找到了答案,除了一个我不能理解的小问题。请参考我的答案。谢谢Jordan我的假设是卡住的调用是execute()而不是getCreationTime()(只有运行execute(),插入才会发生……它不会在调用insert()后立即发生)。您提到了使用多线程。您是否在每个线程中使用新的HTTP对象?如果没有,您将遇到问题。但是,当我将execute()与getCreationTime()分离时,它会正常运行是没有意义的。您提到的新HTTP对象是什么?sBIGQUERY=new Bigquery.Builder(传输、ConfigConstants.JSON\u工厂、凭据).setApplicationName(“BigQuery服务帐户/0.1”).setHttpRequestInitializer(凭证).build();这就是我进行BQ请求调用的全部内容。我应该将http对象放在哪里?确认…我没有意识到您使用的是python而不是java。我应该仔细阅读。也就是说,getCreationTime()不应该阻塞。它只读取已经在内存中的数据。考虑在这里指定超时: