オブジェクトのタグ付け

このトピックでは、Snowflakeでタグを使用する方法の概念と手順について説明します。

タグでマスキングポリシーを使用する方法の詳細については、 タグベースのマスキングポリシー をご参照ください。

このトピックの内容:

タグとは

タグを使用すると、データスチュワードは、集中型または分散型のデータガバナンス管理アプローチを通じて、コンプライアンス、検出、保護、およびリソースの使用状況のユースケースに関する機密データをモニターできるようになります。

タグは、別のSnowflakeオブジェクトに割り当てることができるスキーマレベルのオブジェクトです。タグをSnowflakeオブジェクトに割り当てると、タグに任意の文字列値を割り当てることができます。Snowflakeは、タグとその文字列値をキーと値のペアとして保存します。タグはスキーマに対して一意である必要があり、タグ値は常に文字列です。

CREATE TAG ステートメントを使用してタグを作成し、タグをオブジェクトに割り当てるときにタグ文字列値を指定します。タグがすでに存在することを前提として、 CREATE <オブジェクト> ステートメントを使用し、オブジェクトの作成中にタグをオブジェクトに割り当てることができます。または、 ALTER <オブジェクト> ステートメントを使用して既存のオブジェクトにタグを割り当てることもできます。

単一のタグを同時に異なるオブジェクトタイプに割り当てることができます(例: ウェアハウスとテーブルを同時に)。割り当て時に、タグ文字列値は、複製することも、一意のままにすることもできます。たとえば、複数のテーブルにcost_centerタグを割り当てることができ、タグの文字列値は常にsalesにすることができます。または、文字列値が異なる場合もあります(例: engineering、marketing、finance)。タグを定義し、Snowflakeオブジェクトにタグを割り当てた後に、タグをクエリしてオブジェクトの使用状況をモニターして、モニター、監査、レポートなどのデータガバナンス操作を容易にすることができます。

タグはテーブル、ビュー、および列に割り当てることができるため、タグを設定してからタグをクエリすると、機密情報を含んでいる多数のデータベースオブジェクトおよび列を検出できます。発見時に、データスチュワードは、 行アクセスポリシー を使用した選択的フィルタリング、または マスキングポリシー を使用した、データのトークン化、完全なマスク化、部分的なマスク化、またはマスク解除の判断により、データの提供に関する最善の方法を決定できます。

ウェアハウスにタグを割り当てると、正確なリソースの使用状況のモニターが可能になります。リソースのタグをクエリすると、コストセンターまたは他の組織単位ごとにリソースを簡単にグループ化できます。さらに、タグを使用すると、プロジェクトのような比較的短期間のビジネスアクティビティの分析が容易になり、どのようなリソースが、いつ、どのように使用されたかについて、より詳細な洞察を得ることができます。

オブジェクトおよび列のタグクォータ

各タグの文字列値は最大256文字で、タグに 許可される値 を指定するオプションがあります。

次の説明は、テーブルやビューではないすべてのオブジェクトに適用されます。

Snowflakeでは、単一のオブジェクトに最大50個の 一意な タグを設定できます。CREATE <オブジェクト> または ALTER <オブジェクト> ステートメントでは、単一のステートメントで指定できるタグの最大数は100です。

一意のタグの最大数は、テーブルとビューの列を含め、テーブルとビューでわずかに異なります。

テーブル、ビュー、および列

テーブルまたはビューとその列のために、単一の CREATE <オブジェクト> または ALTER <オブジェクト> ステートメントで指定できる一意なタグの最大数は100です。この合計値には次の制限があります。

  • 単一のテーブルまたはビューオブジェクト: 一意なタグ50個。

  • 単一のテーブルまたはビューで結合されたすべての列: 一意なタグ50個。

たとえば、テーブル内の単一の列で10個の一意なタグが列に設定されている場合、Snowflakeは次を許可します。

  • 同じ列、テーブル内の他の列、またはテーブル内の列の組み合わせに40個の追加の一意なタグを設定する。

  • テーブル自体に50個の追加の一意なタグを設定する。

テーブル自体とその列に対する一意なタグの制限値50に達すると、テーブルまたはその列に追加のタグを設定できなくなります。この時点で、テーブルまたはその列に追加のタグを設定する必要がある場合、考慮すべき次のステップは、オブジェクトのタグクォータを管理する方法です。

