如何编程下载Databricks工作流对应YAML以用于DAB部署?
解决方案
Databricks的jobs/getrun接口仅返回作业运行实例的临时信息,并非作业的持久化定义。要获取可直接用于DAB(Databricks Asset Bundle)的YAML配置,你需要按以下步骤操作:
1. 获取作业的完整配置
使用Databricks Jobs API的jobs/get接口(而非getrun),传入目标作业ID即可获取作业的完整JSON配置:
import requests databricks_host = "https://<你的工作空间URL>" token = "<你的个人访问令牌>" job_id = 123 # 替换为目标作业ID response = requests.get( f"{databricks_host}/api/2.1/jobs/get", headers={"Authorization": f"Bearer {token}"}, params={"job_id": job_id} ) job_config = response.json()
2. 转换为DAB兼容的YAML
手动转换JSON到YAML容易出现格式或规范错误,推荐用Databricks CLI的jobs export命令,它会自动生成符合DAB标准的YAML:
databricks jobs export --job-id <目标作业ID> --output-format yaml --output-file ./job_dab_config.yaml
如果要通过代码自动化执行,可使用subprocess调用CLI命令:
import subprocess job_id = 123 output_file = "./job_dab_config.yaml" subprocess.run( [ "databricks", "jobs", "export", "--job-id", str(job_id), "--output-format", "yaml", "--output-file", output_file ], check=True )
3. 适配DAB目录结构
将导出的YAML文件放到DAB的资源目录(比如./resources/jobs/),并在根目录的databricks.yml中添加引用,示例:
# databricks.yml bundle: name: my-workflow-bundle resources: jobs: my-target-workflow: path: ./resources/jobs/job_dab_config.yaml
注意事项
- 确保Databricks CLI已完成工作空间和令牌配置(执行
databricks configure) - 导出的YAML可能包含环境特定参数(如集群ID、存储路径),需替换为DAB的变量或引用(例如
{{ bundle.environment.cluster_id }}) - 若使用Python SDK,可通过
databricks-sdk调用jobs.get获取配置,再结合PyYAML转换,但CLI的export命令更贴合DAB规范
内容的提问来源于stack exchange,提问作者Avneet Singh
相关产品推荐
相关产品推荐

