BigQuery“复制表”不适用于小表
Posted
技术标签:
【中文标题】BigQuery“复制表”不适用于小表【英文标题】:BigQuery "copy table" not working for small tables 【发布时间】:2016-02-08 14:37:20 【问题描述】:我正在尝试使用 API 将 BigQuery 表从同一数据集中的一个表复制到另一个表。 虽然复制大表似乎工作得很好,但复制行数有限(1-10)的小表我注意到目标表是空的(创建但有 0 行)。 我使用 API 和 BigQuery 管理控制台得到了相同的结果。
我拥有的任何数据集中的任何表都会出现此问题。看起来像一个错误或设计的行为。
在文档中找不到任何“最小行数”指令。我是否遗漏了什么?
编辑: Screenshots
原始表:video_content_events 2 行
复制表:copy111 0 行
【问题讨论】:
您是否尝试过向 Google 开具支持请求并寻求他们的帮助?在我看来,这不是指定的行为。 【参考方案1】:您如何填充小桌子?您是否可能使用流式插入(来自命令行工具的 bq 插入,tabledata.insertAll 方法)?如果是这样,根据文档,数据最多可能需要 90 分钟才能复制/导出:
https://cloud.google.com/bigquery/streaming-data-into-bigquery#dataavailability
我不会详细说明,但原因是我们的复制和导出操作已针对具体化文件进行了优化。我们的流缓冲区中的数据存储在一个完全不同的系统中,因此在缓冲区刷新到传统存储机制之前不会被拾取。也就是说,我们正在努力消除复制/导出延迟。
如果您不使用流式插入来填充表格,请务必联系支持/提交错误here。
【讨论】:
我正在使用 API 中的 tabledata.insertAll 方法......这解释了很多。在 2 行表一夜未动之后,我现在尝试了它,它确实按预期复制了它。这是否意味着如果我有一个大表(1m 行)并且在复制运行之前我插入了 1 行,最后一行将不会包含在新表中? 是的。最后一行不会被复制。您可以(以查询为代价)“选择 *”到目标表中(确保允许大结果并禁用展平),该表将包含所有内容 - 流数据对查询和 tabledata.list 完全可见。否则,根据文档,执行 tables.get(每隔几分钟),直到“streamingBuffer”部分消失(最多 90 分钟),此时副本应该获取所有行。 这种延迟仍然存在吗?今天做了一个复制(覆盖)到另一个数据集,基本上一些表在这个复制之后变成了空的(在目标数据集中)【参考方案2】:在同一数据集或不同数据集中复制表没有最低记录限制。这适用于 API 和 BigQuery UI。我刚刚复制了您创建一个只有 2 条记录的新表的场景,并且我能够使用 UI 成功地将表复制到另一个表。
Attaching screenshot
【讨论】:
用我的截图更新了我的问题......我看到你的后再次尝试......仍然不起作用:\【参考方案3】:我试图复制到时间戳分区表。我搞砸了时间戳和 1000 x 当前时间戳。猜猜它超出了 BigQuery 的最大分区范围。尽管复制作业成功,但实际上没有数据加载到目标表中。
【讨论】:
以上是关于BigQuery“复制表”不适用于小表的主要内容,如果未能解决你的问题,请参考以下文章
BigQuery - 在 UI 上复制表格 - 不复制所有表格
如何在 BigQuery 的开始日期和结束日期之间复制生成日期的行?