タグクォータを管理する

一意なタグの最大数50には、 DROP TAG ステートメントを使用してタグがドロップされてから24時間の期限にドロップされたタグが含まれます。この期限の理由は、タグを削除したユーザーが必要に応じて UNDROP TAG ステートメントを実行できるようにするためです。UNDROP TAG 操作が24時間の間隔内に実行されると、Snowflakeはドロップ操作の前に最新だったタグ割り当て(つまり、参照)を復元します。

24時間の期限が切れると、Snowflakeはドロップされたタグに関連するすべての参照をパージします。この時点で、ドロップされたタグを一度参照したオブジェクトまたは列に、新しいタグを割り当てることができます。

次の手順を使用して、オブジェクトのタグクォータを管理します。

  1. TAG_REFERENCES ビュー(Account Usage)をクエリして、タグの割り当てを決定します。

  2. オブジェクトまたは列からタグの設定を解除します。例:

    オブジェクトの場合は、対応する ALTER <オブジェクト> ... UNSET TAG コマンドを使用します。

    テーブルまたはビュー列の場合は、対応する ALTER { TABLE | VIEW } ... { ALTER | MODIFY } COLUMN ... UNSET TAG コマンドを使用します。

  3. DROP TAG ステートメントを使用してタグをドロップします。

タグ値を指定する

ALLOWED_VALUES タグプロパティを使用すると、タグが オブジェクト に設定されている場合に、タグに割り当てることができる選択可能な文字列値を指定できます。1つのタグで可能な文字列値の最大数は300です。

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

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

例:

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

create tag cost_center
    allowed_values 'finance', 'engineering';
Copy

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

select get_ddl('tag', 'cost_center')

+------------------------------------------------------------------------------+
| GET_DDL('tag', 'cost_center')                                                |
|------------------------------------------------------------------------------|
| create or replace tag cost_center allowed_values = 'finance', 'engineering'; |
+------------------------------------------------------------------------------+
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

特定のタグで許可された文字列値のリストを取得するには、 GET_DDL 関数または SYSTEM$GET_TAG_ALLOWED_VALUES 関数を呼び出します。たとえば、タグ cost_centergovernance という名前のデータベースと tags という名前のスキーマに保存されていると仮定します。

select system$get_tag_allowed_values('governance.tags.cost_center');

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

タグ系統

タグは、Snowflakeのセキュリティ保護可能なオブジェクトの階層に基づいて継承されます。Snowflakeは、Snowflake環境の セキュリティ保護可能なオブジェクト の階層にできるだけ近いタグキーを定義することをお勧めします。

タグ管理者は、テーブルとビューにマスキングポリシーを適用できます。

タグの継承とは、タグがテーブルに適用される場合、そのタグはそのテーブルの列にも適用されることを意味します。この動作は、タグ系統と呼ばれます。

特定のオブジェクトで継承されたタグを上書きできます。たとえば、テーブルの列が、文字列値がsalesであるcost_centerという名前のタグを継承する場合、タグは、北米の販売コストセンターを指定するsales_naなど、より具体的なタグ文字列値に更新できます。さらに、新しいタグをテーブル列に適用できます。 ALTER TABLE ... ALTER COLUMN ステートメントを使用して、列のタグ文字列値を更新し、列に1つ以上の追加タグを設定します。

タグキーを定義し、Snowflakeオブジェクトにタグを割り当てた後、指定されたテーブル関数を使用してタグ、タグ参照、およびタグ系統をモニターするか、 SQL によるタグのモニター (このトピック内)に示すようにビューをクエリします。

注釈

タグの系統には、ネストされたオブジェクトへの 伝達 が含まれて いません。例:

table_1 » view_1 » materialized_view_1

ネストされたオブジェクトが基になるテーブルまたはビューに相対してすでに存在する場合は、基になるオブジェクトにタグが設定されても、ネストされたオブジェクトにタグが自動的に設定されることはありません。この例では、 table_1 にタグを設定しても、 view_1materialized_view_1 に同じタグが設定されることはありません。この動作は列にも当てはまります。

