gpt4 book ai didi

google-bigquery - 当我查询分区表时,是否可以通过子查询按分区列进行过滤并同时降低成本?

转载 作者:行者123 更新时间:2023-12-04 18:18:27 25 4
gpt4 key购买 nike

我可以从公开文档中看到 BigQuery 分区表有这个 limitation如果分区列有一个子查询作为过滤器,它不会修剪查询的分区并减少“处理的字节数”(成本)。我想知道是否有解决方法。

例如,此查询将扫描 38.67 GB,有没有办法减少它?

WITH sub_query_that_generates_filter AS (
SELECT DATE "2016-10-01" as month UNION ALL
SELECT "2017-10-01" UNION ALL
SELECT "2018-10-01"
)
SELECT block_hash, fee FROM `bigquery-public-data.crypto_bitcoin.transactions`
WHERE block_timestamp_month in
(SELECT month FROM sub_query_that_generates_filter)

最佳答案

使用 BigQuery scripting ,有办法降低成本。
基本上,定义了一个脚本变量来捕获子查询的动态部分。然后在后续查询中,脚本变量用作过滤器来修剪要扫描的分区。

CREATE TEMP TABLE sub_query_that_generates_filter AS (
SELECT DATE "2017-10-01" as month UNION ALL
SELECT "2018-10-01" UNION ALL
SELECT "2016-10-01"
);
BEGIN
DECLARE month_filter ARRAY<DATE>
DEFAULT (SELECT ARRAY_AGG(month) FROM sub_query_that_generates_filter);

SELECT block_hash, fee FROM `bigquery-public-data.crypto_bitcoin.transactions`
WHERE block_timestamp_month in UNNEST(month_filter);
END
它只扫描 2GB 的数据,而不是 38GB。更便宜更快!
enter image description here

关于google-bigquery - 当我查询分区表时,是否可以通过子查询按分区列进行过滤并同时降低成本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58226515/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com