オブジェクトタグの操作を行う

このトピックでは、タグを作成してSnowflakeオブジェクトに割り当てる方法について説明します。タグの削除方法もコンテナーで説明されています。

タグを作成します。

新しいタグを作成するには、 CREATE TAG コマンドを使用します。例えば、 cost_center という名前の基本タグをオプションのパラメーターなしで作成するには、次のように実行します:

CREATE TAG cost_center;
Copy

許可されるタグ値のリストのセット

ALLOWED_VALUES tag パラメーターは、タグが オブジェクト にセットされたときに、タグに割り当てることができる文字列値のリストを指定することができます。定義されたリストに値がない限り、ユーザーはタグに値を割り当てることはできません。

1つのタグで可能な文字列値の最大数は300です。各タグの文字列値は最大256文字です。

CREATE TAG ステートメントでタグを作成または置き換えるとき、または ALTER TAG ステートメントで既存のタグを変更するときに、許容値のリストを指定できます。ALTER TAG ステートメントは、タグの許可された値の追加 および タグに対する既存の値のドロップをサポートしています。

注釈

タグがターゲットオブジェクトに自動的に伝播するように構成されている場合、許可リスト内の値の順序は、競合がどのように解決されるかに影響します。詳細については、 タグの伝播の競合 をご参照ください。

タグに許可される値のリストを決定するには、 SYSTEM$GET_TAG_ALLOWED_VALUES 関数を呼び出します。

許可された2つの文字列値として financeengineering を使用して cost_center という名前のタグを作成します。

CREATE TAG cost_center
  ALLOWED_VALUES 'finance', 'engineering';
Copy

次の許可された値を確認します。

SELECT SYSTEM$GET_TAG_ALLOWED_VALUES('governance.tags.cost_center');
Copy

cost_center という名前のタグを変更して、許可された文字列値として marketing を追加します。

ALTER TAG cost_center
  ADD ALLOWED_VALUES 'marketing';
Copy

cost_center という名前のタグを変更して、許可された文字列値として engineering をドロップします。

ALTER TAG cost_center
  DROP ALLOWED_VALUES 'engineering';
Copy

自動的に伝播するタグの定義

PROPAGATE tag パラメーターは、特定の状況下でタグがソースオブジェクトからターゲットオブジェクトに自動的に伝搬されるように構成することができます。この PROPAGATE パラメーターは以下の値にセットできます。

  • PROPAGATE = ON_DEPENDENCY: オブジェクト依存関係 がある場合、タグはターゲットオブジェクトに伝搬されます。

  • PROPAGATE = ON_DATA_MOVEMENT: タグは、ソースオブジェクトからターゲットオブジェクトに データが移動する ときに、ターゲットオブジェクトに伝搬されます。

  • PROPAGATE = ON_DEPENDENCY_AND_DATA_MOVEMENT: タグはオブジェクト依存関係とデータ移動の両方に伝搬されます。

プロパゲーションの詳細情報については、 ユーザー定義タグによるタグの自動伝播 をご参照ください。

オブジェクト依存関係があるときに自動的に伝播する新しいタグを作成します。

CREATE TAG data_sensitivity PROPAGATE = ON_DEPENDENCY;
Copy

既存のタグを更新して、オブジェクト依存関係とデータ移動の両方の自動伝搬を有効にします。

ALTER TAG data_sensitivity SET PROPAGATE = ON_DEPENDENCY_AND_DATA_MOVEMENT;
Copy

既存のタグを更新し、伝播を無効にします。

ALTER TAG data_sensitivity UNSET PROPAGATE;
Copy

タグのセット

ユーザーインターフェイス または SQL を使って、オブジェクトにタグをセットすることができます。

オブジェクトにタグをセットするときは、タグの値をセットしなければなりません。この文字列値は最大256文字です。

タグを作成したユーザーが、許可された値のリストを指定したかもしれません。その場合、リストにあるタグ値しかセットできません。特定のタグで許可された文字列値のリストを取得するには、 SYSTEM$GET_TAG_ALLOWED_VALUES 関数を呼び出します。例えば、 cost_center というタグが governance というデータベースと tags というスキーマに格納されていると仮定すると、以下を実行することで、タグ値を finance または marketing にセットできるかどうかを判断することができます:

SELECT SYSTEM$GET_TAG_ALLOWED_VALUES('governance.tags.cost_center');
Copy
+--------------------------------------------------------------+
| SYSTEM$GET_TAG_ALLOWED_VALUES('GOVERNANCE.TAGS.COST_CENTER') |
|--------------------------------------------------------------|
| ["finance","marketing"]                                      |
+--------------------------------------------------------------+