基になるオブジェクトまたは列のタグをネストされたオブジェクトに引き継ぐ必要がある場合は、ネストされたオブジェクトで CREATE OR REPLACE ステートメントを実行し、 合わせて SQL ステートメントが、ネストされたオブジェクトまたは列でタグを指定することを確認します。

利点

使いやすさ:

タグを一度定義して、必要な数の異なるオブジェクトに適用します。

タグ系統:

タグは継承されるため、セキュリティ保護可能なオブジェクトの階層の上位にあるオブジェクトにタグを適用すると、すべての子オブジェクトにタグが適用されます。たとえば、タグがテーブルに設定されている場合、そのタグはそのテーブルのすべての列に継承されます。

複製での一貫した割り当て:

Snowflakeは、プライマリデータベース内のタグとその割り当てをセカンダリデータベースに複製します。

詳細については、 複製 (このトピック内)をご参照ください。

機密データの追跡とリソースの使用:

タグは機密データ(例: PII、シークレット)の識別を簡素化し、Snowflakeリソースの使用状況を可視化します。アナリストは、同じシステム内のデータとメタデータを使用して、タグ定義(例: cost_centerdepartment)に基づいて、どのリソースが最も多くのSnowflakeクレジットを消費しているかをすばやく判断できます。

集中型または分散型の管理:

タグは、さまざまな管理アプローチをサポートして、内部および外部の規制要件への準拠を促進します。

集中型アプローチでは、 tag_admin カスタムロールがタグを作成して、Snowflakeオブジェクトに適用します。

分散型アプローチでは、個々のチームがSnowflakeオブジェクトにタグを適用し、 tag_admin カスタムロールがタグを作成して、一貫したタグの命名を確実にします。

考慮事項

将来の付与:

タグに対する権限の 将来の付与 はサポートされていません。

回避策として、カスタムロールに APPLYTAG 権限を付与して、そのロールが別のオブジェクトにタグを適用できるようにします。

Snowflake Native App:

バージョン管理されたスキーマにタグが存在する場合は、セットアップスクリプトを作成する際に注意してください。詳細については、 バージョンスキーマの考慮事項 をご参照ください。

Snowflakeオブジェクトおよび機能でのタグの使用

以下では、タグがSnowflakeのオブジェクトと機能にどのように影響するかについて説明します。

サポートされているオブジェクト

次のテーブルに、列を含む、タグでサポートされているオブジェクトをSnowflakeのセキュリティ保護可能なオブジェクト階層に基づいて示します。

タグは、以下のテーブルでそれ以外に指定されている場合を除き、 CREATE <オブジェクト> ステートメントまたは ALTER <オブジェクト> ステートメントを使用してオブジェクトに設定できます。

タグは、 CREATE TABLE、 CREATE VIEW、 ALTER TABLE ... MODIFY COLUMN、または ALTER VIEW ステートメントのいずれかを使用して列に設定できます。

オブジェクト階層

サポートされているオブジェクト

メモ

組織

アカウント

タグは、 APPLY TAG グローバル権限を持つロールによって 現在のアカウント設定 できます。

アカウント

アプリケーション

アプリケーションパッケージ

データベース

統合

すべての がサポートされています。

ALTER INTEGRATION コマンドを使用して、統合にタグを設定します。

ネットワークポリシー

ALTER NETWORK POLICY コマンドを使用して、ネットワークポリシーにタグを設定します。

ロール

共有

タグは、データ共有プロバイダーによって共有に設定されます。これらのタグは、データ共有コンシューマーには表示されません。 ALTER SHARE コマンドを使用して、共有にタグを設定します。

ユーザー

ウェアハウス

データベース

データベースロール

ALTER DATABASE ROLE コマンドを使用して、データベースロールにタグを設定します。

スキーマ

スキーマ

アラート

外部関数および UDF

ALTER FUNCTION コマンドを使用して、外部関数または UDF にタグを設定します。

外部テーブル

CREATE EXTERNAL TABLE ステートメントを使用すると、タグ付きの外部テーブルを作成できます。

外部テーブルのタグ割り当てを管理するには、 ALTER TABLE コマンドを使用します。

Icebergテーブル

マテリアライズドビュー

