我正在尝试使用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
…
我认为差异是由数据是在流缓冲区还是磁盘中引起的。然而,它有点破坏了查询给定范围的同一个表的幂等性,并且导致使用它的很多复杂性。因此,我希望澄清一些预期的行为。
编辑:
另外一些观察。我发现经过一段时间后,查询结果将会稳定下来,即同一查询的结果在我执行它们时不会改变。我认为这是因为该时间范围的数据“快照”已经完成。那么我是否有可能知道BigQuery从缓冲区刷新数据的开放程度以及数据获取快照的频率如何? (或任何确定bq装饰器查询结果的机制)。也就是说,当bq装饰器的输出可以最终确定时,是否有保证的时间限制?