流式传输到BigQuery表的数据什么时候可用于查询操作?

时间:2017-03-01 10:17:06

标签: java google-app-engine google-bigquery

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

  1. 将一些行插入到日期分区的BigQuery表(t1)中。
  2. 在t1上运行一些查询以聚合数据并将它们存储在另一个表中。
  3. 在上面的用例中,我遇到了一个问题,即我运行的查询在聚合数据中存在一些差异。当我稍后从BigQuery的Web UI执行相同的查询时,聚合很好。我怀疑一些插入的行不适用于查询。

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

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

2 个答案:

答案 0 :(得分:2)

您可以使用_PARTITIONTIME is null来检测缓冲区中的哪些行。实际上,你可以使用这个逻辑将UNION这个缓冲区扩展到你想要的日期(比如今天)。你可以在一些读取缓冲区的逻辑中进行连接,如果时间为空,它将为其余的查询逻辑设置一个时间。

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

答案 1 :(得分:1)

问题:

  

以下操作是否受此限制?

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

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