パイプ

ALTER PIPE ステートメントでパイプにタグを設定します。

ポリシー

対応する ALTER <ポリシー> ステートメントを使用して、 マスキングパスワード行アクセス、および セッション ポリシーにタグを設定します。

プロシージャ

ALTER PROCEDURE ステートメントを使用して、ストアドプロシージャにタグを設定します。

ステージ

ALTER STAGE ステートメントを使用して、ステージにタグを設定します。

ストリーム

テーブル

タスク

ALTER TASK ステートメントを使用して、タスクにタグを設定します。

ビュー

テーブルまたはビュー

イベントテーブル を含みます。

オブジェクトのタグ付けおよびマスキングポリシー

詳細については、 タグベースのマスキングポリシー をご参照ください。

列に直接割り当てられるマスキングポリシーは、タグベースのマスキングポリシーよりも優先されることに注意してください。

CREATE TABLE ステートメント

CREATE TABLE ... LIKE を使用すると、ソーステーブルに割り当てられたタグがターゲットテーブルに割り当てられます。

複製

タグとその割り当ては、ソースアカウントからターゲットアカウントに複製できます。

ソースアカウントから最初に複製した後に、ターゲットアカウントでタグの割り当てを変更することはできません。たとえば、セカンダリ(つまり、複製された)データベースにタグを設定することは許可されていません。ターゲットアカウントでタグの割り当てを変更するには、ソースアカウントでそれらを変更し、ターゲットアカウントに複製します。

データベース複製 の場合は、次のいずれかの条件に該当すると、複製操作に失敗します。

  • プライマリデータベースはEnterprise(またはそれ以上)のアカウントにあり、タグを含んでいますが、下位エディションには、複製が承認された1つ以上のアカウントがあります。

  • プライマリデータベースに含まれるオブジェクトには、別のデータベースにあるタグへの ダングリングリファレンス がある。

ダングリングリファレンスエラーを回避するには、 複製またはフェールオーバーグループ を使用して、データベースとアカウントレベルのオブジェクトを複製します。複製グループに次が含まれていることを確認します。

  • ALLOWED_DATABASES プロパティのタグを含むデータベース。

  • OBJECT_TYPES プロパティにタグを持つその他のアカウントレベルのオブジェクト(例: ROLESWAREHOUSES)。

    詳細については、 CREATE REPLICATION GROUP および CREATE FAILOVER GROUP をご参照ください。

注釈

複製とフェールオーバーグループ、またはデータベース複製を使用する場合:

  • フェールオーバー/フェールバック機能は、Business Critical Edition(またはそれ以上)のSnowflakeアカウントでのみ利用できます。

    詳細については、 複数のアカウント間にわたる複製とフェールオーバーの概要 をご参照ください。

  • 複製またはフェールオーバーグループのために、 ALTER DATABASE ステートメント内、または CREATE OR ALTER ステートメント内でデータベース複製の IGNORE EDITION CHECK 句を指定すると、ターゲットアカウントのエディションが Business Critical よりも下位の場合にタグの複製が発生する可能性があります。

    詳細については、これらのコマンドにある句の説明をご参照ください。

クローニング

  • ソースオブジェクト(例: テーブル)にあるタグの関連付けは、クローンされたオブジェクトで維持されます。

  • データベースまたはスキーマの場合は、

    そのデータベースまたはスキーマに格納されているタグもクローンされます。

    データベースまたはスキーマがクローンされると、そのスキーマまたはデータベースに存在するタグもクローンされます。

    テーブルまたはビューがソーススキーマ/データベースに存在し、同じスキーマまたはデータベースにあるタグへの参照がある場合、クローンされたテーブルまたはビューは、ソーススキーマまたはデータベースにあるタグの代わりに、対応するクローンタグ(ターゲットスキーマ/データベース内)にマップされます。

