Object Tagging¶
本主题介绍有关如何在 Snowflake 中使用标签的概念和说明。
要了解有关使用带有标签的掩码策略的更多信息,请参阅 基于标签的掩码策略。
本主题内容:
什么是标签?¶
通过标签,数据专员可以通过集中式或分散式数据治理管理方法,监控敏感数据的合规性、发现、保护和资源使用用例。
标签是一种架构级对象,可以分配给另一个 Snowflake 对象。在将标签分配给 Snowflake 对象时,可为该标签分配任意字符串值。Snowflake 会将标签及其字符串值存储为键值对。标签在您的架构中必须无重复,标签值始终是字符串。
您可以使用 CREATE TAG 语句创建标签,并在将标签分配给对象时指定标签的字符串值。在创建对象时,可使用 CREATE <object> 语句将标签分配给对象,前提是此标签已存在。您还可以使用 ALTER <object> 语句将标签分配给现有对象。
单独一个标签可以同时分配给多个不同的对象类型(例如,同时分配给仓库和表)。在分配时,标签字符串值可以重复,也可以唯一。例如,可以将 cost_center 标签分配给多个表,该标签的字符串值可以始终是 sales。不过该字符串值也可以有所不同(例如 engineering、marketing、finance)。在定义标签并将标签分配给 Snowflake 对象后,可对标签进行查询,以监控对象的使用情况,从而方便执行监控、审计和报告等数据治理操作。
由于可以将标签分配给表、视图和列,因此通过设置标签并查询标签,即可发现包含敏感信息的大量数据库对象和列。在发现后,数据专员可以确定提供该数据的最佳方式,例如使用 行访问策略 进行选择性筛选,或使用 掩码策略 来确定数据是令牌化、完全进行掩码处理、部分进行掩码处理还是未进行掩码处理。
将标签分配给仓库可准确监控资源使用情况。通过查询资源标签,即可按成本中心或其他组织单位轻松对资源进行分组。此外,标签还有助于分析相对短期的业务活动(例如项目),以便更精细地了解使用了哪些资源、何时使用了资源以及资源的使用方式如何。
对象和列的标签配额¶
每个标签的字符串值最长可为 256 个字符,并可以为标签指定 允许的值。
以下说明适用于表和视图以外的所有对象:
Snowflake 允许在单个对象上设置最多 50 个 唯一 标签。在 CREATE <object> 或 ALTER <object> 语句中,可以在一条语句中指定的标签数量上限是 100 个。
对于表和视图(包括这些表和视图中的列),唯一标签的数量上限略有不同。
表、视图和列¶
对于表或视图及其列,在一条 CREATE <object> 或 ALTER <object> 语句中可以指定的唯一标签数量上限是 100 个。这个总计值有以下限制:
单个表或视图对象:50 个唯一标签。
单个表或视图中组合的素有列:50 个唯一标签。
例如,如果对于表中的单个列,在该列上设置了 10 个唯一标签,则 Snowflake 允许:
在同一列、表中的其他列或表列的某种组合上额外设置 40 个唯一标签。
在表本身上额外设置 50 个唯一标签。
一旦达到表本身及其列的 50 个唯一标签上限,就不能再在表或其列上设置额外的标签。此时,如果希望在表或其列上设置额外的标签,那么要考虑采取的下一步行动就是如何管理对象的标签配额。
管理标签配额¶
50 个唯一标签的数据上限包括从使用 DROP TAG 语句删除标签开始 24 小时内删除的标签。存在此时间段的原因在于,允许删除标签的用户在必要时执行 UNDROP TAG 语句。在 24 小时的时间间隔内执行 UNDROP TAG 操作时,Snowflake 将还原删除操作之前的标签分配(即引用)。
在 24 小时期的时间段届满后,Snowflake 会清除与已删除标签相关的任何引用。此时,可以将为之前引用已删除标签的对象或列分配新的标签。
如需管理对象的标签配额,请按以下过程操作:
查询 TAG_REFERENCES 视图(在 Account Usage 中)以确定标签分配情况。
取消设置对象或列中的标签。例如:
对于对象,请使用对应的
ALTER <object> ... UNSET TAG
命令。对于表或视图列,请使用对应的
ALTER { TABLE | VIEW } ... { ALTER | MODIFY } COLUMN ... UNSET TAG
命令。使用 DROP TAG 语句删除标签。
指定标签值¶
ALLOWED_VALUES
标签属性允许指定在 对象 上设置标签时,可分配给标签的可能字符串值。单个标签的最大可能字符串值数量为 300 个。
在创建标签或将标签替换为 CREATE TAG 语句时,或在修改现有标签键时, ALTER TAG 可以指定这些值。请注意, ALTER TAG 语句支持为标签添加允许的值 并 删除现有值。
若要确定标签允许的值列表,请调用 GET_DDL 函数或 SYSTEM$GET_TAG_ALLOWED_VALUES 函数。
例如:
创建一个名为
'finance'
的标签,该标签仅允许两个值,即'engineering'
和cost_center
:create tag cost_center allowed_values 'finance', 'engineering';验证允许的值:
select get_ddl('tag', 'cost_center') +------------------------------------------------------------------------------+ | GET_DDL('tag', 'cost_center') | |------------------------------------------------------------------------------| | create or replace tag cost_center allowed_values = 'finance', 'engineering'; | +------------------------------------------------------------------------------+修改名为
cost_center
的标签,将'marketing'
添加为允许的字符串值:alter tag cost_center add allowed_values 'marketing';修改名为
cost_center
的标签,以将'engineering'
从允许的字符串中删除:alter tag cost_center drop allowed_values 'engineering';
若要获取给定标签允许的字符串值列表,请调用 GET_DDL 函数或 SYSTEM$GET_TAG_ALLOWED_VALUES 函数。例如,假设 cost_center
标签存储在名为 governance
的数据中和名为 tags
的架构中。
select system$get_tag_allowed_values('governance.tags.cost_center'); +--------------------------------------------------------------+ | SYSTEM$GET_TAG_ALLOWED_VALUES('GOVERNANCE.TAGS.COST_CENTER') | |--------------------------------------------------------------| | ["finance","marketing"] | +--------------------------------------------------------------+
标签沿袭¶
标签基于 Snowflake 安全对象层次结构继承。Snowflake 建议,在定义标签键时尽可能贴近 Snowflake 环境中的 安全对象 层次结构。
标签继承意味着,如果将标签应用于表,则此标签也会应用于该表中的列。这种行为方式称为标签沿袭。
给定对象上继承的标签可以覆盖。例如,如果某个表列继承了名为 cost_center 的标签,其字符串值为 sales,则可以使用更具体的标签字符串值(如 sales_na)更新该标签,以指定北美销售成本中心。此外,还可以为表列应用新标签。使用 ALTER TABLE ...ALTER COLUMN 语句更新列上的标签字符串值,并在列上设置一个或多个额外的标签。
定义标签键并将标签分配给 Snowflake 对象后,使用指定的表函数监控标签、标签引用和标签沿袭,或是查询视图,如 使用 SQL 监控标签 (本主题内容)所示。
备注
标签沿袭 不 包括到嵌套对象的 传播。例如:
table_1
»view_1
»materialized_view_1
如果已存在相对于基础表或视图的嵌套对象,则在基础对象上设置标签时,不会导致在嵌套对象上自动设置标签。在此示例中,在 table_1
上设置的标签不会导致 view_1
和 materialized_view_1
上设置相同的标签。这种行为方式也适用于列。
如果需要将基础对象或列上的标签转移到嵌套对象,请在嵌套对象上执行 REPLACE OR CREATE 语句, 并 确保 SQL 语句指定嵌套对象或列上的标签。
优势¶
- 使用方便:
只需定义一次标签,即可按需将其应用于任意多个不同的对象。
- 标签沿袭:
由于标签是继承的,因此将标签应用于安全对象层次结构中较高级别的对象时,此标签会应用于所有子对象。例如,如果在一个表上设置了标签,则该表中的所有列都会继承该标签。
- 通过复制实现一致的分配:
Snowflake 会将主数据库中的标签及其分配情况复制到辅助数据库。
有关更多信息,请参阅 复制 (本主题内容)。
- 敏感数据跟踪和资源使用情况:
标签可简化敏感数据(例如 PII、密钥)的识别,并且能够提高 Snowflake 资源使用情况的可见性。借助位于同一系统中的数据和元数据,分析师可以根据标签定义(例如
cost_center
、department
)快速确定哪些资源消耗的 Snowflake credit最多。- 集中管理或分散管理:
标签支持不同的管理方法,以促进遵守内部和外部监管要求。
在集中方法中,
tag_admin
自定义角色会创建标签,并将其应用于 Snowflake 对象。在分散方法中,各团队将标签应用于 Snowflake 对象,
tag_admin
自定义角色创建标签以确保标签命名的一致性。