Object Tagging 简介¶
什么是标签?¶
标签是一种架构级对象,可以分配给另一个 Snowflake 对象。将标签分配给 Snowflake 对象时,用户将标签与任意字符串值关联。Snowflake 会将标签及其字符串值存储为键值对。标签在您的架构中必须无重复,标签值始终是字符串。
以下是 Object Tagging 的一般特征:
一个对象可以同时有多个标签。有关更多信息,请参阅 对象的标签配额。
单独一个标签可以同时分配给多个不同的对象类型(例如,同时分配给仓库和表)。
在分配时,标签字符串值可以重复,也可以唯一。例如,可以将
cost_center
标签分配给多个表,该标签的字符串值可以始终是sales
。或者,每个表的字符串值可能不同(例如engineering
、marketing
和finance
)。
定义标签并将标签分配给 Snowflake 对象后,您可以对其进行查询,以监控对象的使用情况并促进审计和报告等数据治理操作。
亮点¶
- 使用方便:
只需定义一次标签,即可按需将其应用于任意多个不同的对象。
- 标签继承:
由于标签是继承的,因此将标签应用于安全对象层次结构中较高级别的对象时,此标签会应用于所有子对象。例如,如果在一个表上设置了标签,则该表中的所有列都会继承该标签。
- 自动传播:
配置标签,使其自动从源对象传播到目标对象。
- 通过复制实现一致的分配:
Snowflake 会将主数据库中的标签及其分配情况复制到辅助数据库。
- 集中管理或分散管理:
标签支持不同的管理方法,以促进遵守内部和外部监管要求。
在集中方法中,您可以创建
tag_admin
自定义角色,来为 Snowflake 对象创建和应用标签。在分散方法中,各团队将标签应用于 Snowflake 对象,
tag_admin
自定义角色创建标签以确保标签命名的一致性。
标签如何与对象关联¶
可以通过以下方式关联标签与对象:
有的人会使用 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'));
对象的标签配额¶
您最多可以在单个对象(包括表和视图)上设置 50 个标签。这是对不同标签设置的数量限制,不是 不同标签/值组合的数量限制,如以下示例所示。
- 一个对象两个标签
ALTER TABLE t1 SET TAG tag1 = 'val1', tag2 = 'val1';
- 一个对象一个标签
ALTER TABLE t1 MODIFY COLUMN col1 SET TAG tag1 = 'val1' MODIFY COLUMN col2 SET TAG tag1 = 'val2';
如果您已达到标签限制并想删除一个,请执行 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 语句在列上设置标签。
对象层次结构 |
受支持对象 |
备注 |
---|---|---|
组织 |
账户 |
|
账户 |
应用程序 |
|
应用程序包 |
||
计算池 |
||
数据库 |
||
故障转移组 |
||
集成 |
支持所有 类型。 使用 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 语句在语句的管道上设置标签。 |
|
策略 |
||
过程 |
使用 ALTER PROCEDURE 语句在存储过程上设置标签。 |
|
投影策略 |
||
会话策略 |
||
快照 |
||
暂存区 |
使用 ALTER STAGE 语句在暂存区上设置标签。 |
|
流 |
||
Streamlit |
||
表 |
||
任务 |
使用 ALTER TASK 语句在任务上设置标签。 |
|
视图 |
||
表或视图 |
列 |
包括 事件表。 |