Databricks工作流SQL变量传递至If/Else任务及相关问题咨询
问题1:SQL任务变量传递至If/Else任务失败的解决方法
SQL任务中用DECLARE/SET定义的会话变量不会自动被Databricks工作流识别为任务输出值,需手动配置捕获任务值:
- 第一步:修改SQL任务的查询语句,确保最后返回的结果列有明确别名(需和后续引用的键名一致):
DECLARE VARIABLE max_timestamp TIMESTAMP DEFAULT '1970-01-01'; SET VARIABLE max_timestamp = (SELECT max(timestamp) FROM TableA); SELECT max_timestamp AS max_timestamp; -- 必须指定别名,用于后续捕获
- 第二步:编辑SQL任务配置,找到**任务值(Task values)**选项,勾选「捕获任务值」,添加键
max_timestamp,对应列名填写max_timestamp(和查询中的别名一致)。 - 第三步:在If/Else任务的条件中,使用
{{tasks.[你的SQL任务名称].values.max_timestamp}}引用,比如判断空值的条件可写为:{{tasks.sql_task.values.max_timestamp}} IS NULL。
问题2:SQL编辑器中基于查询的下拉变量多次引用是否重复执行
不会重复执行:
- 打开查询或手动刷新变量时,下拉变量对应的查询仅执行一次,结果会被缓存,主查询中多次引用该变量时,复用的都是这次缓存的结果。
- 若变量设置了「每次运行时刷新(Refresh on each run)」,则每次执行主查询时,变量的查询会重新执行一次,但同样仅执行一次,主查询内的多次引用共享这次执行的结果。
内容的提问来源于stack exchange,提问作者JKR
相关产品推荐
相关产品推荐

