行为变更管理

本文档介绍如何检查账户中是否启用了特定的 行为变更捆绑包 以及如何启用或禁用行为变更捆绑包。

概述

Snowflake 每月都会在定期 发布 的捆绑包实施行为变更。在每个行为变更捆绑包的测试期和选择退出期内,您可以在账户中启用或禁用捆绑包。本文档介绍如何检查您的账户中是否启用了特定的捆绑包以及如何启用或禁用行为变更捆绑包。

在本文档中,行为变更捆绑包的名称采用 YYYY_NN 形式。有关当前可用的行为变更捆绑包的名称,请参阅 行为变更日志

备注

捆绑包中的行为变更不能单独启用/禁用。要启用/禁用行为变更,必须启用/禁用包含变更的捆绑包。

检查账户中行为变更捆绑包的状态

要检查账户中是否启用了特定的行为变更捆绑包,请调用 SYSTEM$BEHAVIOR_CHANGE_BUNDLE_STATUS 函数。例如,要检查名为 2024_02 的捆绑包的状态,请执行以下操作:

SELECT SYSTEM$BEHAVIOR_CHANGE_BUNDLE_STATUS('2024_02');
Copy
+-------------------------------------------------+
| SYSTEM$BEHAVIOR_CHANGE_BUNDLE_STATUS('2024_02') |
|-------------------------------------------------|
| DISABLED                                        |
+-------------------------------------------------+

要检查所有当前可用的行为变更捆绑包的状态,请调用 SYSTEM$SHOW_ACTIVE_BEHAVIOR_CHANGE_BUNDLES 函数:

SELECT SYSTEM$SHOW_ACTIVE_BEHAVIOR_CHANGE_BUNDLES();
Copy
+--------------------------------------------------------------------------------------------------------------+
| SYSTEM$SHOW_ACTIVE_BEHAVIOR_CHANGE_BUNDLES()                                                                 |
|--------------------------------------------------------------------------------------------------------------|
| [{"name":"2023_08","isDefault":true,"isEnabled":true},{"name":"2024_01","isDefault":false,"isEnabled":true}] |
+--------------------------------------------------------------------------------------------------------------+

在您的账户中启用行为变更捆绑包

要在账户中启用特定的行为变更,请调用 SYSTEM$ENABLE_BEHAVIOR_CHANGE_BUNDLE 函数。例如,要启用名为 2024_02 的捆绑包,请执行以下操作:

SELECT SYSTEM$ENABLE_BEHAVIOR_CHANGE_BUNDLE('2024_02');
Copy
+-------------------------------------------------+
| SYSTEM$ENABLE_BEHAVIOR_CHANGE_BUNDLE('2024_02') |
|-------------------------------------------------|
| ENABLED                                         |
+-------------------------------------------------+

禁用您账户中的行为变更捆绑包

要禁用账户中的特定行为变更,请调用 SYSTEM$DISABLE_BEHAVIOR_CHANGE_BUNDLE。例如,要禁用名为 2024_02 的捆绑包,请执行以下操作:

SELECT SYSTEM$DISABLE_BEHAVIOR_CHANGE_BUNDLE('2024_02');
Copy
+-------------------------------------------------+
| SYSTEM$DISABLE_BEHAVIOR_CHANGE_BUNDLE('2024_02')|
|-------------------------------------------------|
| DISABLED                                        |
+-------------------------------------------------+

确定您账户的当前版本

要查看账户中 Snowflake 的当前版本,请调用 CURRENT_VERSION 函数。例如:

SELECT CURRENT_VERSION();
Copy
+-------------------+
| CURRENT_VERSION() |
|-------------------|
| 8.5.1             |
+-------------------+

减少掩码策略返回值更新

在未来的行为变更捆绑包中,Snowflake 计划更新掩码策略条件中长度、精度和小数位数的值(统称为“返回值更新”)。当进行这些返回值更新时,如果满足以下条件,则对受掩码策略保护的列的查询将失败:

  • 捆绑包已启用。

  • 掩码策略条件返回值的长度或精度的值 大于 掩码策略所指定列的长度或精度。

如果返回值的小数位数大于列的小数位数,则该值将被截断为列的小数位数。

