什么是 Databricks SQL 警报?

Databricks SQL 警报定期运行查询、评估定义的条件,并在满足条件时发送通知。 你可以设置警报来监视业务,并在报告的数据超出预期限制时发送通知。 计划警报会执行其基础查询并检查警报条件。 这与基础查询上可能存在的任何计划无关。

重要

  • 利用带参数的查询的警报使用在 SQL 编辑器中为每个参数指定的默认值。

查看和整理警报

使用以下选项之一来访问警报:

  • 单击边栏中的 工作区图标工作区,在默认存储警报的 Home 文件夹中查看警报。 用户可将警报与其他 Databricks 对象一起整理到工作区浏览器中的文件夹中。
  • 单击边栏中的 警报图标警报,查看警报列表页。

默认情况下,对象按时间倒序排序。 可以通过单击列标题重新对列表进行排序。 单击屏幕顶部附近的“所有警报”选项卡,查看工作区中的所有警报。 单击“我的警报”选项卡,查看你是所有者的警报

  • “名称”显示每个警报的字符串名称。
  • “状态”显示警报状态是 OK 还是 UNKNOWN
  • 上次更新时间显示上次更新的时间或日期。
  • 创建时间显示创建警报的日期和时间。
    • TRIGGERED 表示执行最后一次查询时,目标查询中的“值”列满足配置的“条件”和“阈值”。 如果警报检查“cats”是否高于 1500,则“cats”高于 1500 时将触发警报。
    • OK 表示执行最后一次查询时,“值”列不满足配置的“条件”和“阈值”。 这并不表示之前未触发“警报”。 如果“cats”值现为 1470,则警报将显示为 OK
    • UNKNOWN 表示 Databricks SQL 没有足够的数据,无法评估警报条件。 创建警报后将立即显示此状态,直到查询执行完毕。 如果查询结果中没有数据,或者最新查询结果中不包含配置的“值列”,也会显示此状态。

创建警报

