我们有一个广告系列管理系统。我们在各种渠道上创建和运行广告系列。当用户单击/访问任何广告时(作为广告系列的一部分),系统将生成日志。我们的系统托管在GCP中。使用“导出”功能日志将导出到BigQuery
在BigQuery中,日志表使用“时间戳记”字段(生成日志的时间)进行分区。我们了解到BigQuery将日期存储在UTC时区,因此分区也基于UTC时间
使用此日志表,我们每天需要生成报告。报告可以像每个广告系列每天的展示次数一样。而且我们需要按照ETC时间显示这些报告。
由于BigQuery表已按UTC时区进行分区,因此查询ETC日可能需要扫描多个分区。是否有人解决了这个问题或有优化存储和查询的建议,以便充分利用BigQuery分区功能
我们计划将GCP Data Studio用于报告。
答案 0 :(得分:2)
BigQuery应该足够聪明,可以在处理分区时过滤出正确的时区。
例如:
SELECT MIN(datehour) time_start, MAX(datehour) time_end, ANY_VALUE(title) title
FROM `fh-bigquery.wikipedia_v3.pageviews_2018` a
WHERE DATE(datehour) = '2018-01-03'
5.0s elapsed, 4.56 GB processed
对于此查询,我们在2018-01-03分区中处理了4.56GB。如果我们想适应美国一日游怎么办?让我们将其添加到WHERE
子句中:
WHERE DATE(datehour, "America/Los_Angeles") = '2018-01-03'
4.4s elapsed, 9.04 GB processed
现在,此查询将自动扫描2个分区,因为它需要几天的时间。对我来说,这已经足够好了,因为BigQuery可以自动找出答案。
但是,如果您想永久优化一个时区怎么办?您可以创建一个生成的移位后的DATE
列-并将其用于PARTITION
。