启用捆绑包后,您可以按如下方式测试其行为:

  1. 创建策略:

    CREATE MASKING POLICY MP AS (s string)
    RETURNS STRING -> 'abcdef';
    
    Copy
  2. 分配策略:

    CREATE TABLE t(col1 string(2));
    
    ALTER TABLE t MODIFY COLUMN col1 SET MASKING POLICY mp;
    
    Copy
  3. 查询列(失败):

    SELECT * FROM t;
    
    Copy

要确定此更改的影响并提供足够的时间来更新掩码策略条件以保护数据,请查询 SNOWFLAKE.BCR_ROLLOUT.BCR_2024_03_DDM_ROLLOUT 视图,以了解未来返回值更新对您的账户有何影响。

BCR_2024_03_DDM_ROLLOUT 视图是临时的。当返回值更新时,在未来的行为变更捆绑包中 普遍启用 时,Snowflake 将移除该视图。此时,您将无法查询视图以确定受影响的列和策略,也无法防止因返回值更新导致列查询或掩码策略分配操作失败。

该视图记录了从 2024 年 3 月开始的数据。如果查询视图需要很长时间才能完成,则可以使用 SET 命令指定开始日期和结束日期会话变量。这些变量有助于减少查询视图时要评估的行数。例如:

SET DDM_CASTING_BCR_START_DATE = '2024-03-01';
SET DDM_CASTING_BCR_END_DATE = '2024-04-03';
Copy

识别掩码策略和列关联

要查询视图并减少即将发生的返回值变更,请执行以下操作:

  1. 查询 SNOWFLAKE.BCR_ROLLOUT.BCR_2024_03_DDM_ROLLOUT 视图。例如:

    USE ROLE ACCOUNTADMIN;
    SET DDM_CASTING_BCR_START_DATE = '2024-03-01';
    SET DDM_CASTING_BCR_END_DATE = '2024-04-03';
    SELECT * FROM SNOWFLAKE.BCR_ROLLOUT.BCR_2024_03_DDM_ROLLOUT;
    
    Copy
  2. 评估 BCR_2024_03_DDM_ROLLOUT 视图参考 部分中的 REASON 列,以确定需要对掩码策略条件进行哪些更新。

  3. 使用 ALTER MASKING POLICY 语句更新掩码策略条件,以确保列数据保持受保护并且策略分配操作或受保护列查询不会失败。

  4. 通过查询已分配掩码策略的表列来测试新策略条件。

BCR_2024_03_DDM_ROLLOUT 视图参考

BCR_2024_03_DDM_ROLLOUT 视图(在 SNOWFLAKE.BCR_ROLLOUT 架构中)记录从 2022 年 7 月 15 日开始的信息,包含以下列:

数据类型

描述

policy_name

VARCHAR

策略的名称。

policy_id

NUMBER

内部/系统生成的策略标识符。

policy_schema

VARCHAR

策略的父架构。

policy_database

VARCHAR

策略的父数据库。

policy_body

VARIANT

掩码或取消掩码列数据的策略条件。

column_name

VARCHAR

具有策略的列的名称。

COLUMN_TYPE

VARCHAR

列的数据类型。

COLUMN_LENGTH

NUMBER

列的长度有相关策略,如果没有设置,则为 [NULL]

COLUMN_PRECISION

NUMBER

列的精度有相关策略,如果没有设置,则为 [NULL]

COLUMN_SCALE

NUMBER

列的小数位数有相关策略,如果没有设置,则为 [NULL]

TABLE_NAME

VARCHAR

表的名称。

table_id

NUMBER

内部/系统生成的表标识符。

table_schema

VARCHAR

表的父架构。

table_database

VARCHAR

表的父数据库。

table_kind

VARCHAR

表的类型。以下其中一项:TABLELOCAL TEMPORARYVIEWMATERIALIZED VIEWEXTERNAL TABLEDYNAMIC TABLE

reason

VARCHAR

不匹配的可能原因。以下其中一项:lengthprecisionscale

LARGEST_MASKED_SIZE

NUMBER

掩码值长度、小数位数或精度的最大值取决于分配给该列的掩码策略。

语言: 中文