在Data Factory调用Databricks Notebook路径错误求助及配置方法
首先看你遇到的错误提示:
"message": "Invalid notebook_path: {"effectiveIntegrationRuntime":"DefaultIntegrationRuntime (West Europe)","executionDuration":0,"durationInQueue":{"integrationRuntimeQueue":1},"billingReference":{"activityType":"ExternalActivity","billableDuration":{"Managed":0.016666666666666666}}}. Only absolute paths are currently supported. Paths must begin with '/'"
这个错误的核心是两点:一是你从存储过程获取的Notebook路径不是Databricks要求的绝对路径格式(必须以/开头),二是存储过程的输出明显混入了ADF运行时的元数据(就是那些effectiveIntegrationRuntime相关的字段),导致传入的根本不是有效的路径字符串。
一步步修复问题
1. 修正存储过程的输出逻辑
首先要确保你的存储过程只返回纯绝对路径字符串,不能包含任何额外的JSON结构或元数据:
- 如果是SQL存储过程,直接返回单一的路径值即可,比如:
SELECT '/Workspace/YourFolder/TargetNotebook' AS notebook_path; - 如果是其他类型的存储过程,检查返回逻辑,确保只输出路径本身,别把整个执行上下文对象都返回出去。
2. 在ADF中正确引用路径
当你在ADF的Databricks Notebook活动中使用存储过程的输出时,要精准提取到路径值:
- 如果你是通过Lookup活动调用的存储过程,在Notebook活动的
Notebook path字段中,使用表达式引用Lookup结果里的路径字段,示例:@activity('Lookup_GetNotebookPath').output.firstRow.notebook_path - 可以利用ADF的测试表达式功能验证一下,确保这个表达式返回的是
/Workspace/xxx格式的纯路径,没有多余的元数据内容。
Data Factory中指定Databricks Notebook路径的正确方式
给你总结几种可靠的路径指定方法:
- 直接输入绝对路径:比如
/Workspace/Team/ETL/LoadDataNotebook,必须以/开头,和Databricks Workspace中的实际路径完全匹配 - 通过ADF变量/参数引用:将路径存储在ADF变量或参数中,然后用表达式引用,比如
@variables('NotebookPathVar'),变量值必须是符合要求的绝对路径 - 动态提取路径:从Lookup、存储过程或其他活动获取路径时,一定要确保提取的是纯路径字符串,避免传入包含运行时元数据的整个JSON对象
另外要注意:Databricks的路径是区分大小写的,路径的文件夹层级和Notebook名称要和Workspace中的实际情况完全一致,否则也会报错。
内容的提问来源于stack exchange,提问作者Chaitanya K

