You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Databricks中获取运行中的非笔记本类型作业的名称

Databricks 获取运行中非笔记本作业名称并推送Slack通知实现方案

前置依赖

  • 你需要有Databricks工作区的作业创建/编辑权限,以及对应工作区的API访问权限
  • 提前配置好Slack的入站Webhook,拿到Webhook地址备用

核心实现方案

你不需要额外扫描全量运行作业,Databricks运行作业时会默认注入内置环境变量,直接在作业的启动逻辑中读取对应变量即可拿到当前作业信息,是实现启动主动通知的最优方案。如果需要在作业外部批量拉取所有符合条件的作业,调用官方Jobs API即可。

方案1:通过内置环境变量获取(适配作业启动主动推送场景)

Databricks运行作业时会自动注入以下环境变量,无需额外配置即可直接读取:

  • DATABRICKS_JOB_NAME:当前运行作业的完整名称
  • DATABRICKS_JOB_RUN_ID:当前作业运行实例的ID,可用来补充更多运行维度信息
  • DATABRICKS_JOB_TYPE:作业类型,非笔记本类型作业会返回PYTHON_TASK、JAR_TASK、DBSQL_TASK等取值,可通过该字段过滤掉笔记本类型作业

Python类型作业示例代码

import os
import requests

# 读取当前作业环境变量
job_name = os.getenv("DATABRICKS_JOB_NAME", "未知作业")
job_type = os.getenv("DATABRICKS_JOB_TYPE", "")
run_id = os.getenv("DATABRICKS_JOB_RUN_ID", "未知运行ID")

# 过滤非笔记本类型作业后推送Slack
if job_type != "NOTEBOOK_TASK":
    slack_webhook = "替换为你的Slack入站Webhook地址"
    message = {
        "text": f"Databricks作业已启动\n作业名称:{job_name}\n运行ID:{run_id}\n作业类型:{job_type}"
    }
    requests.post(slack_webhook, json=message)

Shell类型作业示例代码

# 读取环境变量
JOB_NAME=$DATABRICKS_JOB_NAME
JOB_TYPE=$DATABRICKS_JOB_TYPE
RUN_ID=$DATABRICKS_JOB_RUN_ID

# 过滤非笔记本作业并推送Slack
if [ "$JOB_TYPE" != "NOTEBOOK_TASK" ]; then
  curl -X POST -H 'Content-type: application/json' --data '{"text":"Databricks作业已启动\n作业名称:'"$JOB_NAME"'\n运行ID:'"$RUN_ID"'\n作业类型:'"$JOB_TYPE"'"}' 替换为你的Slack入站Webhook地址
fi

方案2:调用Jobs API批量拉取(适配外部统一查询场景)

如果需要在作业外部统一拉取所有正在运行的非笔记本作业名称,调用2.1/jobs/runs/list接口即可,示例代码如下:

import requests

DATABRICKS_WORKSPACE_URL = "替换为你的Databricks工作区地址"
DATABRICKS_TOKEN = "替换为你的Databricks个人访问令牌"

headers = {
    "Authorization": f"Bearer {DATABRICKS_TOKEN}",
    "Content-Type": "application/json"
}

# 拉取所有运行中的作业
response = requests.get(
    f"{DATABRICKS_WORKSPACE_URL}/api/2.1/jobs/runs/list",
    headers=headers,
    params={"active_only": "true"}
)
running_jobs = response.json().get("runs", [])

# 过滤非笔记本类型作业,取出作业名
non_notebook_job_names = []
for job in running_jobs:
    task_type = job.get("tasks", [{}])[0].get("task_type", "")
    if task_type != "NOTEBOOK":
        non_notebook_job_names.append(job.get("job_name", "未知作业"))

# non_notebook_job_names即为所有运行中的非笔记本作业名称列表

如果你要实现作业启动自动推送通知,优先使用方案1,把推送逻辑加到作业的启动步骤最前面即可,无需额外部署服务,实时性和稳定性更高。

内容的提问来源于stack exchange,提问作者Borislav Blagoev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 02:15:03