データ共有

  • 共有ビューとタグが異なるデータベースに存在する場合は、タグを含むデータベースに対する REFERENCE_USAGE 権限を共有に付与します。詳細については、 複数データベースからのデータの共有 をご参照ください。

  • データ共有のコンシューマーアカウントで、

    • SHOW TAGS コマンドを実行するロールが共有タグを含むスキーマに対する USAGE 権限を持っている場合は、 SHOW TAGS を実行すると共有タグが返されます。

      プロバイダーがタグに対する READ 権限を共有または共有データベースロールに付与した場合、コンシューマーは共有タグのタグ割り当てを表示できます。詳細については、 共有タグリファレンス をご参照ください。

    • データ共有プロバイダーアカウントのタグが共有テーブルに割り当てられている場合、データ共有コンシューマーは、 SYSTEM$GET_TAG 関数または TAG_REFERENCES Information Schemaテーブル関数を呼び出して、タグの割り当てを表示することはできません。

タグの作成および割り当て

以下は、Snowflakeでタグを使用するための概要です。

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

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

    CREATE <オブジェクト> コマンドを使用して、タグを 新しい オブジェクトに割り当てることもできます。ALTER <オブジェクト> コマンドのみを使用したタグの設定をサポートするオブジェクトを評価するには、このトピック内の サポートされているオブジェクト セクションをご参照ください。

タグを割り当てた後、 SQL または Snowsight を使用してタグの使用状況をモニターできます。詳細については、 SQL によるタグのモニター および Snowsight によるタグのモニター (このトピック内)をご参照ください。

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

  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. タグをSnowflakeオブジェクトまたは列に割り当てます。

    SQL:

    ALTER <オブジェクト> コマンドを使用して、存在するサポートされたすべてのオブジェクトと列にタグを設定できます。一部のオブジェクトは、オブジェクトの作成または置換時のタグの設定をサポートしています。詳細については、このトピック内の サポートされているオブジェクト セクションのテーブルをご参照ください。

    例:

    • 新しいウェアハウスにタグを設定するには、 CREATE WAREHOUSE コマンドを使用します。

      USE ROLE tag_admin;
      CREATE WAREHOUSE mywarehouse WITH TAG (cost_center = 'sales');
      
      Copy
    • 既存のウェアハウスにタグを設定するには、 ALTER WAREHOUSE コマンドを使用します。

      USE ROLE tag_admin;
      ALTER WAREHOUSE wh1 SET TAG cost_center = 'sales';
      
      Copy
    • 既存の列のタグを設定する場合、テーブル列には ALTER TABLE ... MODIFY COLUMN コマンドを使用し、ビュー列には ALTER VIEW ... MODIFY COLUMN コマンドを使用します。1つのステートメントで、複数のタグを設定または設定解除できます。

      ALTER TABLE hr.tables.empl_info
        MODIFY COLUMN job_title
        SET TAG visibility = 'public';
      
      Copy
    Snowsight:

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

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

    • オブジェクトエクスプローラー(つまり、 Data » Databases)を使用して、目的のテーブル、ビュー、または列に移動します。

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

    • Snowsight のガバナンスエリア(つまり Monitoring » Governance)に移動し、次を実行します。

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

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

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

    注釈

    ガバナンスエリアにアクセスするには、次のいずれかを実行します。

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

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

      これらのデータベースロールの詳細については、 SNOWFLAKE データベースロール をご参照ください。

SQL によるタグのモニター

タグは、2つの異なるAccount Usageビュー、2つのInformation Schemaテーブル関数、Account Usageテーブル関数、およびシステム関数を使用して SQL によりモニターできます。

タグの使用状況をモニターする方法を決定するために、2つの一般的なアプローチを考えると役立つ場合があります。

タグを検出する

Snowflakeは、タグをリストし、特定のタグキーのタグ文字列値を識別するための次のオプションをサポートしています。

  • アカウント内のタグを特定します。

    共有 SNOWFLAKE データベースのAccount Usageスキーマで TAGS ビューを使用します。このビューは、Snowflakeアカウント内にあるすべてのタグの カタログ と見なすことができ、現在のタグと削除されたタグに関する情報を提供します。例:

    SELECT * FROM SNOWFLAKE.ACCOUNT_USAGE.TAGS
    ORDER BY TAG_NAME;
    
    Copy
  • 指定のタグの値を特定します。

    指定されたタグ、およびSnowflakeオブジェクトまたは列に割り当てられたタグ値を返すには、 SYSTEM$GET_TAG システム関数を使用します。

    SELECT SYSTEM$GET_TAG('cost_center', 'my_table', 'table');
    
    Copy