Snowsight を使用して、タグをセットします。

Snowsight を使用して、既存のテーブル、ビュー、列にタグを設定できます。

タグを設定するにはいくつかのオプションがあります。

  • オブジェクトエクスプローラーを使用して、必要なテーブル、ビュー、列に移動します (すなわち、 Data » Databases)。

    More メニュー(つまり、 ...) » Edit を選択し、 + Tag を選択します。プロンプトに従ってタグの割り当てを管理します。

  • Snowsight の Governance エリア(つまり Monitoring » Governance)に移動し、以下を実行します:

    • タイル、配分パーセンテージ、および最も使用されるタグまたはテーブルの1つを選択します。 Dashboard で項目を選択すると、 Snowsight によって Tagged Objects タブにリダイレクトされます。

    • 必要に応じてフィルターを変更します。オブジェクトまたは列を選択すると、 Snowsight によってオブジェクトエクスプローラー内のその場所にリダイレクトされます。必要に応じてタグの割り当てを更新します。

  • Tagged Objects タブに直接移動します。フィルターを変更し、オブジェクトまたは列を選択し、タグの割り当てを管理します。

注釈

Governance エリアにアクセスするには、Snowflakeアカウントが Enterprise Edition 以上 である必要があります。また、以下のいずれかのロールを持っている必要があります:

  • ACCOUNTADMIN ロールを使用します。

  • GOVERNANCE_VIEWER および OBJECT_VIEWER データベースのロールが付与されているロールを使用してください。

    これらのデータベースのロールに関する情報については、 SNOWFLAKE データベースロール を参照してください。

SQL を使用して、タグをセットします。

SQL コマンドを使って、新しいオブジェクトを作成するときにタグをセットしたり、既存のオブジェクトにタグをセットすることができます。

新しく作成するオブジェクトにタグをセットするには、 CREATE ... WITH TAG コマンドを使います。例えば、作成中のウェアハウスにタグ cost_center を割り当てるには、次のように実行します。

CREATE WAREHOUSE mywarehouse WITH TAG (cost_center = 'sales');
Copy

既存のオブジェクトにタグをセットするには、 ALTER ... SET TAG コマンドを使います。例えば、既存のウェアハウスにタグ cost_center を割り当てるには、次のように実行します。

ALTER WAREHOUSE wh1 SET TAG cost_center = 'sales';
Copy

拡張例:タグの作成と SQL の割り当て

以下は、 SQL を使用してオブジェクト・タグを実装する方法の概要を示す拡張例です。この本には、以下の方法が書かれています。

  • タグを扱うために必要なアクセス制御権限を管理します。

    簡単にするために、ワークフローにはタグに対する集中管理アプローチを想定しています。ここで、 tag_admin カスタムロールには、 CREATETAG 権限と APPLYTAG グローバル権限の両方があります。別のアプローチについては、 タグ権限を割り当てるアプローチ をご参照ください。

  • CREATE TAG ステートメントを使用してタグを作成します。

  • CREATE <オブジェクト> コマンドを使用して、新しい Snowflake オブジェクトにタグを割り当てます。

  • ALTER <オブジェクト> コマンドを使用して、既存の Snowflake オブジェクトにタグを割り当てます。

  1. カスタムロールを作成して権限を割り当てます。

    集中管理アプローチでは、 tag_admin カスタムロールが、タグの作成とSnowflakeオブジェクトへの割り当てを担当します。

    この例では、 ACCOUNTADMIN システムロールを使用しています。実稼働環境において、この上位の権限を持つロールを使用することが望ましくない場合は、 tag_admin カスタムロールに対して権限を割り当てるロールが、 tag_admin カスタムロールを承認するために必要な権限を持っていることを確認します。詳細については、 アクセス制御権限 (このトピック内)をご参照ください。

    USE ROLE USERADMIN;
    CREATE ROLE tag_admin;
    USE ROLE ACCOUNTADMIN;
    GRANT CREATE TAG ON SCHEMA mydb.mysch TO ROLE tag_admin;
    GRANT APPLY TAG ON ACCOUNT TO ROLE tag_admin;
    
    Copy
  2. タグ管理者として機能するユーザーに tag_admin カスタムロールを付与します。

    USE ROLE USERADMIN;
    GRANT ROLE tag_admin TO USER jsmith;
    
    Copy
  3. CREATE TAG ステートメントを実行してタグを作成します。

    USE ROLE tag_admin;
    USE SCHEMA mydb.mysch;
    CREATE TAG cost_center;
    
    Copy
  4. タグを新しいウェアハウスに割り当てます。

    USE ROLE tag_admin;
    CREATE WAREHOUSE mywarehouse WITH TAG (cost_center = 'sales');
    
    Copy
  5. タグを既存のウェアハウスに割り当てます。

    USE ROLE tag_admin;
    ALTER WAREHOUSE wh1 SET TAG cost_center = 'sales';
    
    Copy
  6. タグを既存のテーブルの列に割り当てます。

    ALTER TABLE hr.tables.empl_info
      MODIFY COLUMN job_title
      SET TAG cost_center = 'marketing';
    
    Copy

