使用 Data Studio 修剪 BigQuery 分区
Posted
技术标签:
【中文标题】使用 Data Studio 修剪 BigQuery 分区【英文标题】:Pruning BigQuery partitions with Data studio 【发布时间】:2021-05-26 00:17:36 【问题描述】:我有一个与这个问题几乎相同的场景:
How to choose the latest partition in BigQuery table?
还有一个额外的并发症。我需要将结果显示在 Data Studio 中。
设置
我有一系列数据集,它们以不同的时间间隔出现,我需要获取最新的分区。因为它们之间的时间段不一致,所以我不能只得到最后一天并使用它。
我可以使用 BigQuery 脚本通过动态查询成功地修剪查询,但是当我将此查询移动到数据洞察时,查询无法正确加载。
表格加载到数据源部分:
但是当我实际尝试在报告中使用它时:
Data Studio cannot connect to your data set.
Failed to fetch data from the underlying data set
Error ID: e6546a97
有没有办法通过修剪让 Data Studio 正确显示?
查询示例
DECLARE max_date DATE;
SET max_date = (SELECT DATE(MAX(_partitiontime)) FROM `dataset.table`);
SELECT *
FROM `dataset.table`
WHERE DATE(_partitiontime ) = max_date
【问题讨论】:
DECLARE
语句在 DataStudio 中不起作用,因为整个自定义查询都包含在外部选择中,因此此语法无效SELECT ........ FROM (DECLARE max_date .......................................)
啊,有道理。我很惊讶它甚至设法弄清楚里面有桌子。
【参考方案1】:
解决方法:
一种可能性是使用日期参数并进行如下查询:
SELECT *
FROM `dataset.table`
WHERE DATE(_PARTITION_TIME)>= PARSE_DATE("%Y%m%d", @DS_START_DATE)
这并不完全是答案,但是使用默认为“昨天到今天”数据的日期范围,您可以有效地将表修剪为仅最近的分区。如果您提到的数据不规则,用户仍然可以手动扩展日期范围,直到找到数据。
同时,您还可以将以下自定义查询添加到您的数据源:
SELECT
MAX(SAFE.PARSE_DATE('%Y%m%d',partition_id)) AS latest_available_partition
FROM `dataset.INFORMATION_SCHEMA.PARTITIONS`
WHERE TABLE_NAME = "table"
并将其显示在表格中以向用户提供信息。
确实,这种解决方法意味着您相信最终用户不会过多地使用日期范围。
【讨论】:
【参考方案2】:您可以访问project.dataset.INFORMATION_SCHEMA.PARTITIONS
表中的所有分区信息。
因此,您可以尝试以下方法:
SELECT *
FROM `dataset.table`
WHERE DATE(_PARTITION_TIME) = (
SELECT
MAX(SAFE.PARSE_DATE('%Y%m%d',partition_id))
FROM `dataset.INFORMATION_SCHEMA.PARTITIONS`
WHERE TABLE_NAME = "table"
)
确保您了解修剪适用于上述查询:
【讨论】:
查询有效,但不幸的是它仍然扫描所有分区,这在我必须使用的一些大表上并不是一个很好的解决方案。 @DominicWoodman 你确定吗?我正在使用这个技巧并且效果很好。 确实很奇怪:这个查询在我的项目中的分区表上按预期工作(查询 10Mb,主要是 INFORMATION_SCHEMA,而不是整个表的数百 Mb),但是当我尝试相同的从 BQ 公共数据集中查询分区表整个表被解析... @Cylldby 剪枝效果很好,请参阅有关大型公共数据集的图片。不要采用 BigQuery 用户界面上预测的数字,该数字使用的是预演功能并且不反映修剪。运行查询并查看它正在修剪分区。以上是关于使用 Data Studio 修剪 BigQuery 分区的主要内容,如果未能解决你的问题,请参考以下文章