使用用户定义的标签自动传播标签¶
如果将 对象标签 应用于源对象,则标签传播会自动为目标对象分配对象标签。例如,您可以在源对象(例如表及其列)上定义标签,这些标签会自动传播到目标对象,例如从该源对象创建的视图或其他表。
自动标签传播的优势包括:
简化跨对象标签管理,特别是在将标签应用于源对象或列以便于发现和保护数据时。
确保与标签关联的任何策略都自动应用于目标对象。
只有具有账户级别 APPLY TAG 权限的标签所有者才能实现自动标签传播。
传播的类型¶
当存在 对象依赖关系 和/或 数据移动 时,您可以选择传播标签。
对象依赖关系的标签传播¶
当为对象依赖关系配置标签传播时,标签将从源对象传播到基于它的所有目标对象。例如,如果您为表 t1
上的标签 data_sensitivity
设置传播,然后基于 t1
创建两个视图,则该 data_sensitivity
标签将传播到两个视图。
从源对象创建视图、安全视图、物化视图或动态表被视为对象依赖关系。
对象依赖关系的持续传播¶
为对象依赖关系配置标签后,Snowflake 会在出现以下任何情况时 持续更新 目标对象:
该标签被添加到源对象或列中。
标签的值已更新。
标签已从源对象或列中移除。在这种情况下,Snowflake 会将标签从目标对象或列中移除。
例如,假设标签 data_sensitivity
在执行 CREATE VIEW 语句后从表 t1
传播到视图 v2
。当您更改 t1
上的 data_sensitivity
值时,v2
上标签的值也会随之更新。
自动标签传播依赖于源对象的存在。如果删除带有标签的源对象,则标签不会传播到目标对象。由于视图依赖于其源,例如基表或其他视图,因此标签仅在源对象存在时才会传播。
用于数据移动的标签传播¶
如果为数据移动配置了标签传播,则当您通过执行以下任一操作将数据从源对象移动到另一个对象时,就会传播标签:
执行 CREATE TABLE ... AS SELECT (CTAS) 语句来创建表。
执行 CREATE DYNAMIC TABLE 语句。
执行数据操作语言 (DML) 命令。以下 DML 命令会触发标签传播:
INSERT
MERGE
UPDATE
COPY INTO
CREATE TABLE ... CLONE 和 CREATE TABLE ... LIKE 不依赖 PROPAGATE 标签属性进行标签传播。当您执行这些语句时,源中的标签始终会分配给目标对象。
备注
与针对对象依赖关系的标签传播不同,数据移动时应用于目标对象的标签 不会 随着源对象上标签的变化而持续更新。
设置标签传播¶
要启用自动标签传播,请使用 CREATE TAG 或 ALTER TAG 命令来设置 PROPAGATE 属性。您可以配置该属性,以便针对对象依赖关系和/或数据移动传播标签。
有关设置标签传播的说明,请参阅 定义一个将自动传播的标签。
标签传播冲突¶
当标签从不同的源对象传播到同一个目标对象时,可能会发生冲突。如果标签在每个源对象中具有不同的值,则当该标签从源对象传播到目标对象时会发生冲突。
备注
如果目标对象的标签为手动应用,则现有标签值优先于传播的值,这样就不会发生冲突。
如果目标对象继承了 Snowflake 对象层次结构中级别较高的对象的值,则传播值优先,不存在冲突。
标签的 ON_CONFLICT 属性决定了发生冲突时会发生什么。您可以使用三种方法来处理标签传播冲突:
用字符串
CONFLICT
替换标签的值。如果您未设置标签的 ON_CONFLICT 参数,则这是默认设置。用用户定义的字符串替换标签的值。您可以将 ON_CONFLICT 参数设置为该字符串。
例如,如果您希望标签的值在值冲突时为
HIGHLY CONFIDENTIAL
,请使用下面的 SQL 创建标签:CREATE TAG data_sensitivity PROPAGATE = ON_DEPENDENCY_AND_DATA_MOVEMENT ON_CONFLICT = 'HIGHLY CONFIDENTIAL';
Copy使用标签 ALLOWED_VALUES 参数中值的顺序来确定要使用哪个值。设置
ON_CONFLICT = ALLOWED_VALUES_SEQUENCE
以实现此策略。例如,假设您使用以下 SQL 语句创建了标签:
CREATE TAG data_sensitivity ALLOWED_VALUES 'confidential', 'internal', 'public' PROPAGATE = ON_DEPENDENCY ON_CONFLICT = ALLOWED_VALUES_SEQUENCE;
Copy如果此标签的值
internal
和public
之间存在冲突,则data_sensitivity
标签的值将是internal
,因为它在允许值列表中排在public
前面。请注意,如果您选择使用
ON_CONFLICT = ALLOWED_VALUES_SEQUENCE
,更改 ALLOWED_VALUES 参数会影响冲突的解决方式。例如,如果您更改允许列表中值的顺序,则将来的冲突可能会导致为标签分配不同的值。
识别未解决的冲突¶
如果标签值替换为用户定义的字符串或存在标签传播冲突时的默认 CONFLICT
字符串,则可以查询 TAG_REFERENCES 表函数来识别冲突。
例如,如果您接受将标签值替换为字符串 CONFLICT
的默认设置,则可以使用以下查询来确定是否存在任何冲突:
SELECT tag_name, tag_value, apply_method, level, domain FROM table(my_db.INFORMATION_SCHEMA.TAG_REFERENCES('my_table', 'table')) WHERE tag_name = '<tag_name>' AND tag_value = 'CONFLICT';Copy
受支持对象¶
以下对象类型支持从源到目标的标签传播:
列
以下类型的表:
表
动态表 – 出于标签传播的目的,创建动态表既被视为对象依赖关系,也被视为数据移动。
外部表
Iceberg 表
临时/瞬态表
以下类型的视图:
视图
安全视图
物化视图