流式传输到 BigQuery 表的数据何时可用于 Query 操作?

Posted

技术标签:

【中文标题】流式传输到 BigQuery 表的数据何时可用于 Query 操作?【英文标题】:When will the data streamed to BigQuery table be available for Query operations? 【发布时间】:2017-03-01 10:17:06 【问题描述】:

我有一个用例,我在其中执行以下操作:

    将一些行插入到按日期分区的 BigQuery 表 (t1) 中。 在 t1 上运行一些查询以聚合数据并将它们存储在另一个表中。

在上述用例中,我今天遇到了一个问题,即我运行的查询在聚合数据中存在一些差异。当我稍后从 BigQuery 的 Web UI 执行相同的查询时,聚合很好。我怀疑某些插入的行不可用于查询。

我阅读了有关 BigQuery 数据可用性的 this 文档。对此我有以下疑惑:

    该链接显示“在第一次流式插入表格后的几秒钟内,流式数据可用于实时分析”。在可用于实时分析之前等待的秒数是否有上限? 来自同一链接:“数据最多可能需要 90 分钟才能用于复制和导出操作”。以下操作是否受此限制? 将查询结果复制到另一个表中 将查询结果导出到云存储中的 csv 文件 同样来自同一链接-“当流式传输到分区表时,流式缓冲区中的数据具有 _PARTITIONTIME 伪列的 NULL 值”。这是否意味着我不应该在查询中使用 _PARTITIONTIME,直到数据存在于流缓冲区中?

有人可以澄清一下吗?

【问题讨论】:

【参考方案1】:

您可以使用_PARTITIONTIME is null 来检测缓冲区中的行。您实际上可以使用此逻辑将此缓冲区进一步 UNION 到您希望的日期(例如今天)。您可以在一些读取缓冲区的逻辑中进行连线,如果时间为空,它将为其余的查询逻辑设置时间。

这个缓冲区在设计上有点延迟,但是如果您需要立即访问数据,您需要使用 IS NULL 技巧来查询它。

【讨论】:

谢谢@Pentium10。关于第一个和第二个问题的任何信息也会有所帮助。【参考方案2】:

问题:

以下操作是否受此限制?

Copy the result of a query to another table
Exporting the result of a query to a csv file in cloud storage

查询的结果可立即用于任何操作(如复制和导出) - 即使该查询是针对仍在缓冲区中的流数据运行的。

【讨论】:

谢谢@Felipe

以上是关于流式传输到 BigQuery 表的数据何时可用于 Query 操作?的主要内容,如果未能解决你的问题,请参考以下文章

Google BigQuery - 将数据流式传输到 BigQuery

将数据流式传输到 bigquery 仅返回部分数据

将 JSON 流式传输到 Bigquery

使用java将json数据流式传输到Bigquery中。不使用作业加载数据

使用 Java 将 JSON 流式传输到 BigQuery

将数据流式传输到BigQuery