【问题标题】:BigQuery "copy table" not working for small tablesBigQuery“复制表”不适用于小表
【发布时间】:2016-02-08 14:37:20
【问题描述】:

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

我拥有的任何数据集中的任何表都会出现此问题。看起来像一个错误或设计的行为。

在文档中找不到任何“最小行数”指令。我是否遗漏了什么?

编辑: Screenshots

原始表:video_content_events 2 行

复制表:copy111 0 行

【问题讨论】:

  • 您是否尝试过向 Google 开具支持请求并寻求他们的帮助?在我看来,这不是指定的行为。

标签: google-bigquery


【解决方案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 的最大分区范围。尽管复制作业成功,但实际上没有数据加载到目标表中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-18
    • 2017-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多