動作変更の管理

このドキュメントでは、特定の 動作変更バンドル が、アカウントで有効になっているかどうかを確認する方法と、それを有効または無効にする方法について説明します。

概要

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             |
+-------------------+

マスキングポリシーの戻り値更新の軽減

2024_04 バンドル には、マスキングポリシー条件における精度とスケールの値の変更があります(総称して「返り値の更新」)。以下が当てはまる場合は、マスキングポリシーで保護された列に対するクエリに失敗します。

  • バンドルが有効になっている。

  • マスキングポリシーの条件が、マスキングポリシーに割り当てられている列の精度よりも 高い 精度の値を返す。

戻り値のスケールが列のスケールより大きい場合、値は列のスケールに合わせて切り捨てられます。

新しい動作を既存のポリシーに適用する場合は、新しいマスキングポリシーを作成し、 FORCE キーワード を使用して既存のポリシーを置き換えます。

バンドルを有効にすると、以下のように動作をテストできます。

  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 TABLE または DYNAMIC TABLE

reason

VARCHAR

考えられる不一致の理由。 precision または scale のいずれかを指定します。

LARGEST_MASKED_SIZE

NUMBER

列に割り当てられたマスキングポリシーに基づき、マスキングされた値が持つことができる最大の長さ、スケール、精度。