使用对象标签

本主题介绍如何创建标签并将其分配给 Snowflake 对象。其中还包含有关如何删除标签的说明。

创建标签

使用 CREATE TAG 命令创建新标签。例如,要创建名为 cost_center 且不带任何可选参数的基本标签,请执行以下操作:

CREATE TAG cost_center;
Copy

设置允许的标签值列表

ALLOWED_VALUES 标签参数允许您指定在 对象 上设置标签时可以分配给标签的字符串值列表。除非该值在定义的列表中,否则用户无法为标签分配值。

单个标签的最大可能字符串值数量为 300 个。每个标签的字符串值最多可为 256 个字符。

您可以在创建标签或将标签替换为 CREATE TAG 语句时,或用 ALTER TAG 语句修改现有标签键时,指定允许值列表。请注意, ALTER TAG 语句支持为标签添加允许的值 删除现有值。

备注

如果将标签配置为自动传播到目标对象,则允许列表中值的顺序会影响冲突的解决方式。有关更多信息,请参阅 标签传播冲突

若要确定标签允许的值列表,请调用 SYSTEM$GET_TAG_ALLOWED_VALUES 函数。

示例

创建一个名为 finance 的标签,该标签仅允许两个字符串值,即 engineeringcost_center

CREATE TAG cost_center
  ALLOWED_VALUES 'finance', 'engineering';
Copy

验证允许的值:

SELECT SYSTEM$GET_TAG_ALLOWED_VALUES('governance.tags.cost_center');
Copy

修改名为 cost_center 的标签,将 marketing 添加为允许的字符串值:

ALTER TAG cost_center
  ADD ALLOWED_VALUES 'marketing';
Copy

修改名为 cost_center 的标签,以将 engineering 从允许的字符串中删除:

ALTER TAG cost_center
  DROP ALLOWED_VALUES 'engineering';
Copy

定义一个将自动传播的标签

PROPAGATE 标签参数允许您配置标签,使其在某些情况下自动从源对象传播到目标对象。PROPAGATE 参数可以设置为以下值之一:

  • PROPAGATE = ON_DEPENDENCY:当存在 对象依赖关系 时,标签会传播到目标对象。

  • PROPAGATE = ON_DATA_MOVEMENT:当 数据 从源对象移动到目标对象时,标签会传播到目标对象。

  • PROPAGATE = ON_DEPENDENCY_AND_DATA_MOVEMENT:存在对象依赖关系和数据移动时,标签都会传播。

有关传播的更多信息,请参阅 使用用户定义的标签自动传播标签

示例

创建一个新标签,当存在对象依赖关系时,该标签会自动传播。

CREATE TAG data_sensitivity PROPAGATE = ON_DEPENDENCY;
Copy

更新现有标签,启用对象依赖关系和数据移动的自动传播。

ALTER TAG data_sensitivity SET PROPAGATE = ON_DEPENDENCY_AND_DATA_MOVEMENT;
Copy

更新现有标签以禁用传播。

ALTER TAG data_sensitivity UNSET PROPAGATE;
Copy

设置标签

您可以使用 用户界面SQL 在对象上设置标签。

在对象上设置标签时,必须设置该标签的值。此字符串值最多可为 256 个字符。

创建标签的用户可能已经指定了允许值的列表,在这种情况下,您只能设置列表中的标签值。要获取给定标签允许的字符串值列表,请调用 SYSTEM$GET_TAG_ALLOWED_VALUES 函数。例如,假设标签 cost_center 存储在名为 governance 的数据库和名为 tags 的架构中,则可以执行以下操作来确定可以将标签值设置为 finance 还是 marketing

SELECT SYSTEM$GET_TAG_ALLOWED_VALUES('governance.tags.cost_center');
Copy
+--------------------------------------------------------------+
| SYSTEM$GET_TAG_ALLOWED_VALUES('GOVERNANCE.TAGS.COST_CENTER') |
|--------------------------------------------------------------|
| ["finance","marketing"]                                      |
+--------------------------------------------------------------+

