如何在Databricks Job Workflow中用任务参数调度日期并指定Notebook运行
一、通过任务参数指定运行特定Notebook
完全可以实现,推荐两种实用方式:
方式1:控制Notebook动态调用
先创建一个主控制Notebook,通过任务传入的参数(比如notebook_to_run)决定要执行的子Notebook。在控制Notebook里用dbutils.notebook.run()方法实现调用,示例代码:notebook_path = dbutils.widgets.get("notebook_to_run") dbutils.notebook.run(notebook_path, 3600) # 3600为任务超时时间(单位:秒)之后创建Job时,给任务添加字符串参数
notebook_to_run,值设为对应子Notebook的完整路径(比如/Workspace/Users/xxx/daily_notebook),再分别创建每日、每月的调度计划,对应传入不同参数值即可。方式2:CLI/Terraform参数化路径
如果用代码定义Job(比如Databricks CLI或Terraform),可以直接通过变量动态指定Notebook路径。示例CLI配置JSON:{ "name": "Dynamic Notebook Job", "tasks": [ { "task_key": "run_target_notebook", "notebook_task": { "notebook_path": "{{notebook_path}}" }, "parameters": { "notebook_path": "/Workspace/Users/xxx/monthly_notebook" } } ], "schedule": { "quartz_cron_expression": "0 0 8 1 * ?", "timezone_id": "Asia/Shanghai" } }复制配置修改参数和调度表达式,就能快速生成对应不同Notebook的调度任务。
二、调度带有任务参数的日期
Databricks Job Workflow支持直接传递调度时间参数,也可自定义日期格式,操作如下:
使用系统内置调度变量
在任务参数中直接引用内置变量:{{scheduled_time}}(ISO 8601格式,比如2024-05-20T08:00:00+08:00)或{{scheduled_date}}(仅日期部分,2024-05-20)。在Notebook中通过以下代码获取:run_date = dbutils.widgets.get("run_date") print(f"本次运行日期:{run_date}")创建调度计划后,系统会自动将对应时间值传入参数。
自定义日期格式参数
如果需要特定格式(比如YYYYMMDD),可以在控制Notebook中对{{scheduled_time}}做格式转换,或者在任务参数中用表达式生成,比如date_format(current_timestamp(), 'yyyyMMdd'),再传递给Notebook使用。
内容的提问来源于stack exchange,提问作者Vinicius Oliveira

