Skip to content

Notebook 调度作业

场景 分析师在 Notebook 里写好了一套探索性的 SQL/Python 分析,验证没问题后,想让它按天/按小时自动重跑一遍,不用重新用 Shell/Python 作业把逻辑抄一遍。

能干什么

你想做的事配置成 Notebook 调度长这样(示意)
把已发布的 Notebook 定期跑一遍新建「Notebook」作业,「选择 Notebook」下拉选目标
cell 里要按运行当天的日期取数cell 内写 ${yyyy-MM-dd}${yyyyMMdd-1} 等时间宏
运行前往内核注入几个变量「调度参数」里加参数,值同样支持时间宏

亮点

  • 不是另起一套发布流程,是复用批作业的调度机制——Notebook 作业只是众多 JobType 里的一种,一样走保存即上线、手动/周期调度、失败重试、并发策略;区别只是执行内容从"填 SQL/脚本"变成"选一个已发布的 Notebook"。
  • headless 按序跑 cell,SQL 一样过逐表鉴权——调度触发后按 Notebook 里的顺序逐个 cell 执行:SQL cell 走跟交互式查询一样的鉴权通道,Python cell 跑在临时内核 pod 里,不复用交互态的常驻内核。
  • 时间宏是这个类型的关键机制——cell 内的 ${yyyy-MM-dd}${yyyyMMdd-1} 等宏,会按本次调度的 scheduleTime(而不是"现在几点")解析;实现上很巧妙:作业的 command 固定填一个哨兵 ${yyyyMMddHHmmss},先被调度引擎既有的时间宏管道按 scheduleTime 解析成具体时间戳,executor 再把这个时间戳解回来,作为 cell 内时间宏的基准——补跑(backfill)历史日期的任务时,时间宏也能拿到当时正确的日期,不用改任何数据结构。
  • 调度参数同样支持时间宏——运行前可以配置若干参数,值按 scheduleTime 解析后注入内核,Python cell 和 SQL 都能用 ${参数名} 引用。

完整操作示例:发布一个 Notebook,按调度跑一遍

先在「Notebook」模块新建 orders_report_nb,写一个 SQL cell(用时间宏标注本次调度日期):

sql
-- 时间宏 ${yyyy-MM-dd} 会在「按调度时刻发布跑」时被解析成本次 scheduleTime 对应的日期
SELECT '${yyyy-MM-dd}' AS schedule_date, COUNT(*) AS cnt, MIN(ts) AS first_ts, MAX(ts) AS last_ts
FROM iceberg_lake.site_demo_ws10.flink_datagen_sensor

交互式运行确认无误后点「发布」。然后回到「数据开发」新建「Notebook」类型作业 notebook_orders_report_demo,「选择 Notebook」下拉选中刚发布的 orders_report_nb,保存上线。

点「运行一次」,日志里能看到本次调度对应的 scheduleTime,以及按顺序执行的 cell 和执行结果行数,exit=0:

Notebook 调度作业运行成功,日志含 scheduleTime 与 cell 执行记录

想直接写 Python 脚本而不经 Notebook,看Python 作业;想了解交互式查询本身的机制,看数据查询

看全部作业类型 →