如何在Databricks SQL中动态遍历Delta版本统计product表历史行数?
动态统计Delta表各版本行数(Databricks SQL实现)
当然可以用纯Databricks SQL实现动态统计所有Delta版本的行数,不需要手动逐个编写@vX格式的CTE。核心思路是利用动态SQL,先通过DESCRIBE HISTORY获取全量版本信息,再自动拼接每个版本的行数查询语句,最后执行拼接后的完整SQL。
具体实现代码如下:
-- 定义变量存储动态生成的SQL语句 DECLARE @dynamic_sql STRING; -- 收集所有版本的版本号、时间戳,拼接成UNION ALL格式的查询语句 WITH delta_versions AS ( SELECT version, timestamp FROM DESCRIBE HISTORY product ) SELECT STRING_AGG( CONCAT( 'SELECT ', version, ' AS version, ''', timestamp, ''' AS version_timestamp, COUNT(*) AS row_count FROM product@v', version ), ' UNION ALL ' ) INTO @dynamic_sql FROM delta_versions; -- 执行动态生成的SQL,返回所有版本的行数统计结果 EXECUTE IMMEDIATE @dynamic_sql;
代码说明:
DESCRIBE HISTORY product:获取目标Delta表的全量版本历史,包含版本号(version)和对应时间戳(timestamp)。STRING_AGG:将每个版本的行数查询子句拼接成完整的UNION ALL查询,每个子句对应一个版本的行数统计逻辑。EXECUTE IMMEDIATE:执行动态生成的SQL语句,一次性返回所有版本的版本号、对应时间和行数数据。
如果需要过滤特定时间范围的版本,只需在delta_versions CTE中添加WHERE条件即可,例如:
WITH delta_versions AS ( SELECT version, timestamp FROM DESCRIBE HISTORY product WHERE timestamp >= '2024-01-01' )
内容的提问来源于stack exchange,提问作者alxsbn
相关产品推荐
相关产品推荐