使用 Snowsight 设置标签

您可以使用 Snowsight 在现有表、视图和列上设置标签。

有多个选项可用于设置标签:

  • 使用对象资源管理器(即 Data » Databases)导航到所需表、视图或列。

    选择 More 菜单(即 ...) » Edit,然后选择 + Tag。按照提示管理标签分配。

  • 在 Snowsight 中导航到“Governance”区域(即 Monitoring » Governance),然后执行以下操作:

    • 选择一个磁贴、分布百分比及最常用的标签或表之一。在 Dashboard 中选择一个项目时, Snowsight 会将您重定向到 Tagged Objects 选项卡。

    • 按需修改筛选器。选择对象或列时, Snowsight 会将您重定向到对象资源管理器中的相应位置。按需更新标签分配。

  • 直接导航到 Tagged Objects 选项卡。修改筛选器,选择对象或列,并管理标签分配。

备注

要访问 Governance 区域,Snowflake 账户必须是 Enterprise Edition 或更高版本。此外,您必须拥有以下角色之一:

  • 使用 ACCOUNTADMIN 角色。

  • 使用获授 GOVERNANCE_VIEWER OBJECT_VIEWER 数据库角色的角色。

    有关这些数据库角色的信息,请参阅 SNOWFLAKE 数据库角色

使用 SQL 设置标签

您可以使用 SQL 命令在创建新对象时设置标签,或者在现有对象上设置标签。

要在正在创建的新对象上设置标签,请使用 CREATE ... WITH TAG 命令。例如,要为正在创建的仓库分配标签 cost_center,请执行以下操作:

CREATE WAREHOUSE mywarehouse WITH TAG (cost_center = 'sales');
Copy

要在现有对象上设置标签,请使用 ALTER ... SET TAG 命令。例如,要为现有仓库分配标签 cost_center,请执行以下操作:

ALTER WAREHOUSE wh1 SET TAG cost_center = 'sales';
Copy

扩展示例:用 SQL 创建和分配标签

以下是一个扩展示例,它概述了如何使用 SQL 来实现 Object Tagging。它向您展示了如何执行以下操作:

  • 管理使用标签所需的访问控制权限。

    为简化起见,工作流采用集中式方法管理标签,其中 tag_admin 自定义角色同时具有 CREATE TAG 和全局 APPLY TAG 权限。有关替代方法,请参阅 分配标签权限的方法

  • 使用 CREATE TAG 语句创建标签。

  • 使用 CREATE <object> 命令为新的 Snowflake 对象分配标签。

  • 使用 ALTER <object> 命令为现有 Snowflake 对象分配标签。

  1. 创建自定义角色并分配权限。

    在集中式管理方法中, tag_admin 自定义角色负责为 Snowflake 对象创建和分配标签。

    请注意,此示例使用 ACCOUNTADMIN 系统角色。如果不希望在生产环境中使用此权限较高的角色,请验证为 tag_admin 自定义角色分配权限的角色是否具有限定 tag_admin 自定义角色所需的权限。有关更多信息,请参阅 访问控制权限 (本主题内容)。

    USE ROLE USERADMIN;
    CREATE ROLE tag_admin;
    USE ROLE ACCOUNTADMIN;
    GRANT CREATE TAG ON SCHEMA mydb.mysch TO ROLE tag_admin;
    GRANT APPLY TAG ON ACCOUNT TO ROLE tag_admin;
    
    Copy
  2. tag_admin 自定义角色授予充当标签管理员的用户。

    USE ROLE USERADMIN;
    GRANT ROLE tag_admin TO USER jsmith;
    
    Copy
  3. 执行 CREATE TAG 语句以创建标签。

    USE ROLE tag_admin;
    USE SCHEMA mydb.mysch;
    CREATE TAG cost_center;
    
    Copy
  4. 将标签分配给新仓库。

    USE ROLE tag_admin;
    CREATE WAREHOUSE mywarehouse WITH TAG (cost_center = 'sales');
    
    Copy
  5. 将标签分配给现有仓库。

    USE ROLE tag_admin;
    ALTER WAREHOUSE wh1 SET TAG cost_center = 'sales';
    
    Copy
  6. 将标签分配给现有表的列。

    ALTER TABLE hr.tables.empl_info
      MODIFY COLUMN job_title
      SET TAG cost_center = 'marketing';
    
    Copy

