类别:

:doc:`/sql-reference/functions-system`(系统控制)

SYSTEM$SEND_NOTIFICATIONS_TO_CATALOG

Snowflake Open Catalog 发送通知,以使用最新的表更改来更新 Open Catalog 中由 Snowflake 管理的 Apache Iceberg™ 表,并返回通知是否已成功发送,以及错误代码和失败的错误消息(如果适用)。

通知是一种机制,用于保持与 Open Catalog 同步的由 Snowflake 管理的 Iceberg 表随着最新的表更改而更新。当将表同步到 Open Catalog 时,会不断向它们发送通知。但是,如果通知没有发送到表,则可以调用此函数并使用它返回的错误消息来诊断同步失败的原因。

语法

SYSTEM$SEND_NOTIFICATIONS_TO_CATALOG( '<domain>' , '<entity_name>' [ , '<notification_type>'] [ , '<catalog_sync_integration_name>'] )
Copy

实参

必填:

domain

要在其中发送通知的域。可以指定以下域中的一个:

  • DATABASE

  • SCHEMA

  • TABLE

例如,如果要向某个架构下的表发送通知,可指定 SCHEMA

entity_name

给定 domain 的实体的名称。根据给定的域 entity_name,指定数据库、架构或表的名称。

可选:

notification_type

要发送到 Open Catalog 的通知的类型。可以指定以下通知类型之一:

  • UPDATE:更新 Open Catalog 中表的状态。如果该表尚不存在,则可在 Open Catalog 中创建该表。

  • DROP:如果该表存在,则从 Open Catalog 中删除该表。

默认:UPDATE

catalog_sync_integration_name

Open Catalog 的目录集成的名称(要将通知的范围限定到此目录集成)。只有当给定表的 CATALOG_SYNC 参数设置为此编目集成时,才会将通知发送到此表。

重要

如果需要为 catalog_sync_integration_name 指定一个值,则不能将 notification_type 留空以使用其默认值。换句话说,如果需要为 catalog_sync_integration_name 指定一个值而不是使用默认值,则必须首先为 notification_type 指定 UPDATEDROP

默认值:如果未指定该参数,则通知将发送到由所需参数指定的域中的所有表,而不管其目录同步集成如何。例如,如果为 domain 指定 SCHEMA,为 entity_name 指定 schema1,并为 catalog_sync_integration_name 使用默认值,则 schema1 下的所有表都将得到通知。此参数用于将通知的范围限制为单个目录同步集成。

返回

该函数返回一个 JSON 对象,其属性如下所述:

属性

描述

TABLENAME

将通知发送到的表名称。它表示为完全限定的表名 (Database.Schema.Table)。

NOTIFICATIONSTATUS

通知的状态。如果通知成功发送到 Open Catalog,则返回 TRUE;如果未成功发送,则返回 FALSE

ERRORCODE

发送通知失败的错误代码。如果通知已成功发送,则此字段为空。

ERRORMESSAGE

描述通知失败原因的错误消息。如果通知已成功发送,则此字段为空。

使用说明

domainentity_namenotification_typecatalog_sync_integration_name 都是字符串数据类型,因此必须用单引号括起来。

示例

向 Open Catalog 中位于 Snowflake 的 testSchema 架构下并与 Open Catalog 同步的任何由 Snowflake 管理的 Iceberg 表发送 UPDATE 通知。

SELECT VALUE[0]::STRING AS tableName,
       VALUE[1]::BOOLEAN notificationStatus,
       VALUE[2]::STRING errorCode,
       VALUE[3]::STRING errorMessage
  FROM TABLE(FLATTEN(PARSE_JSON(
    SELECT SYSTEM$SEND_NOTIFICATIONS_TO_CATALOG(
      'SCHEMA',
      'testSchema'))));
Copy

向 Open Catalog 中名为 icebergTable 并通过 my_catalog_sync_integration 目录集成同步到 Open Catalog 的任何由 Snowflake 管理的 Iceberg 表发送 DROP 通知。

SELECT VALUE[0]::STRING AS tableName,
       VALUE[1]::BOOLEAN notificationStatus,
       VALUE[2]::STRING errorCode,
       VALUE[3]::STRING errorMessage
   FROM TABLE(FLATTEN(PARSE_JSON(
     SELECT SYSTEM$SEND_NOTIFICATIONS_TO_CATALOG(
       'TABLE',
       'icebergTable',
       'DROP',
       'my_catalog_sync_integration'))));
Copy
语言: 中文