针对磁盘和流缓冲区的{b}装饰器行为

时间:2017-03-24 17:20:12

标签: google-bigquery

我正在尝试使用bigquery's decorator,但我想确认一些行为。

经过一些实验,我们发现在执行查询的不同时间内,相同绝对间隔的查询结果不一样。如果我通过批量发出60个查询来查询最近一小时间隔的实时流表,每个粒度为一分钟,我可以看到每个查询的数据输出均匀分布。但是,如果我在说2小时之后查询相同的小时间隔。输出负载变得非常偏斜。我看到输出大小为0的很多分钟,并且突然间在一分钟间隔内出现一个尖峰几乎包含该小时的所有数据。

例如,从时间戳8:00 AM到9:00 AM查询具有绝对值的同一个表

如果我在上午9:10执行查询,我得到的输出行数如下:

8:01AM - 8:02AM: 12
8:02AM - 8:03AM: 9
8:03AM - 8:04AM: 10
8:04AM - 8:05AM: 22
8:05AM - 8:06AM: 15
…

如果我在11:00 AM执行查询,我会得到输出行的结果编号,如:

8:01AM - 8:02AM: 0
8:02AM - 8:03AM: 0
8:03AM - 8:04AM: 0
8:04AM - 8:05AM: 0
8:05AM - 8:06AM: 0 
…
8:20AM - 8:21AM: 123
…

我认为差异是由数据是在流缓冲区还是磁盘中引起的。然而,它有点破坏了查询给定范围的同一个表的幂等性,并且导致使用它的很多复杂性。因此,我希望澄清一些预期的行为。

  1. 此查询结果的差异是否真的是由流缓冲区和磁盘之间的数据驻留造成的?
  2. 假设差异是由于(1),当数据从缓冲区刷新到磁盘时,该数据是否会重新分配给未来时间戳的屏幕截图,或者是否可以重新分配到过去的时间戳。问题涉及在使用装饰器时是否可能错过任何流数据。
  3. 当暴露于查询结果时,是否保证数据的重新分配是原子的?即对于同一行,它只会使用一个服务器时间戳进行版本控制?
  4. 假设将数据重新分配给未来时间戳的屏幕截图。无论如何,BQ都可以在查询组上提供事务读取。假设我正在对表的多个查询进行批处理,每个查询都会覆盖一个唯一的分钟间隔,而在执行这些查询的同时,在后台有缓冲区刷新。可能相同的数据将出现在多个查询输出中。问题涉及在使用装饰器时是否可以获得重复数据。
  5. 编辑:

    另外一些观察。我发现经过一段时间后,查询结果将会稳定下来,即同一查询的结果在我执行它们时不会改变。我认为这是因为该时间范围的数据“快照”已经完成。那么我是否有可能知道BigQuery从缓冲区刷新数据的开放程度以及数据获取快照的频率如何? (或任何确定bq装饰器查询结果的机制)。也就是说,当bq装饰器的输出可以最终确定时,是否有保证的时间限制?

0 个答案:

没有答案