Google bigquery 使用DataStudio修剪BigQuery分区

Google bigquery 使用DataStudio修剪BigQuery分区,google-bigquery,google-data-studio,Google Bigquery,Google Data Studio,对于这个问题,我有一个几乎相同的场景: 还有一个并发症。我需要在DataStudio中显示结果 设置 我有一系列的数据集,它们以不同的时间间隔出现,我需要得到最新的分区。因为它们的时间间隔不一致,所以我不能只得到最后一天并利用它 我可以使用BigQuery脚本使用动态查询成功地修剪查询,但是当我将此查询移动到DataStudio中时,查询无法正确加载 该表加载到数据源部分: 但当我真的试图在报告中使用它时: Data Studio cannot connect to your data se

对于这个问题,我有一个几乎相同的场景:

还有一个并发症。我需要在DataStudio中显示结果

设置

我有一系列的数据集,它们以不同的时间间隔出现,我需要得到最新的分区。因为它们的时间间隔不一致,所以我不能只得到最后一天并利用它

我可以使用BigQuery脚本使用动态查询成功地修剪查询,但是当我将此查询移动到DataStudio中时,查询无法正确加载

该表加载到数据源部分:

但当我真的试图在报告中使用它时:

Data Studio cannot connect to your data set.

Failed to fetch data from the underlying data set

Error ID: e6546a97

有没有一种方法可以让DataStudio通过修剪正确地显示这一点

示例查询

DECLARE max_date DATE;
SET max_date = (SELECT DATE(MAX(_partitiontime)) FROM `dataset.table`);   

SELECT *
FROM `dataset.table`
WHERE DATE(_partitiontime ) = max_date

您可以访问
project.dataset.information\u 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"
)
确保您了解修剪可用于上述查询:

解决方法: 可以使用日期参数并进行如下查询:

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"
并将其显示到表格中,以向用户提供信息


实际上,这种解决方法意味着您相信最终用户不会过多地使用日期范围。

DECLARE
语句在DataStudio中不起作用,因为整个自定义查询都包装在一个外部select中,因此此语法无效。。。。。。。。从(声明最长日期)Aah,这是有意义的。我很惊讶它竟然能找出所有的表。查询可以工作,但不幸的是它仍然扫描所有的分区,这对于我要处理的一些大型表来说并不是一个很好的解决方案。@DominicWoodman你确定吗?我使用了这个技巧,效果很好。确实很奇怪:这个查询在我的项目中的一个分区表上按预期工作(查询10Mb,主要是信息模式,而不是整个表的数百Mb),然而,当我在BQ公共数据集中的分区表上尝试相同的查询时,整个表都被解析了…@Cylldby Prunning确实工作得很好,请参见关于大型公共数据集的图片。不要使用BigQueryUI上投影的数字,它使用的是干运行特性,不反映修剪。运行查询并查看它正在修剪分区。