ユーザー定義タグによるタグの自動伝播¶
タグの伝播は、 オブジェクトタグ がソースオブジェクトに適用されている場合、ターゲットオブジェクトに自動的に割り当てます。たとえば、テーブルやその列などのソースオブジェクトにタグを定義すると、これらのタグはソースオブジェクトから作成されたビューや別のテーブルなどのターゲットオブジェクトに自動的に伝播されます。
タグの自動伝播の利点は以下の通りです。
オブジェクト全体のタグ管理を合理化し、特にソースオブジェクトや列にタグを適用することで、発見やデータ保護を容易にします。
タグに関連付けられたポリシーがターゲットオブジェクトに自動的に適用されるようにします。
タグの自動伝播を実装できるのは、アカウントレベル APPLY TAG の権限を持つタグ所有者のみです。
伝播のタイプ¶
オブジェクト依存関係、 データ移動 、またはその両方がある場合に、タグを伝播することを選択できます。
オブジェクト依存関係のタグの伝播¶
オブジェクト依存関係に対してタグの伝播が構成されている場合、タグはソースオブジェクトから、そのオブジェクトをベースとするすべてのターゲットオブジェクトに伝搬されます。例えば、 t1
テーブルでタグ data_sensitivity
の伝播をセットし、 t1
をベースに 2 つのビューを作成した場合、 data_sensitivity
タグは両方のビューに伝搬されます。
ソース・オブジェクトからビュー、セキュア・ビュー、マテリアライズド・ビュー、または動的テーブルを作成することは、オブジェクト依存関係と見なされます。
オブジェクト依存関係の連続伝搬¶
タグがオブジェクト依存関係用に構成されている場合、Snowflakeは以下のいずれかが発生すると、ターゲットオブジェクトを 継続的に更新します。
タグはソース・オブジェクトまたは列に追加されます。
タグの値が更新されます。
ソース・オブジェクトまたは列からタグが削除されます。この場合、Snowflakeはターゲットオブジェクトまたは列からタグを削除します。
例えば、 CREATE VIEW ステートメントを実行した後、 data_sensitivity
タグがテーブル 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 プロパティは、コンフリクトが発生したときに何が起こるかを決定します。タグ伝播の競合を処理するには、3つのオプションがあります。
タグの値を文字列
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テーブル
一時テーブル
以下の表示タイプ:
ビュー
セキュアビュー
マテリアライズドビュー