如何识别Databricks SQL Analytics中的所有定时查询并自动发送列表邮件?
Databricks SQL 活跃定时查询识别与自动邮件推送方案
1. 用Databricks REST API获取定时查询数据
Databricks提供的REST API可以直接获取带触发器的SQL查询信息,替代手动查看「Queries」标签页的操作:
- 调用
/api/2.0/sql/queries接口,添加has_trigger=true参数筛选出所有带定时触发器的查询 - 接口返回的JSON数据中,
trigger.status字段为ACTIVE的就是当前处于活跃状态的定时任务
示例curl调用:
curl -X GET \ https://<你的Databricks实例域名>/api/2.0/sql/queries?has_trigger=true \ -H "Authorization: Bearer <你的个人访问令牌>"
从返回结果中可以提取查询名称、定时规则、查询ID等关键信息,整理成需要的列表。
2. 编写自动化脚本实现数据提取与邮件发送
用Python编写脚本,整合API调用与邮件发送逻辑,实现全自动化:
- 先通过API获取并过滤活跃定时查询
- 将数据格式化为易读的内容(如markdown表格)
- 调用SMTP服务发送邮件到指定收件人
示例代码:
import requests import smtplib from email.mime.text import MIMEText # 配置参数 DATABRICKS_HOST = "https://<你的Databricks实例域名>" PAT_TOKEN = "<你的个人访问令牌>" SMTP_SERVER = "smtp.example.com" SMTP_PORT = 587 SENDER_EMAIL = "你的发件邮箱" SENDER_PWD = "发件邮箱密码/授权码" RECEIVER_EMAIL = "收件邮箱" # 获取活跃定时查询 def fetch_active_scheduled_queries(): api_url = f"{DATABRICKS_HOST}/api/2.0/sql/queries?has_trigger=true" headers = {"Authorization": f"Bearer {PAT_TOKEN}"} resp = requests.get(api_url, headers=headers) resp.raise_for_status() all_queries = resp.json()["res"] # 过滤出活跃触发器的查询 return [q for q in all_queries if q["trigger"]["status"] == "ACTIVE"] # 发送邮件 def send_notification_email(queries): # 构建邮件内容 email_content = "### Databricks SQL 活跃定时查询列表\n\n" email_content += "| 查询名称 | 定时规则 | 查询ID |\n" email_content += "|----------|----------|--------|\n" for query in queries: email_content += f"| {query['name']} | {query['trigger']['schedule']} | {query['query_id']} |\n" msg = MIMEText(email_content, "markdown") msg["Subject"] = "Databricks SQL 活跃定时查询清单" msg["From"] = SENDER_EMAIL msg["To"] = RECEIVER_EMAIL # 发送邮件 with smtplib.SMTP(SMTP_SERVER, SMTP_PORT) as server: server.starttls() server.login(SENDER_EMAIL, SENDER_PWD) server.send_message(msg) # 主执行逻辑 if __name__ == "__main__": active_queries = fetch_active_scheduled_queries() send_notification_email(active_queries)
3. 定期调度脚本运行
将脚本部署到服务器,或者用Databricks Jobs功能设置定期执行计划(比如每天一次),就能自动生成并推送活跃定时查询列表,无需手动操作。
权限说明
确保你的个人访问令牌(PAT)拥有sql_query_viewer权限,该权限允许查看所有SQL查询的触发器信息。
内容的提问来源于stack exchange,提问作者Adhash
相关产品推荐
相关产品推荐

