如何在Azure Databricks的Notebook N2中触发带动态日期参数的作业?
解决方案
方法1:通过Databricks Jobs API触发目标作业
在Notebook N2中计算出昨日日期后,调用Jobs API触发主Notebook对应的作业并传入参数,步骤如下:
生成昨日日期
用代码计算并格式化昨日日期,Python示例:from datetime import datetime, timedelta yesterday = (datetime.today() - timedelta(days=1)).strftime("%Y-%m-%d")配置API认证信息
在Databricks工作区生成个人访问令牌(PAT),并用密钥管理工具存储敏感信息:databricks_token = dbutils.secrets.get(scope="your-secret-scope", key="databricks-pat") workspace_url = "https://<your-workspace-url>.azuredatabricks.net"调用API触发作业
发送POST请求启动目标作业,传入计算好的日期参数:import requests job_id = <your-main-job-id> # 替换为目标作业的ID payload = { "job_id": job_id, "notebook_params": { "date_param": yesterday # 替换为主Notebook接收的参数名 } } headers = { "Authorization": f"Bearer {databricks_token}", "Content-Type": "application/json" } response = requests.post(f"{workspace_url}/api/2.1/jobs/run-now", json=payload, headers=headers) if response.status_code == 200: print(f"作业触发成功,运行ID:{response.json()['run_id']}") else: print(f"触发失败:{response.text}")
方法2:将N2设为作业的前置任务(推荐方案)
直接调整目标作业的任务链,让调度自动先执行N2计算日期,再传给主Notebook:
在N2中存储计算结果
计算完日期后,用任务值传递功能保存参数:dbutils.jobs.taskValues.set(key="yesterday_date", value=yesterday)修改目标作业的任务配置
- 编辑主作业,添加一个新的Notebook任务,选择N2作为第一个执行的任务
- 在主Notebook任务的参数设置中,用
{{tasks.N2.yesterday_date}}引用N2传递的日期参数 - 保存作业后,直接调度这个包含两个任务的作业即可,无需额外触发逻辑
方法3:直接在N2中运行主Notebook
如果不需要触发独立作业,而是直接在N2的上下文里运行主Notebook,用dbutils.notebook.run方法:
from datetime import datetime, timedelta yesterday = (datetime.today() - timedelta(days=1)).strftime("%Y-%m-%d") main_notebook_path = "/path/to/your-main-notebook" # 替换为主Notebook的路径 run_result = dbutils.notebook.run( main_notebook_path, timeout_seconds=3600, arguments={"date_param": yesterday} ) print(f"主Notebook运行完成,结果:{run_result}")
内容的提问来源于stack exchange,提问作者Krishna Pavan Ayitha
相关产品推荐
相关产品推荐