割り当てを識別する

Snowflakeは、クエリがアカウントまたは特定のデータベースをターゲットにする必要があるかどうか、またタグの系統が必要かどうかに応じて、タグの割り当てを識別するためのさまざまなオプションをサポートしています。

  • 系統のあるアカウントレベルのクエリ:

    Account Usageテーブル関数 TAG_REFERENCES_WITH_LINEAGE を使用して、特定のタグキーとタグ値を持ち、タグ系統も含む、すべてのオブジェクトを判別します。

    SELECT *
    FROM TABLE(
      snowflake.account_usage.tag_references_with_lineage(
        'my_db.my_schema.cost_center'
      )
    );
    
    Copy
  • 系統のないアカウントレベルのクエリ:

    Account Usage TAG_REFERENCES ビューを使用して、特定のタグキーとタグ値を持つが、タグ系統が含まれて いない、すべてのオブジェクトを判別します。

    SELECT * FROM snowflake.account_usage.tag_references
    ORDER BY TAG_NAME, DOMAIN, OBJECT_ID;
    
    Copy
  • 系統のあるデータベースレベルのクエリ:

    すべてのSnowflakeデータベースには Snowflake Information Schema が含まれています。Information Schemaテーブル関数 TAG_REFERENCES を使用して、特定のタグを持ち、特定のデータベース内でタグ系統も含む、すべてのオブジェクトを判別します。

    SELECT *
    FROM TABLE(
      my_db.INFORMATION_SCHEMA.TAG_REFERENCES(
        'my_table',
        'table'
      )
    );
    
    Copy
  • 系統のある、テーブルまたはビュー内の列すべてのタグすべてに対するデータベースレベルのクエリ:

    Information Schema関数 TAG_REFERENCES_ALL_COLUMNS を使用して、特定のテーブルまたはビューにあるすべての列に設定されているすべてのタグを取得します。

    オブジェクト名がビュー(つまり、ビュー、マテリアライズドビュー)であっても、ドメイン TABLE は列を含むすべてのオブジェクトに使用する 必要がある ことに注意してください。

    SELECT *
    FROM TABLE(
      INFORMATION_SCHEMA.TAG_REFERENCES_ALL_COLUMNS(
        'my_table',
        'table'
      )
    );
    
    Copy

Snowsight によるタグのモニター

Snowsight Monitoring » Governance 領域を使用すると、テーブル、ビュー、列でのポリシーとタグの使用状況をモニターし、レポートできます。 DashboardTagged Objects という2つの異なるインターフェイスがあります。

Dashboard および Tagged Objects インターフェイスを使用する場合は、次の詳細に注意してください。

  • Dashboard および Tagged Objects インターフェイスには稼働中のウェアハウスが必要です。

  • Snowsight は、 Dashboard を12時間ごとに更新します。

  • Tagged Objects 情報の遅延は最大2時間になる可能性があり、最大1000個のオブジェクトが返されます。

Snowsightのガバナンスエリアへのアクセス

