资源管理器不使用BigQuery分区

时间:2018-09-21 15:29:17

标签: google-bigquery google-data-studio

我们在按时间划分的Google BigQuery(按天划分)表中拥有数年的数据,我们希望使用资源管理器功能对其进行浏览。但是,资源管理器仪表板为我们编写的查询未正确使用这些分区。例如:

我想查看2018年9月1日至2018年9月5日的总收入和展示次数。我使用资源管理器选择日期作为维度,选择总收入和展示次数作为指标,并使用日期过滤器单击2018-09-01作为开始,并单击2018-09-05作为结束:

SELECT
  SUM(t0.revenue) AS t0_qt_4bw5pro3qb,
  SUM(t0.paid_impressions) AS t0_qt_63zplro3qb,
  FORMAT_TIMESTAMP('%Y%m%d', TIMESTAMP(t0.date)) AS t0_qt_f1ghgro3qb
FROM
  `project.dataset.table` AS t0
WHERE
  FORMAT_TIMESTAMP('%Y%m%d', TIMESTAMP(t0.date)) BETWEEN '20180901'
  AND '20180905'
GROUP BY
  t0_qt_f1ghgro3qb
ORDER BY
  t0_qt_f1ghgro3qb DESC;

这是资源管理器为我生成的查询。但是,如果我查看预计的成本,则表明成本将超过200MB。它没有正确使用分区。如果我更改以下内容:

WHERE FORMAT_TIMESTAMP('%Y%m%d', TIMESTAMP(t0.date)) BETWEEN '20180901'
AND '20180905'

WHERE date BETWEEN '2018-09-01' AND '2018-09-05'

查询成本降至上述成本的不到1%(1.47MB),这证实了我对原始资源管理器查询未正确使用分区表的怀疑。

如果我手动选择日期大于或等于20180901且小于或等于20180905的高级过滤器,则会生成以下查询:

SELECT
  SUM(t0.revenue) AS t0_qt_4bw5pro3qb,
  SUM(t0.paid_impressions) AS t0_qt_63zplro3qb,
  FORMAT_TIMESTAMP('%Y%m%d', TIMESTAMP(t0.date)) AS t0_qt_f1ghgro3qb
FROM
  `project.dataset.table` AS t0
WHERE
  (t0.date >= PARSE_DATE('%Y%m%d', '20180901')
    AND t0.date <= PARSE_DATE('%Y%m%d', '20180905'))
GROUP BY
  t0_qt_f1ghgro3qb
ORDER BY
  t0_qt_f1ghgro3qb DESC;

这会将大小缩小到1.47MB,从而使用适当的分区。

我真的很想使用常规的日期过滤器,因为与手动选择高级过滤器并添加一定的日期范围相比,它易于使用并且可以节省大量时间,尤其是在您频繁使用Explorer功能时

所以我不确定这是否是错误,或者我做错了什么。有问题的表格在日期列上按日期进行分区,日期列的类型为DATE,并以“ YYYY-MM-DD”格式存储日期。

0 个答案:

没有答案