Databricks Delta Live Table管道执行建表查询时出错
Delta Live Tables 创建失败排查方案(空流水线错误)
执行以下SQL创建LIVE TABLE时:
CREATE LIVE TABLE phonenumbers_clean( CONSTRAINT valid_phone_present EXPECT (valid_phone_number IS NOT NULL) ) COMMENT "Clean Phone Numbers." AS SELECT phone_number_validation_udf(Phone_Numbers) as valid_phone_number FROM hive_metastore.abc.phonenumbers
持续收到错误:
com.databricks.pipelines.execution.core.ExecutionFailedException: You attempted to update an empty pipeline. This error usually means no tables were discovered in your specified source code. Please verify that your source code includes table definitions.
注:phone_number_validation_udf已定义,hive_metastore.abc.phonenumbers为存储手机号的表,以下是排查解决方法:
检查代码文件与流水线的路径匹配
确认你的SQL代码文件存放在DLT流水线配置的源代码目录下。如果文件不在指定路径,DLT无法扫描到表定义,直接触发空流水线错误。核对流水线配置中的"源代码路径",确保.sql文件在该路径(含子目录)内。验证LIVE TABLE语法正确性
排查SQL语法细节:- 确认
CREATE LIVE TABLE关键字拼写无误(无漏写、错写); - 检查约束语句
CONSTRAINT valid_phone_present EXPECT (valid_phone_number IS NOT NULL)的括号、关键字是否正确,无语法错误。
- 确认
确认源表的访问权限与可用性
- 确保执行流水线的账号拥有
hive_metastore.abc.phonenumbers表的SELECT权限,权限不足会导致DLT无法识别源表,进而认为无有效表定义; - 单独执行
SELECT * FROM hive_metastore.abc.phonenumbers LIMIT 10测试能否读取数据,排除源表不可用的问题。
- 确保执行流水线的账号拥有
校验UDF的上下文可用性
虽然phone_number_validation_udf已定义,但要确保它在DLT流水线的上下文里可访问:- 若为SQL UDF,需确认UDF定义也在DLT源代码目录中,或已提前注册到集群;
- 若为Python UDF,需确认对应Python文件在流水线源代码路径内,或已安装到集群环境;
- 可临时将UDF替换为简单表达式(比如直接返回
Phone_Numbers),测试能否成功创建表,排除UDF导致的解析失败。
检查流水线与集群配置
- 首次运行时确认流水线的运行模式(连续/触发)选择正确,避免模式不兼容导致的解析问题;
- 尝试使用默认集群配置重新创建流水线,排除自定义集群配置(如版本过低、缺少依赖)引发的错误。
内容的提问来源于stack exchange,提问作者Lisa Sen Iyer
相关产品推荐
相关产品推荐

