CREATE ALERT

在当前架构中创建新 警报

此命令还支持以下变体:

  • CREATE ALERT ... CLONE(创建现有警报的克隆)

另请参阅:

ALTER ALERTDESCRIBE ALERTDROP ALERTSHOW ALERTSEXECUTE ALERT

重要

新创建或克隆的警报在创建时将暂停。有关恢复挂起警报的信息,请参阅 暂停和恢复警报

语法

CREATE [ OR REPLACE ] ALERT [ IF NOT EXISTS ] <name>
  [ WAREHOUSE = <warehouse_name> ]
  SCHEDULE = '{ <num> MINUTE | USING CRON <expr> <time_zone> }'
  COMMENT = '<string_literal>'
  [ [ WITH ] TAG ( <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' , ... ] ) ]
  IF( EXISTS(
    <condition>
  ))
  THEN
    <action>
Copy

变体语法

CREATE ALERT ... CLONE

使用相同的参数值创建新警报:

CREATE [ OR REPLACE ] ALERT <name> CLONE <source_alert>
  [ ... ]
Copy

有关更多详细信息,请参阅 CREATE <object> ... CLONE

备注

使用 CREATE ALERT <name> CLONE 或克隆包含警报的架构或数据库克隆警报时,新警报具有原始警报的所有属性,但显式覆盖的任何属性除外。

必填参数

name

字符串,用于指定警报的标识符(即名称),对于创建警报的架构必须是唯一的。

此外,标识符必须以字母字符开头,且不能包含空格或特殊字符,除非整个标识符字符串放在双引号内(例如,"My object")。放在双引号内的标识符也区分大小写。

有关更多详细信息,请参阅 标识符要求

SCHEDULE ...

指定定期评估警报条件的计划。

您可以通过以下方式之一指定计划:

  • USING CRON expr time_zone

    指定用于定期评估警报条件的 Cron 表达式和时区。支持标准 cron 实用程序语法的子集。

    cron 表达式由以下字段组成:

    # __________ minute (0-59)
    # | ________ hour (0-23)
    # | | ______ day of month (1-31, or L)
    # | | | ____ month (1-12, JAN-DEC)
    # | | | | _ day of week (0-6, SUN-SAT, or L)
    # | | | | |
    # | | | | |
      * * * * *
    
    Copy

    支持以下特殊字符:

    特殊字符

    描述

    *

    通配符。为给定字段指定警报时,警报将在该字段的每个时间单位运行。

    例如,月份字段中的 * 指定警报每月运行一次。

    L

    代表“last”。在星期几字段中使用时,它允许您指定结构,例如给定月份的“最后一个星期五”(“5L”)。在日期字段中,它指定该月的最后一天。

    /n

    指示给定时间单位的第 n 个实例。每个时间量子都是独立计算的。

    例如,如果在月份字段中指定 4/3,则条件评估计划为 4 月、7 月和 10 月(即每 3 个月一次,从一年中的第 4 个月开始)。

    在随后的几年中保持相同的计划。也就是说,条件不会计划在 1 月(10 月运行后 3 个月)评估。

    备注

    • cron 表达式当前仅根据指定的时区进行计算。更改账户的 TIMEZONE 参数值(或在用户或会话级别设置该值) 不会 更改警报的时区。

    • Cron 表达式定义用于评估警报条件的所有 有效 时间。Snowflake 尝试基于此计划评估条件;但是,如果在下一个有效运行时间开始之前未完成上一次运行,则跳过任何有效运行时间。

    • 当 Cron 表达式中同时包含一个月中的特定某一天和一周中的某一天时,条件评估将安排在满足该月中的某一天 一周中的某一天的日期。例如,SCHEDULE = 'USING CRON 0 0 10-20 * TUE,THU UTC' 计划在该月的第 10 天到第 20 天的任何一天以及这些日期之外的任何星期二或星期四的 0AM 进行评估。

  • num MINUTE

    指定在警报评估之间插入的等待时间间隔(以分钟为单位)。仅接受正整数。

    还支持 num M 语法。

    为避免歧义,在恢复警报时设置 * 基本间隔时间 * (使用 ALTER ALERT ... RESUME)。

    基本间隔时间从当前时钟时间开始间隔计数器。例如,如果使用 10 MINUTE 创建警报并在 9:03 AM 恢复警报,则在 9:13 AM、9:23 AM 等评估警报的条件。请注意,我们尽最大努力确保绝对精度,但仅保证条件不会在设定的时间间隔发生 之前 评估(例如,在当前示例中,条件可以首先在 9:14 AM 评估,但绝对不会在 9:12 AM 评估)。

    备注

    支持的最大值为 11520 (8 天)。具有较大 num MINUTE 值的警报永远不会评估其条件。

COMMENT = 'string_literal'

指定警报的注释。

TAG ( tag_name = 'tag_value' [ , tag_name = 'tag_value' , ... ] )

指定 标签 名称和标签字符串值。

标签值始终为字符串,标签值的最大字符数为 256。

有关在语句中指定标签的信息,请参阅 对象和列的标签配额

IF( EXISTS( condition ))

表示警报条件的 SQL 语句。您可以使用以下命令:

如果语句返回一行或多行,则执行警报操作。

THEN action

如果条件返回一行或多行,则应执行的 SQL 语句。

要发送通知,您可以 调用 SYSTEM$SEND_EMAIL 或 SYSTEM$SEND_SNOWFLAKE_NOTIFICATION 存储过程

可选参数

WAREHOUSE = warehouse_name

指定为执行此警报提供计算资源的虚拟仓库。

对于 无服务器警报,请勿设置此属性。

访问控制要求

用于执行此 SQL 命令的 角色 必须至少具有以下 权限

权限

对象

备注

EXECUTE MANAGED ALERT

账户

仅对于 无服务器警报 是必需的。

EXECUTE ALERT

账户

CREATE ALERT

架构

USAGE

仓库

仅对于 指定要使用的仓库的警报 是必需的。

请注意,对架构中的对象进行操作还需要对父数据库和架构具有 USAGE 权限。

有关创建具有指定权限集的自定义角色的说明,请参阅 创建自定义角色

有关对 安全对象 执行 SQL 操作的相应角色和权限授予的一般信息,请参阅 访问控制概述

使用说明

  • 使用授予警报所有者的权限(即对警报具有 OWNERSHIP 权限的角色)执行警报。有关执行警报所需的最低权限列表,请参阅 授予创建警报的权限

    若要验证警报所有者角色是否具有执行条件和操作的 SQL 语句所需的权限,建议您先使用警报所有者角色执行这些语句,然后再在 CREATE ALERT 中指定这些语句。

  • 创建警报时,警报默认情况下处于暂停状态。

    要使警报处于活动状态,您必须执行 ALTER ALERT ...RESUME

  • 执行 CREATE ALERT 或 ALTER ALERT 时,不会对条件和操作中的语句执行某些验证检查,包括:

    • 对象标识符的解析。

    • 表达式的数据类型的解析。

    • 对函数调用中实参的数量和类型的验证。

    如果条件或操作的 SQL 语句指定了无效的标识符、不正确的数据类型、不正确的函数实参数量和类型等,则 CREATE ALERT 和 ALTER ALERT 命令不会失败。相反,在执行警报时会发生故障。

    要检查现有警报中的故障,请使用 ALERT_HISTORY 表函数。

    要避免这些类型的失败,在指定警报的条件和操作之前,请验证这些条件和操作的 SQL 表达式和语句。

  • 关于元数据:

    注意

    客户应确保在使用 Snowflake 服务时,不会将个人数据(用户对象除外)、敏感数据、出口管制数据或其他受监管数据作为元数据输入。有关更多信息,请参阅 Snowflake 中的元数据字段

  • CREATE OR REPLACE <object> 语句是原子的。也就是说,当对象被替换时,旧对象将被删除,新对象将在单个事务中创建。

示例

请参阅 创建警报

语言: 中文