在流数据仍在缓冲区中时复制 bigquery 表

Posted

技术标签:

【中文标题】在流数据仍在缓冲区中时复制 bigquery 表【英文标题】:Copy a bigquery table while streaming data is still in buffer 【发布时间】:2018-02-19 17:25:21 【问题描述】:

如果我在流数据仍在缓冲区中时复制 BigQuery 表,我是否会在复制的表中获得完整的数据集?还是我会丢失仍在缓冲区中的数据?

我在数据流仍在进行时编写了复制表的代码。但是由于不知道数据流何时结束,所以不知道复制的表是否会得到完整的数据集。

【问题讨论】:

【参考方案1】:

流缓冲区中的数据仅可用于查询。 如果您复制或导出表 - 缓冲区中的数据将在目标中“丢失”

【讨论】:

谢谢,换句话说,不是使用复制表。我可以使用 1) 创建一个新表 2) 从旧表中选择并插入到新表 这样,即使旧表数据仍在流中,我不会丢失新表中的任何数据? 正式 - 以上是正确的 - 注意:您将支付全表扫描费用。 谢谢。我的数据足够大,需要在 BigQuery 上运行。但它足够小,我不必担心扫描成本。 :) 但是就知识而言,如果我将数据流式传输到两个表会比将数据流式传输到一个表然后将数据复制(或选择插入)到第二个表更便宜吗? 只是比较流媒体和查询的价格:o)【参考方案2】:

只是在此处添加此答案,因为可能@searain 评论并非对所有人可见,但此问题的解决方案是:

而不是运行复制作业来复制表。您可以运行此查询来进行复制:

CREATE TABLE destinationTableName As SELECT * FROM sourceTableName

由于@Mikhail 提到缓冲区数据仅可用于查询,因此此查询将复制所有数据。

【讨论】:

以上是关于在流数据仍在缓冲区中时复制 bigquery 表的主要内容,如果未能解决你的问题,请参考以下文章

在 BigQuery 中流式传输数据

BigQuery Python 无法删除数据集:数据集仍在使用中 [重复]

标准化 bigquery 中时间序列数据条目之间的时间

计算 BigQuery 中时间戳之间的平均延迟

流式 BigQuery API

如何等待 x264enc 在流尾编码缓冲帧