0

我正在尝试按时间戳查询我的数据集,但我需要为完整的数据集扫描付费。是否可以仅查询特定时间戳并减少分析数据的大小?

请注意,我正在使用 Stackdrive Sink 在我的数据集上实时传输数据。我对架构没有任何控制权。

SELECT
  REGEXP_EXTRACT(httpRequest.requestUrl, r"^.+cid=([0-9]*)") as cid,
  REGEXP_EXTRACT(httpRequest.requestUrl, r"^.+pid=([0-9]*)") as pid
FROM
   `dataset_20190305` -- Date partition - no time
WHERE timestamp >=TIMESTAMP('2019-03-05 16:50:00')
4

1 回答 1

2

仅使用 where 子句来降低 BQ 查询成本的方法只有两种:分区和集群。从您的数据集名称来看,我怀疑您的数据集仅包含与 3 月 5 日相关的数据。不幸的是,BQ 仅支持日分区,因此对您的情况没有帮助。没有办法按小于天的任何时间块进行分区。话虽如此,如果您只是创建一个表并按天对它进行分区而不是每天创建一个新数据集,它可能会使您的数据更干净。

另一个选项clustering涉及指定一个字段并提供所有潜在值。例如,如果您有一个字符串类型的字段“颜色”,您可以将潜在值设置为“红色”、“绿色”和“蓝色”,从而将查询大小减少到三分之一。

如果您只是想降低成本并发现自己在特定表上重复了很多类似的查询,您可以查询一次并将结果复制到新表中,这实际上会将您的查询限制在指定的时间范围内。

话虽如此,一般来说,尽量遵循 BQ 的建议,例如只选择您感兴趣的列。

于 2019-03-05T22:51:44.430 回答