gpt4 book ai didi

google-bigquery - 如何在 BigQuery 表中选择最新的分区?

转载 作者:行者123 更新时间:2023-12-03 15:56:21 25 4
gpt4 key购买 nike

我试图从日期分区的 BigQuery 表中的最新分区中选择数据,但查询仍然从整个表中读取数据。

我试过(据我所知,BigQuery 不支持 QUALIFY):

SELECT col FROM table WHERE _PARTITIONTIME = (
SELECT pt FROM (
SELECT pt, RANK() OVER(ORDER by pt DESC) as rnk FROM (
SELECT _PARTITIONTIME AS pt FROM table GROUP BY 1)
)
)
WHERE rnk = 1
);

但这不起作用并读取所有行。
SELECT col from table WHERE _PARTITIONTIME = TIMESTAMP('YYYY-MM-DD')

哪里 'YYYY-MM-DD'是特定日期确实有效。

但是,我将来需要运行此脚本,但表更新(和 _PARTITIONTIME )是不规则的。有没有办法只能从 BigQuery 的最新分区中提取数据?

最佳答案

October 2019 Update



支持 ScriptingStored Procedures现在处于测试阶段(截至 2019 年 10 月)

您可以提交多个用分号分隔的语句,BigQuery 现在可以运行它们

请参阅下面的示例
DECLARE max_date TIMESTAMP;
SET max_date = (
SELECT MAX(_PARTITIONTIME) FROM project.dataset.partitioned_table`);

SELECT * FROM `project.dataset.partitioned_table`
WHERE _PARTITIONTIME = max_date;

Update for those who like downvoting without checking context, etc.



我认为,这个答案被接受是因为它解决了 OP 的主要问题 Is there a way I can pull data only from the latest partition in BigQuery?并且在评论中提到,很明显 BQ 引擎仍然扫描所有行,但仅基于最近的分区返回结果。正如在问题评论中已经提到的 - Still something that easily to be addressed by having that logic scripted - first getting result of subquery and then use it in final query
尝试
SELECT * FROM [dataset.partitioned_table]
WHERE _PARTITIONTIME IN (
SELECT MAX(TIMESTAMP(partition_id))
FROM [dataset.partitioned_table$__PARTITIONS_SUMMARY__]
)

或者
SELECT * FROM [dataset.partitioned_table]
WHERE _PARTITIONTIME IN (
SELECT MAX(_PARTITIONTIME)
FROM [dataset.partitioned_table]
)

关于google-bigquery - 如何在 BigQuery 表中选择最新的分区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39733826/

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