如何在不加载所有数据的情况下通过时间戳分区查询stackdrive通过BigQuery下载的Google Cloud Load Balancer请求?

问题描述 投票:0回答:1

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

请注意,我正在使用Stackdriver 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')
google-bigquery google-cloud-stackdriver google-cloud-load-balancer
1个回答
2
投票

仅使用where子句减少BQ查询成本的方法有两种:分区和群集。根据您的数据集名称判断,我怀疑您的数据集仅包含与3月5日相关的数据。不幸的是,BQ只支持日partitioning,所以它对你的情况没有帮助。没有办法按小于天的任何时间块进行分区。话虽这么说,如果您只是创建一个表并按天分区而不是每天创建一个新数据集,它可能会使您的数据更清晰。

另一个选项clustering涉及指定一个字段并提供所有潜在值。例如,如果您有一个String类型的字段“Color”,则可以将潜在值设置为“Red”,“Green”和“Blue”,从而将查询大小减小到三分之一。

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

总的来说,尝试遵循BQ的recommendations,例如只选择您感兴趣的列。

© www.soinside.com 2019 - 2024. All rights reserved.