BigQuery将数据流入表中并从这些表中进行选择

时间:2018-03-24 03:45:10

标签: google-bigquery streaming

我可以在将数据流式传输到bigquery表之前等待多长时间才能从中选择数据?

即使数据仍在流缓冲区中,我也可以选择数据,而不必担心丢失仍在缓冲区中的数据。

但似乎我确实在流媒体后选择了,我丢失了一些数据。

所以这里是这个顺序的陈述,一个接一个地执行。

  1. 创建表A.将数据流式传输到表A
  2. 创建表B.将数据流式传输到表B
  3. 创建表C.将数据流式传输到表C
  4. 创建表D.处理表C数据并从表C中选择数据,将选择结果插入表D
  5. 删除表E(如果存在)。重新创建表E.从表A,B和D中选择连接查询,将查询结果插入表E中。计数表E.例如,计数为200,000。
  6. 现在,几分钟后。我只会重新执行第5步

    Delete Table E if it exists. Re-Create Table E. Join query select from table A, B and D, insert the query result into Table E. Count Table E. 
    

    由于表A,B和D仍然相同,我应该得到与先前计数相同的计数,例如200,000。但这次我得到的数量超过20万。它比以前的计数多了几百个记录,例如200,200条记录。

    现在我只会再次重新执行第5步。

    这一次,我会再次获得200,200条记录。

    似乎第一次,我在流数据后立即选择了声明。我好丢了200条记录。第二次和第三次,在我从可能仍然从流缓冲区获取数据的表中选择之前,我已经等了几分钟,我得到了完整集数据。

    换句话说

    1. 在流式传输数据后立即选择,我会丢失一些记录。
    2. 流式传输后等待几分钟,然后选择。然后我会得到完整的数据而不会丢失任何记录。
    3. 请告知。

      谢谢!

1 个答案:

答案 0 :(得分:0)

正如@GrahamPolley在评论中所述,来自流式插入的所有数据都可用于在流完成后几秒钟查询。在某些情况下,例如中断,可能会阻止这种情况发生,但查询仍然会成功,因为它们会跳过仍在流缓冲区中的一些数据。

Graham已经在问题中对此进行了解释,但以防万一我将重新推荐您关于此主题的Google Cloud文档。您可以找到有关数据可用性的信息here

您还可以查看此文章,以便更好地了解BigQuery streaming的工作原理。

如果您希望了解更精确的等待时间以便在流式传输后获得完整的查询结果,则取决于某些因素,例如流式缓冲区距离查询树的距离,格式为用于存储数据,以及是否可以并行运行操作。