Governance エリアにアクセスするには、Snowflakeアカウントが Enterprise Edition 以上 である必要があります。さらに、次のいずれかを実行する必要があります。

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

  • GOVERNANCE_VIEWER および OBJECT_VIEWER データベースロールが 直接 付与されているアカウントロールを使用します。

    これらのデータベースロール付与では、アカウントロールを 使用する必要があります。現在のところ、 Snowsight はテーブル、ビュー、データアクセスポリシー、タグにアクセスできるロール階層およびユーザー定義のデータベースロールを評価しません。

    アカウントロールにこれらの2つのデータベースロールが付与されているかどうかを確認するには、 SHOW GRANTS コマンドを使用します。

    SHOW GRANTS LIKE '%VIEWER%' TO ROLE data_engineer;
    
    Copy
    |-------------------------------+-----------+---------------+-----------------------------+------------+-----------------+--------------+------------|
    | created_on                    | privilege | granted_on    | name                        | granted_to | grantee_name    | grant_option | granted_by |
    |-------------------------------+-----------+---------------+-----------------------------+------------+-----------------+--------------+------------|
    | 2024-01-24 17:12:26.984 +0000 | USAGE     | DATABASE_ROLE | SNOWFLAKE.GOVERNANCE_VIEWER | ROLE       | DATA_ENGINEER   | false        |            |
    | 2024-01-24 17:12:47.967 +0000 | USAGE     | DATABASE_ROLE | SNOWFLAKE.OBJECT_VIEWER     | ROLE       | DATA_ENGINEER   | false        |            |
    |-------------------------------+-----------+---------------+-----------------------------+------------+-----------------+--------------+------------|
    

    アカウントロールにこれらのデータベースロールのいずれかまたは両方が付与されていない場合は、 GRANT DATABASE ROLE コマンドを使用し、 SHOW GRANTS コマンドを再度実行して付与を確認してください。

    USE ROLE ACCOUNTADMIN;
    GRANT DATABASE ROLE SNOWFLAKE.GOVERNANCE_VIEWER TO ROLE data_engineer;
    GRANT DATABASE ROLE SNOWFLAKE.OBJECT_VIEWER TO ROLE data_engineer;
    SHOW GRANTS LIKE '%VIEWER%' TO ROLE data_engineer;
    
    Copy

    これらのデータベースロールの詳細については、 SNOWFLAKE データベースロール をご参照ください。

ダッシュボード

データ管理者は、 Dashboard インターフェイスを使用して、次の方法でタグとポリシーの使用状況をモニターできます。

  • カバレッジ: テーブル、ビュー、または列にポリシーまたはタグがあるかどうかに基づいて、カウントとパーセンテージを指定します。

  • 普及率: 最も頻繁に使用されるポリシーとタグをリストし、カウントします。

カバレッジと普及率は、データがどの程度適切に保護され、タグ付けされているかに関するスナップショットを提供します。

カウント数、パーセンテージ、ポリシー名、またはタグ名を選択すると、 Tagged Objects インターフェイスが開きます。 Tagged Objects インターフェイスは、 Dashboard での選択に基づいてフィルターを自動的に更新します。

モニター情報は、複数のAccount Usageビューで複雑なクエリ集中型の操作を実行するための代替または補完です。

これらのビューには、 COLUMNSPOLICY_REFERENCESTABLESTAG_REFERENCES、および VIEWS ビューが含まれますが、これらに限定されません。

タグ付きオブジェクト

データ管理者は、このテーブルを使用して、 Dashboard のカバレッジと普及率を特定のテーブル、ビュー、または列のリストにすばやく関連付けることができます。次のようにテーブルの結果を手動でフィルターすることもできます。

  • Tables または Columns を選択します。

  • タグの場合は、タグあり、タグなし、または特定のタグでフィルターできます。

  • ポリシーの場合は、ポリシーあり、ポリシーなし、または特定のポリシーでフィルターできます。

テーブル内の行を選択すると、 Data » DatabasesTable Details または Columns タブが開きます。必要に応じて、タグとポリシーの割り当てを編集できます。

タグの管理

タグの権限

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

スキーマ内の任意のオブジェクトを操作するには、親データベースとスキーマに対する USAGE 権限も必要であることに注意してください。

権限

使用状況

CREATE

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

APPLY

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

OWNERSHIP

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

タグ DDL 参照

Snowflakeは、タグを作成および管理するために次の DDL をサポートしています。

Snowflakeは、タグオブジェクトの describe 操作をサポートしていないことに注意してください。

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

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

操作

必要な権限

テーブルの作成。

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

タグの変更。

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

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

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

タグの表示。

次のいずれか: . タグが存在するスキーマに対する USAGE 権限を持つロール、 または . ACCOUNT 許可で APPLY TAG 権限を持つロール。

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

個々のオブジェクトの場合、アカウントに対する APPLY TAG 権限、 または タグに対する APPLY TAG 権限と、タグが設定されているオブジェクトに対する OWNERSHIP 権限を持つロール。 サポートされているオブジェクト をご参照ください。

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

アカウントに対する APPLY TAG 権限を持つロール、 または タグに対する APPLY 権限とテーブルまたはビューに対する OWNERSHIP 権限を持つロール。

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

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

Snowflakeは、オブジェクトにタグを作成および設定するためのさまざまな権限をサポートしています。

  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