如何在Delta表的table_changes函数中使用最新版本
解决方案
1. 修正嵌套子查询的语法
你之前的查询报错是因为未将子查询用括号包裹,SQL引擎无法识别这是一个标量输入。只需把获取版本的子查询用括号括起来,作为table_changes的第二个参数即可:
SELECT * FROM table_changes('dbo.customers', (SELECT VERSION FROM (DESCRIBE HISTORY dbo.customers LIMIT 1)))
2. 更易读的CTE写法
如果追求代码可读性,可使用CTE(公共表表达式)先获取最新版本号,再传入函数:
WITH latest_customer_version AS ( SELECT VERSION FROM (DESCRIBE HISTORY dbo.customers LIMIT 1) ) SELECT * FROM table_changes('dbo.customers', (SELECT VERSION FROM latest_customer_version))
3. 更简洁的Delta Lake原生写法
Delta Lake支持相对版本号简化查询,@latest代表表的最新版本,直接使用它可省去版本查询步骤:
SELECT * FROM table_changes('dbo.customers', @latest)
若需对比最新版本与上一版本的变更,还可使用范围参数:
SELECT * FROM table_changes('dbo.customers', @latest - 1, @latest)
内容的提问来源于stack exchange,提问作者Deval Modi
相关产品推荐
相关产品推荐

