BigQuery“复制表”不适用于小表

BigQuery "copy table" not working for small tables

提问人:Idan 提问时间:2/8/2016 最后编辑:Idan 更新时间:2/23/2020 访问量:2064

问:

我正在尝试使用 API 将 BigQuery 表从同一数据集中的一个表复制到另一个表。 虽然复制大表似乎工作得很好,但复制行数有限 (1-10) 的小表,我注意到目标表是空的(已创建但 0 行)。 我使用 API 和 BigQuery 管理控制台得到了相同的结果。

对于我拥有的任何数据集中的任何表,都会复制该问题。看起来像一个错误或设计的行为。

在文档中找不到任何“最小行数”指令。.我错过了什么吗?

编辑:截图

原始表:2 行的 video_content_events

复制表:copy111 with 0 rows

谷歌-bigquery

评论

0赞 DoiT International 2/9/2016
您是否尝试过向 Google 开具支持票并寻求他们的帮助?在我看来,这不符合指定行为。

答:

1赞 DoiT International 2/9/2016 #1

在同一数据集或不同数据集上复制表没有最小记录限制。这适用于 API 和 BigQuery 界面。我刚刚复制了您创建一个只有 2 条记录的新表的场景,并且我能够使用 UI 成功将该表复制到另一个表。

附上屏幕截图

评论

0赞 Idan 2/9/2016
用我的屏幕截图更新了我的问题......看到你的后又试了一次。.仍然不起作用:\
5赞 Sean Chen 2/9/2016 #2

你是如何填充小桌子的?您是否可能使用流式插入(命令行工具中的 bq insert,tabledata.insertAll 方法)?如果是这样,根据文档,数据最多可能需要 90 分钟才能复制/导出:

https://cloud.google.com/bigquery/streaming-data-into-bigquery#dataavailability

我不会非常详细,但原因是我们的复制和导出操作经过优化,可以处理具体化文件。流式缓冲区中的数据存储在完全不同的系统中,因此在缓冲区刷新到传统存储机制之前不会被拾取。也就是说,我们正在努力消除复制/导出延迟。

如果您不使用流式插入来填充表,那么请务必联系支持人员/在此处提交错误。

评论

0赞 Idan 2/9/2016
我正在使用 API 中的 tabledata.insertAll 方法......这解释了很多。在 2 行表一夜未动之后,我现在尝试了它,它确实按预期复制了它。这是否意味着如果我有一个大表(1m 行),并且在副本运行之前我插入了 1 行,最后一行将不会包含在新表中?
2赞 Sean Chen 2/9/2016
是的。最后一行不会被复制。您可以(以查询为代价)将“select *”“放入目标表(确保允许较大的结果并禁用扁平化),该表将包含所有内容 - 流数据对查询和 tabledata.list 完全可见。否则,根据文档,执行 tables.get(每隔几分钟),直到“streamingBuffer”部分消失(最多 90 分钟),此时 copy 应该获取所有行。
0赞 WJA 12/3/2020
这种延迟仍然存在?今天做了一个复制(覆盖)到另一个数据集,基本上一些表在这个复制之后变成了空的(在目标数据集中)
0赞 user12947240 2/23/2020 #3

我尝试复制到时间戳分区表。我搞砸了时间戳和 1000 x 当前时间戳。猜猜它超出了 BigQuery 的最大分区范围。尽管复制作业成功,但实际上不会将任何数据加载到目标表中。