タグの削除

タグを削除するには、 DROP TAG コマンドを使用します。コマンドを実行すると、タグが永久に削除されるまで24時間の猶予期間があります。猶予期間中に、 UNDROP TAG コマンドを実行して、タグをリストアすることができます。このコマンドは、タグとオブジェクト間のすべてのタグ割り当て(つまり、リファレンス)もリストアします。

タグを削除する前に、どのオブジェクトにタグが付いているかを確認したい場合は、 TAG_REFERENCES ビュー(Account Usage 内)でタグの割り当てをクエリします。

アクセス制御権限

タグの権限

Snowflakeは、ユーザーがタグを作成、設定、および所有できるかどうかを決定するために、次の権限をサポートしています。

スキーマ内のオブジェクトに対して操作を実行するには、親データベースとスキーマに対する USAGE 権限が必要です。

権限

使用状況

CREATE

スキーマで新しいタグを作成できるようにします。

APPLY

Snowflakeオブジェクトのタグの設定および設定解除操作を有効にします。構文例については、 DDL コマンド、操作、および権限の概要 をご参照ください。

OWNERSHIP

タグの所有権を譲渡します。これにより、タグを包括的に制御できるようになります。タグのほとんどのプロパティを変更するために必要です。

DDL コマンド、操作、および権限の概要

次のテーブルは、タグ権限と DDL 操作の関係をまとめたものです。

操作

必要な権限

テーブルの作成。

同じスキーマ内の CREATE TAG 権限を持つロール。

伝播するタグの作成

APPLY TAG ON ACCOUNT、 OWNERSHIP タグ権限を持つロール。

タグの変更。

タグに対する OWNERSHIP 権限を持つロール。

タグのドロップおよびドロップ解除。

タグに対する OWNERSHIP 権限と、タグが存在するデータベースおよびスキーマに対する USAGE 権限を持つロール。

タグの表示。

以下のいずれか: . タグが存在するスキーマの USAGE 権限を持つロール、 または . APPLY TAG ON ACCOUNT 権限を持つロール。

オブジェクトのタグの設定または設定解除。

個々のオブジェクトについては、 APPLY TAG ON ACCOUNT 権限を持つロール、 または タグの APPLY TAG 権限、タグがセットされたオブジェクトに OWNERSHIP 権限を持ちます。 サポートされているオブジェクト をご参照ください。

列のタグの設定または設定解除。

APPLY TAG ON ACCOUNT 権限を持つロール、 または タグに APPLY 権限を持ち、テーブルまたはビューに OWNERSHIP 権限を持つロール。

オブジェクトでのタグの取得。

SYSTEM$GET_TAGTAG_REFERENCESTAG_REFERENCES_WITH_LINEAGE をご参照ください。

タグ権限を割り当てるアプローチ

このセクションでは、タグの作成とセットに必要な権限を割り当てるためのさまざまなアプローチについて説明します。

  1. tag_admin カスタム・ロールが すべての オブジェクト/列のタグを作成およびセットする集中タグ管理アプローチでは、以下の権限が必要です。

    USE ROLE securityadmin;
    GRANT CREATE TAG ON SCHEMA <db_name.schema_name> TO ROLE tag_admin;
    GRANT APPLY TAG ON ACCOUNT TO ROLE tag_admin;
    
    Copy
  2. ハイブリッド型管理アプローチでは、単一のロールに CREATE TAG 権限があり、タグに一貫した名前が付けられ、個別のチームまたはロールに特定のタグの APPLY 権限があります。

    例えば、カスタムロール finance_role は、そのロールが所有するテーブルやビューにタグ cost_center をセットする権限を付与することができます(つまり、そのロールはテーブルやビューに OWNERSHIP 権限を持ちます)。

    USE ROLE securityadmin;
    GRANT CREATE TAG ON SCHEMA <db_name.schema_name> TO ROLE tag_admin;
    GRANT APPLY ON TAG cost_center TO ROLE finance_role;
    
    Copy