BigQuery中与时区相关的问题(用于分区和查询)

时间:2019-03-11 02:05:32

标签: google-cloud-platform google-bigquery google-data-studio

我们有一个广告系列管理系统。我们在各种渠道上创建和运行广告系列。当用户单击/访问任何广告时(作为广告系列的一部分),系统将生成日志。我们的系统托管在GCP中。使用“导出”功能日志将导出到BigQuery

在BigQuery中,日志表使用“时间戳记”字段(生成日志的时间)进行分区。我们了解到BigQuery将日期存储在UTC时区,因此分区也基于UTC时间

使用此日志表,我们每天需要生成报告。报告可以像每个广告系列每天的展示次数一样。而且我们需要按照ETC时间显示这些报告。

由于BigQuery表已按UTC时区进行分区,因此查询ETC日可能需要扫描多个分区。是否有人解决了这个问题或有优化存储和查询的建议,以便充分利用BigQuery分区功能

我们计划将GCP Data Studio用于报告。

1 个答案:

答案 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

enter image description here

对于此查询,我们在2018-01-03分区中处理了4.56GB。如果我们想适应美国一日游怎么办?让我们将其添加到WHERE子句中:

 WHERE DATE(datehour, "America/Los_Angeles") = '2018-01-03'

 4.4s elapsed, 9.04 GB processed

enter image description here 现在,此查询将自动扫描2个分区,因为它需要几天的时间。对我来说,这已经足够好了,因为BigQuery可以自动找出答案。

但是,如果您想永久优化一个时区怎么办?您可以创建一个生成的移位后的DATE列-并将其用于PARTITION