相关疑难解决方法(0)

重新创建BigQuery表后,流插入不起作用?

我刚刚遇到了BigQuery的一个有趣的问题.

基本上有一个批处理作业在BigQuery中重新创建一个表 - 删除数据 - 然后立即开始通过流接口提供新的集合.

曾经这样工作很长一段时间 - 成功.

最近它开始松散数据.

一个小的测试用例已经确认了这种情况 - 如果数据源在重新创建(成功!)表后立即启动,则数据集的某些部分将丢失.即在被输入的4000条记录中,只有2100 - 3500可以通过.

我怀疑在表操作(删除和创建)在整个环境中成功传播之前,表创建可能会返回成功,因此数据集的第一部分将被提供给表的旧副本(在此推测).

为了确认这一点,我在表创建和启动数据馈送之间设置了超时.实际上,如果超时小于120秒 - 部分数据集将丢失.

如果超过120秒 - 似乎工作正常.

以前没有要求超时.我们正在使用美国BigQuery.我错过了一些明显的东西吗?

编辑:从下面的肖恩陈提供的评论和一些其他来源 - 由于表的缓存方式和内部表id传播到整个系统的方式,行为是预期的.BigQuery是为仅附加类型的操作而构建的.重写不是人们可以容易地适应设计的东西,应该避免.

google-bigquery

5
推荐指数
1
解决办法
1289
查看次数

将数据流式传输到 BigQuery 新表中?

我正在使用 Google BigQuery 的 Java API 将实时事件日志流式传输到数据库中。

由于事先不知道事件的结构,因此当事件开始到来时,我需要在 java 中实时创建表。

这是通过调用 来实现的bigQuery.create( tableInfo )。根据 BigQuery Web 控制台,此调用是同步的,并且在此调用之后立即创建具有预期结构的表。

但是,当我尝试通过以下方式将数据流式传输到这个新创建的表中时

bigQuery.insertAll(request);
Run Code Online (Sandbox Code Playgroud)

a在表实际存在时BigQueryException引发消息Not found: Table myProject.myDataset.myNewTableName!等待几秒钟(大约 30 秒)后,流媒体开始正常工作。
此外,即使bigQuery.listtables(dataset, tableListOptions)从服务器调用确认该表存在,也会出现问题!

查看谷歌文档后,

更改模板表架构后,请等待更改传播,然后再尝试插入新数据或查询生成的表。插入新字段的请求应该会在几分钟内成功。尝试查询新字段可能需要长达 90 分钟的更长等待时间。

这就是原因吗?流式插入无法在新表上工作是正常行为吗?有解决方法吗?

任何关于这种情况的想法都将受到欢迎。

谢谢 ;)

java google-bigquery

5
推荐指数
0
解决办法
669
查看次数

标签 统计

google-bigquery ×2

java ×1