BigQuery如何按时分区表工作?

Rog*_*ull 5 caching google-bigquery

在与大量查询资料的对比,我们可以看到,它DOES从流选择数据时缓存结果,数据分区表(标准SQL).

示例: 当我们使用以下内容对流式数据分区表执行确定性日期扫描时:

where (_PARTITIONTIME > '2017-11-12' or _PARTITIONTIME is null)

...如果我们在该时间范围内触发相同的确切查询,BigQuery会将数据缓存5到20分钟.

在我对文档的解释中,它声明它不应该缓存数据:

'当查询引用的任何表最近收到流式插入(流式缓冲区附加到表)时,即使没有新行已到达'

重要笔记:

  • 我们的测试查询会查询真正连续到达我们的心跳事件
  • 我们实际上想要这种缓存行为,因为我们并不总是需要将数据实际存储到最后一秒.我们只想知道我们是否真的可以依赖这种行为.

我们的问题:

  • 这里发生了什么/为什么BQ缓存会发生?

  • 此数据在BQ缓存中保留的时间是"随机"(5-20​​分钟之间).这是什么意思?

Hua*_*ang 3

感谢您澄清问题。我认为我们没有禁用带有流数据的分区表的缓存是一个疏忽。应该如此,否则查询可能会返回过时的结果。

当表更改时,我们会使缓存失效。流式传输到表中将导致表发生更改。我猜这就是缓存在 5 到 20 分钟内失效的原因。

  • 是的,这是奇怪/错误的行为。我在内部提交了一个错误。对于分区表,我们不考虑流缓冲区来进行缓存,但我们应该这样做。当流缓冲区中批量的数据写入表时,表会发生更改,从而使缓存失效。感谢您报告这一问题。 (2认同)