按照以下步骤对查询的单个列创建警报。

  1. 执行下列操作之一:

    • 单击边栏中的 新建图标“新建”,然后选择“警报”。
    • 在边栏中单击警报图标“警报”,然后单击“创建警报”按钮
    • 在边栏中单击工作区图标“工作区”,然后单击“创建”->“警报”
    • 单击已保存查询右上角的 Kebab 菜单,然后单击“创建警报”。
  2. 在“查询”字段中搜索目标查询。

    目标查询

    若要对多个列设置警报,需要修改你的查询。 请参阅警报聚合

  3. 在“触发条件”字段中配置警报。

    • “值列”下拉列表控制计算查询结果的哪个字段。 可对查询结果中的列的第一个值设置警报条件,也可选择跨单个列的所有行设置一个聚合(例如 SUM 或 AVERAGE)。

      警报聚合

    • “运算符”下拉列表控制要应用的逻辑操作。

    • 使用指定的条件将“阈值”文本输入与值列进行比较。

    触发条件

  4. 单击“预览警报”来预览警报,并使用当前数据测试是否会触发警报。

  5. 在“触发警报时发送通知”字段中,选择触发警报时发送的通知数量:

    • 仅一次:当警报状态OK 更改为 TRIGGERED 时发送通知。
    • 每次评估警报时:只要警报状态为 TRIGGERED,无论在上次评估中其状态如何,都发送通知。
    • 最多每隔:最多每当警报状态在特定时间间隔内为 时发送通知。 此选项可让你避免经常触发的警报遇到通知垃圾邮件。

    无论选择哪种通知设置,只要状态从 OK 更改为 TRIGGERED 或从 TRIGGERED 更改为 OK,你都会收到通知。 如果状态在相邻两次执行中都是 TRIGGERED,则计划设置将影响你收到的通知数量。 有关详细信息,请查看通知频率

  6. 在“模板”下拉列表中,选择一个模板:

    • 使用默认模板:警报通知是一条消息,其中有指向警报配置屏幕和查询屏幕的链接。
    • 使用自定义模板:警报通知包括有关警报的更多特定信息。
      1. 会显示一个框,其中有输入主题和正文的字段。 任何静态内容都有效,你可合并内置模板变量:

        • ALERT_STATUS:已评估的警报状态(字符串)。
        • ALERT_CONDITION:警报条件运算符(字符串)。
        • ALERT_THRESHOLD:警报阈值(字符串或数字)。
        • ALERT_COLUMN:警报列名称(字符串)。
        • ALERT_NAME:警报名称(字符串)。
        • ALERT_URL:警报页 URL(字符串)。
        • QUERY_NAME:关联的查询名称(字符串)。
        • QUERY_URL:关联的查询页 URL(字符串)。
        • QUERY_RESULT_TABLE:查询结果 HTML 表(字符串)。
        • QUERY_RESULT_VALUE:查询结果值(字符串或数字)。
        • QUERY_RESULT_ROWS:查询结果行(值数组)。
        • QUERY_RESULT_COLS:查询结果列(字符串数组)。

        例如,示例主题可以是:Alert "{{ALERT_NAME}}" changed status to {{ALERT_STATUS}}

      2. 可以使用 HTML 设置自定义模板中的消息格式。 模板中允许使用以下标签和属性:

        • 标签:<a><abbr><acronym><b><blockquote><body><br /><code><div><em><h1><h2><h3><h4><h5>、<h6>、<head>、<hr><html><i><li><ol><p><span><strong><table><tbody><td><th><tr><ul>
        • 属性:href(适用于 <a>)、title(适用于 <a><abbr><acronym>
      3. 单击“预览”切换按钮来预览呈现的结果。

        重要

        若要验证模板变量是否正确呈现,预览功能很有用。 它不是最终通知内容的准确表示形式,因为每个通知目标会以不同方式显示通知。

      4. 单击“保存更改”按钮。

  7. 单击“创建警报”。

  8. 单击“添加计划”

    • 使用下拉选择器可以指定频率、时段、开始时间和时区。 (可选)选择“显示 cron 语法”复选框以在“Quartz Cron 语法”中编辑时间表。
    • 选择“更多选项”以显示可选设置。 还可以选择:
      • 计划的名称。
      • 为查询提供支持的 SQL 仓库。 默认情况下,用于临时查询执行的 SQL 仓库也用于计划作业。 使用此可选设置可以选择其他仓库来运行计划查询。
  9. 单击“添加计划”对话框中的“目标”选项卡。

    “设置”对话框中的“目标”选项卡

    • 使用下拉列表选择可用的通知目标。 或者,开始键入用户名以添加个人。

    重要

    如果跳过此步骤,那么在触发警报时,你将不会收到通知。

  10. 单击 “创建” 。 保存的警报和通知详细信息将显示在屏幕上。

    保存的警报

  11. 共享计划。

    • 在列出的计划右侧选择 Kebab 菜单 kebab 菜单,然后选择“编辑计划权限”。
    • 从对话框的下拉菜单中选择用户或组。
    • 从以下计划权限中选择:
      • 无权限:未授予任何权限。 没有权限的用户无法看到计划存在,即使它们是订阅者或包含在列出的通知目标中也是如此。
      • 可查看:授予查看计划运行结果的权限。
      • 可管理运行:授予查看计划运行结果的权限。
      • 可管理:授予查看、修改和删除计划的权限。 若要更改运行间隔、更新订阅者列表以及暂停或取消暂停计划,需要此权限。
      • 为所有者:授予“可管理”的所有权限。 此外,计划所有者的凭据将用于运行仪表板查询。 只有工作区管理员可以更改所有者。

    重要

    警报和计划的权限是分开的。 为通知目标列表中的用户和组授予访问权限,使他们能够查看计划运行结果。

  12. 共享警报。

    • 单击页面右上角附近的 Share Button
    • 添加应有权访问警报的用户或组。
    • 选择适当的权限级别,然后单击“添加”。

重要

“可管理”授予查看、修改和删除计划权限。 若要更改运行间隔、更新通知目标列表以及暂停或取消暂停计划,需要此权限。

有关警报权限级别的详细信息,请参阅警报 ACL

警报聚合

通过修改附加到警报的 Databricks SQL 查询的原始 SQL,对警报进行聚合。 警报将原始查询文本包装在公用表表达式 (CTE) 中,并对其执行包装聚合查询来聚合查询结果。

例如,如果对附加到带有 SELECT 1 AS column_name 文本的查询的警报执行 SUM 聚合,则每次刷新该警报时,所运行的已修改的 SQL 将是 WITH q AS (SELECT 1 AS column_name) SELECT SUM(column_name) FROM q

这意味着只要警报上存在聚合,(已预先聚合的)原始查询结果就不能显示在(使用 QUERY_RESULT_ROWSQUERY_RESULT_COLS 等参数的)警报自定义正文中。 这些变量转而仅显示最终的聚合后的查询结果。

注意

API 不支持任何与聚合相关的触发器条件。

多个列上的警报

若要基于查询的多个列设置警报,查询可实现警报逻辑,并返回一个布尔值作为警报触发阈值。 例如:

SELECT CASE WHEN drafts_count > 10000 AND archived_count > 5000 THEN 1 ELSE 0 END
FROM (
SELECT sum(CASE WHEN is_archived THEN 1 ELSE 0 END) AS archived_count,
sum(CASE WHEN is_draft THEN 1 ELSE 0 END) AS drafts_count
FROM queries) data

drafts_count > 10000 and archived_count > 5000 时,此查询将返回 1。 然后,可将警报配置为在值为 1 时触发。

通知频率

Databricks SQL 在检测到警报状态从 OK 更改为 TRIGGERED 时会将通知发送到你选择的通知目标,反之亦然。 请思考以下示例,其中对计划每天运行一次的查询配置了警报。 下表显示了警报的每日状态。 星期一之前,警报状态为 OK

日期 警报状态
星期一 确定
星期二 确定
星期三 已触发
星期四 已触发
星期五 已触发
星期六 已触发
星期日 确定

如果通知频率设置为 Just Once,则当状态从 OK 更改为 TRIGGERED 时,Databricks SQL 会在周三发送通知,反之则在周日发送通知。 它不会在周四、周五或周六发送警报,除非你专门将其配置为在这几天发送,因为警报状态在这几天执行期间没有发生变化。

配置警报访问权限并转移警报所有权

必须至少对查询具有“可管理”权限才能共享查询。 有关警报权限级别的信息,请参阅警报 ACL

  1. 在边栏中,单击“警报”

  2. 单击警报。

  3. 单击右上角的 Share Button 按钮打开“共享”对话框

    管理警报权限

  4. 搜索并选择组和用户,然后分配权限级别。

  5. 单击“添加” 。

转让警报的所有权

当你保存警报时,你会成为警报的所有者。 如果从工作区中删除警报的所有者,则该警报将不再有所有者。 工作区管理员用户可以将警报的所有权转让给其他用户。 无法为服务主体和组分配警报库的所有权。 也可以使用权限 API 转移所有权。

  1. 以工作区管理员身份登录到 Azure Databricks 工作区。

  2. 在边栏中,单击“警报”

  3. 单击警报。

  4. 单击右上角的“共享”按钮,打开“共享”对话框

  5. 单击右上方的齿轮图标,然后单击“分配新所有者”。

    分配新所有者

  6. 选择用户以向其分配所有权。

  7. 单击“确认” 。