Object Tagging 简介

什么是标签?

标签是一种架构级对象,可以分配给另一个 Snowflake 对象。将标签分配给 Snowflake 对象时,用户将标签与任意字符串值关联。Snowflake 会将标签及其字符串值存储为键值对。标签在您的架构中必须无重复,标签值始终是字符串。

以下是 Object Tagging 的一般特征:

  • 一个对象可以同时有多个标签。有关更多信息,请参阅 对象的标签配额

  • 单独一个标签可以同时分配给多个不同的对象类型(例如,同时分配给仓库和表)。

  • 在分配时,标签字符串值可以重复,也可以唯一。例如,可以将 cost_center 标签分配给多个表,该标签的字符串值可以始终是 sales。或者,每个表的字符串值可能不同(例如 engineeringmarketingfinance)。

定义标签并将标签分配给 Snowflake 对象后,您可以对其进行查询,以监控对象的使用情况并促进审计和报告等数据治理操作。

亮点

使用方便:

只需定义一次标签,即可按需将其应用于任意多个不同的对象。

标签继承:

由于标签是继承的,因此将标签应用于安全对象层次结构中较高级别的对象时,此标签会应用于所有子对象。例如,如果在一个表上设置了标签,则该表中的所有列都会继承该标签。

自动传播:

配置标签,使其自动从源对象传播到目标对象。

通过复制实现一致的分配:

Snowflake 会将主数据库中的标签及其分配情况复制到辅助数据库。

集中管理或分散管理:

标签支持不同的管理方法,以促进遵守内部和外部监管要求。

在集中方法中,您可以创建 tag_admin 自定义角色,来为 Snowflake 对象创建和应用标签。

在分散方法中,各团队将标签应用于 Snowflake 对象, tag_admin 自定义角色创建标签以确保标签命名的一致性。

使用标签保护数据

由于可以将标签分配给表、视图和列,因此通过设置标签并查询标签,即可发现包含敏感信息的大量数据库对象和列。在发现后,数据专员可以确定提供该数据的最佳方式,例如使用 行访问策略 进行选择性筛选,或使用 掩码策略 来确定数据是令牌化、完全进行掩码处理、部分进行掩码处理还是未进行掩码处理。

您还可以将 Object Tagging 和掩码策略相结合,以简化数据的治理。使用这种方法,您可以为标签分配掩码策略,然后将该标签分配给表或列。当列的数据类型与掩码策略签名中的数据类型匹配时,标记的列将自动受掩码策略的保护。有关更多信息,请参阅 基于标签的掩码策略

使用标签监控资源使用情况

将标签分配给仓库可准确监控资源使用情况。通过查询资源标签,即可按成本中心或一些其他组织单位轻松对资源进行分组。此外,标签还有助于分析相对短期的业务活动(例如项目),以便更精细地了解使用了哪些资源、何时使用了资源以及资源的使用方式如何。

有关使用标签监控资源使用情况的示例,请参阅 为成本归因设置对象标签

标签如何与对象关联

可以通过以下方式关联标签与对象:

  • 有的人会使用 CREATE <object> 或 ALTER <object> 命令在对象上手动设置标签。请参阅 设置标签

  • 该对象继承了 Snowflake 安全对象层次结构中较高层级的对象的标签。例如,账户中的仓库继承在该账户上设置的标签。请参阅 标签继承

  • 该标签自动从一个对象传播到另一个对象。当一个对象依赖于另一个对象(例如,基于标记表的视图)或当数据从一个标记对象移动到另一个对象(例如,使用 CTAS 语句创建表)时,即可传播标签。请参阅 使用用户定义的标签自动传播标签

  • 该标签被自动设置在一个被归类为包含敏感数据的列上。要了解自动敏感数据分类如何使用标签映射来设置这些标签,请参阅 关于标签映射

  • 有的人会用 CREATE TABLE ... LIKE 或 CREATE TABLE ... CLONE 命令通过带标签的现有表创建表。

确定标签如何与对象关联

以下视图和函数包括 apply_method 列,该列显示了标签如何与对象关联。

例如,要确定标签是在对象上手动设置还是已传播,您可以执行以下命令并检查 apply_method 列的值。