删除标签

使用 DROP TAG 命令删除标签。执行命令时,在永久删除标签之前有 24 小时的宽限期。在宽限期内,您可以执行 UNDROP TAG 命令来恢复标签,这样做也会恢复标签和对象之间的所有标签分配(即引用)。

如果您想在删除之前确定哪些对象有标签,请查询 TAG_REFERENCES 视图(在“Account Usage”中)以确定标签分配情况。

访问控制权限

标签权限

Snowflake 支持以下权限,以便确定用户是否可以创建、设置和拥有标签。

要对架构中的任何对象执行操作,需要对父数据库和架构具有 USAGE 权限。

权限

用途

CREATE

允许在架构中创建新的标签。

APPLY

支持对 Snowflake 对象上的标签进行设置和取消设置操作。有关语法示例,请参阅 DDL 命令、操作和权限总结

OWNERSHIP

转移标签的所有权,从而授予对标签的完全控制权。更改标签的大多数属性时都需要此权限。

DDL 命令、操作和权限总结

下表总结了标签权限和 DDL 操作之间的关系。

操作

需要权限

创建标签。

在同一架构中具有 CREATE TAG 权限的角色。

创建可传播的标签

具有标签 APPLY TAG ON ACCOUNT 和 OWNERSHIP 权限的角色。

更改标签。

具有标签的 OWNERSHIP 权限的角色。

删除和取消删除标签。

具有标签的 OWNERSHIP 权限以及标签所在的数据和架构的 USAGE 权限的角色。

显示标签。

以下其中一项:. 对存在标签的架构具有 USAGE 权限的角色,:emph:` 或 ` :newline:`.`具有 APPLY TAG ON ACCOUNT 权限的角色。

在对象上设置或取消设置标签。

对于单个对象,具有 APPLY TAG ON ACCOUNT 权限; 该标签的 APPLY TAG 权限,以及设置此标签的对象的 OWNERSHIP 权限的角色。请参阅 受支持对象

在列上设置或取消设置标签。

具有 APPLY TAG ON ACCOUNT 权限, 标签的 APPLY 权限以及表或视图的 OWNERSHIP 权限的角色。

获取对象上的标签。

请参阅 SYSTEM$GET_TAGTAG_REFERENCESTAG_REFERENCES_WITH_LINEAGE

分配标签权限的方法

本部分介绍分配创建和设置标签所需权限的不同方法。

  1. 对于 tag_admin 自定义角色在 所有 对象/列上创建和设置标签的集中式标签管理方法,需要以下权限:

    USE ROLE securityadmin;
    GRANT CREATE TAG ON SCHEMA <db_name.schema_name> TO ROLE tag_admin;
    GRANT APPLY TAG ON ACCOUNT TO ROLE tag_admin;
    
    Copy
  2. 在混合管理方法中,单个角色具有 CREATE TAG 权限,以确保标签的命名一致,并且各个团队或角色具有特定标签的 APPLY 权限。

    例如,可以向自定义角色 finance_role 授予在角色拥有的表和视图上设置标签 cost_center 的权限(即该角色具有表或视图的 OWNERSHIP 权限):

    USE ROLE securityadmin;
    GRANT CREATE TAG ON SCHEMA <db_name.schema_name> TO ROLE tag_admin;
    GRANT APPLY ON TAG cost_center TO ROLE finance_role;
    
    Copy
语言: 中文