SELECT tag_name, tag_value, apply_method, level, domain
  FROM TABLE(my_db.INFORMATION_SCHEMA.TAG_REFERENCES('my_table', 'TABLE'));
Copy

对象的标签配额

您最多可以在单个对象(包括表和视图)上设置 50 个标签。这是对不同标签设置的数量限制,不是 不同标签/值组合的数量限制,如以下示例所示。

一个对象两个标签
ALTER TABLE t1 SET TAG tag1 = 'val1', tag2 = 'val1';
Copy
一个对象一个标签
ALTER TABLE t1
  MODIFY COLUMN col1 SET TAG tag1 = 'val1'
  MODIFY COLUMN col2 SET TAG tag1 = 'val2';
Copy

如果您已达到标签限制并想删除一个,请执行 ALTER <object> UNSET TAG 语句。

如果您在单个语句中执行多个 CREATE <object> 或 ALTER <object> 命令,则可以指定的最大标签数为 100。

列的额外配额

与所有其他对象一样,表或视图上的最大标签数为 50 个唯一标签。表或视图的 还有额外配额。单个表或视图的所有列的最大标签总数为 50。

例如,如果对于表中的单个列,在该列上设置了 10 个标签,则 Snowflake 允许进行以下操作:

  • 在表中的同一列或列的某种组合上额外设置 40 个标签。

  • 在表本身上额外设置 50 个标签。

需要 Enterprise Edition 的功能

所有账户均可创建和设置标签。但是,有些高级功能需要 Enterprise Edition 或更高版本。您的账户必须是 Enterprise Edition 或更高版本才能使用以下功能:

受支持对象

下表基于 Snowflake 安全对象层次结构,列出了标签支持的对象,包括列在内。

除非下表中另有说明,否则可以使用 CREATE <object> 语句或 ALTER <object> 语句在对象上设置标签。

可以使用 CREATE TABLE、CREATE VIEW、ALTER TABLE ... MODIFY COLUMN 或 ALTER VIEW 语句在列上设置标签。

对象层次结构

受支持对象

备注

组织

账户

标签可由具有全局 APPLY TAG 权限的角色在 当前账户设置

账户

应用程序

应用程序包

计算池

数据库

故障转移组

集成

支持所有 类型

使用 ALTER INTEGRATION 命令在集成上设置标签。

网络策略

使用 ALTER NETWORK POLICY 命令在网络策略上设置标签。

复制组

角色

共享

数据共享提供商会在共享上设置标签。这些标签对数据共享使用者不可见。使用 ALTER SHARE 命令在共享上设置标签。

用户

仓库

数据库

数据库角色

使用 ALTER DATABASE ROLE 命令在数据库角色上设置标签。

架构

架构

聚合策略

警报

BUDGET 实例

使用 ALTER BUDGET 命令在 SNOWFLAKE.CORE.BUDGET 类的实例上设置标签。

CLASSIFICATION 实例

使用 ALTER SNOWFLAKE.ML.CLASSIFICATION 命令在 SNOWFLAKE.ML.CLASSIFICATION 类的实例上设置标签。

动态表

事件表

外部函数和 UDF

使用 ALTER FUNCTION 命令在外部函数上设置标签或 UDF.

外部表

您可以使用 CREATE EXTERNAL TABLE 语句创建带有标签的外部表。

要管理外部表上的标签分配,请使用 ALTER TABLE 命令。

Git 存储库

Apache Iceberg™ 表

镜像仓库

联接策略

物化视图

笔记本

密码策略

管道

使用 ALTER PIPE 语句在语句的管道上设置标签。

策略

使用相应的 <policy> 语句,在 掩码密码行访问会话聚合联接投影 策略上设置标签。

过程

使用 ALTER PROCEDURE 语句在存储过程上设置标签。

投影策略

会话策略

快照

暂存区

使用 ALTER STAGE 语句在暂存区上设置标签。

Streamlit

任务

使用 ALTER TASK 语句在任务上设置标签。

视图

表或视图

包括 事件表

限制和注意事项

未来授权:

不支持对标签进行 未来授权

为解决此问题,请将 APPLY TAG 权限授予自定义角色,以允许该角色将标签应用于另一个对象。

Snowflake Native App:

当版本化架构中存在标签时,创建设置脚本时要小心。有关信息,请参阅 版本架构注意事项

语言: 中文