データ系統

Snowflakeは、データがソースオブジェクトからターゲットオブジェクトへ、例えばテーブルから表示へどのように流れるかを追跡し、オブジェクト内のデータがどこから来たのか、あるいはどこへ行くのかを確認することができます。この情報は data lineage と呼ばれ、Snowflakeオブジェクト間の関係を理解するのに役立ちます。

データ系統は2つのタイプの関係を捉えます:

  • あるオブジェクトから別のオブジェクトへのデータのコピーやマテリアライズなど、データの移動。例えば、 CREATE TABLE AS SELECT (CTAS)、 INSERT、 MERGE のようなテーブルに対する演算子はデータ移動になります。

  • オブジェクトの依存関係。オブジェクトがベースオブジェクトを参照するが、データを実体化したりコピーしたりしない場合(表示オブジェクトがテーブルを参照する場合など)。

Snowflakeデータリネージはこれらのメリットを提供します。

  • 異なるオブジェクト間の関係を理解することにより、影響分析を提供します。

  • データ移動の系統とオブジェクト依存関係を表示することで、モニタリングとトラブルシューティングを強化します。

  • 機密データの流れを追跡することで、コンプライアンスを促進します。

  • タグやマスキングポリシーを使って列を操作し、機密データを保護します。

  • ソースとターゲットのオブジェクトと列を理解することで、データの信頼性を高めます。

  • 表示系統の管理者を委任することができます。詳細については、 系統情報のアクセス制御 をご参照ください。

上流と下流の関係について

データ系統は、ソース・オブジェクトとターゲット・オブジェクトの関係を理解するのに役立ちます。系統の用語では、ソースオブジェクトはターゲットオブジェクトの「上流にあり、ターゲットオブジェクトはソースオブジェクトの「下流」にあります。 Snowsight は、選択したオブジェクトの上流または下流に一歩ずつ、インクリメンタルにオブジェクトを明らかにしていきます。

例えば、この SQL ステートメントでは:

CREATE TABLE table2 AS SELECT col1 FROM table1;
Copy

table2 はターゲット・テーブルで、ソース・テーブルの table1 の下流です。テーブルで table1 に由来する列 col1 は、テーブル table2 に含まれています。これは下流のリネージ関係でもあります。

Snowsight のテーブル table1 の詳細を表示すると、 Lineage のタブに、 table1 から table2 を指す矢印が表示され、下流のリネージ関係が示されます。代わりにテーブル table2 から始めると、矢印は table2 の上流から table1 に向かいます。

始めましょう

Snowsight でデータ系統を使い始めるには、次のようにします。

  1. 必要な権限 で Snowsight にサインインしてください。

  2. Data » Databases メニューを使用して、テーブルやビューなどの サポートされているオブジェクト を選択します。

  3. Lineage タブを選択します。

Lineage タブの基本アクションは以下の通りです。

Snowsightのデータラインナップのスクリーンショット例
  • A. オブジェクトを選択すると、そのオブジェクトの列やタグなどの詳細が表示されます。

  • B. +/- を選択して、さらに上流または下流にあるオブジェクトを表示または非表示にします。

  • C. 2つのオブジェクトを接続する矢印を選択すると、下流のオブジェクトの作成方法に関する情報(例えば、オブジェクトを作成した SQL ステートメント)が表示されます。アクセス制御権限によって表示される情報が決まります。

  • D. 選択したオブジェクトの系統に焦点を当てた新しい系統図を開きます。

Lineage タブを使ったその他のアクションについては、以下をご参照ください。

列の系列

Snowsight を使って、ソースオブジェクトの列とターゲットオブジェクトの列の関係をトレースすることができます。ある列について、その列と系統を共有する上流および下流のすべての列を決定することができます。

列の血統を調べる:

  1. Lineage タブを開き、トレースしたい列を含むオブジェクトを選択します。サイドパネルが開きます。

  2. サイドパネルの列名にカーソルを合わせ、 View Lineage を選択します。

  3. Upstream Lineage または Downstream Lineage を選択すると、上流または下流のオブジェクトの列がリストされます。

    Distance を使用して、その列がどの程度の距離にあるのかを知ることができます。例えば、下流の距離が1の場合、列は現在のオブジェクトから直接作成されたオブジェクトの中にあります。下流の距離が2の場合、列は現在のオブジェクトから作成されたオブジェクトから作成されたオブジェクトに存在します。

タグを使った作業

Lineage タブでは、統合されたガバナンスエクスペリエンスが提供され、同じワークフロー内で列の系統表示、タグが必要な列の識別子、新しいタグの適用を行うことができます。

タグを表示および適用できるかどうかは、 Lineage タブを表示するために使用しているロールのアクセス制御権限に依存します。タグを扱うために必要な権限に関する情報は、 DDL コマンド、操作、および権限の概要 をご参照ください。

オブジェクトとその列のタグの検索

  1. Lineageタブを開き、興味のあるオブジェクトを選択します。サイドパネルが開きます。

  2. オブジェクト自体のタグを表示するには、サイドパネルの Details セクションを見ます。

  3. オブジェクトの列のタグを表示するには、 Columns セクションでその列を見つけます。タグがある場合は、列名の横にタグのマークが表示されます。シンボルにカーソルを合わせると、タグ名と値が表示されます。

タグの欠落や誤ったタグ値の識別子と修正

ある列にタグがあれば、その列と系統を共有する上流の列や下流の列にも同じタグが適用される可能性が高いです。同様に、上流の列と下流の列のタグの値は同じである必要があります。

データ系統ワークフローでは、上流および下流の列で欠落しているタグや、値が異なるタグを識別します。そして、足りないタグを適用したり、列のタグ値を変更したりするのに役立ちます。

  1. Lineage タブを開き、トレースしたい列を含むオブジェクトを選択します。サイドパネルが開きます。

  2. サイドパネルの列名にカーソルを合わせ、 View Lineage を選択します。

  3. View Column Lineage ダイアログで、 Downstream Lineage または Upstream Lineage を選択します。

    ダウンストリームまたはアップストリームの列にタグがない場合、またはタグの値が不一致の場合、バナーが表示されます。 Tags 列の色分けを使って、タグの何が問題なのかを特定することができます。

    • タグに破線の枠線がある場合、列にはそのタグは適用されません。

    • タグに黄色の枠線がある場合、タグの値は一致しません。

  4. このようなタグの欠落や不一致を改善するには、次のようにしてください。

    1. Review and Apply を選択します。

    2. 提案された変更を受け入れることを確認したら、 Apply を選択します。

マスキングポリシーの識別子

  1. Lineage タブを開き、興味のあるオブジェクトを選択します。サイドパネルが開きます。

  2. オブジェクトの列のマスキングポリシーを表示するには、 Columns セクションでその列を見つけます。列がマスキングポリシーで保護されている場合、列名の横にシンボルが表示されます。シンボルにカーソルを合わせると、マスキングポリシー名と詳細が表示されます。

    マスキングポリシーに問題がある場合、例えば同じ列に複数のマスキングポリシーが割り当てられている場合、マスクシンボルの代わりに Policy Error が表示されます。 Policy Error にカーソルを合わせると、エラーの説明が表示されます。エラーの発生原因の特定については、 タグおよびポリシーの検出 および タグベースのマスキングポリシーをトラブルシューティングする を参照してください。

プログラムによる系統の取得

GET_LINEAGE (SNOWFLAKE.CORE) 関数を使用すると、プログラムで系統情報を取得できます。この関数は、 Snowsight の Lineage タブが提供する情報のサブセットを返します。

データ系統でサポートされる演算子

以下の演算子は、ソースオブジェクトとターゲットオブジェクトの間に上流と下流の関係を作成します。

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

データ系統は、 テーブルのようなオブジェクト 間のデータ移動と依存関係をサポートします。テーブルのような」オブジェクトとは、テーブルを含む、テーブルのようにクエリできるオブジェクトのことです(テーブルほどテーブル的なものはありません)。テーブルのようなオブジェクトは以下の通りです。

  • テーブル

  • 動的テーブル

  • 外部テーブル

  • Icebergテーブル

  • ビュー

  • マテリアライズドビュー

ステージングは、以下の機械学習オブジェクトのように、データの系統関係に参加することもできます。

列の系統は、任意の2つのテーブルのようなオブジェクトの列間でサポートされています。例えば、テーブルの列を選択すると、その列が表示される他のテーブルのようなオブジェクトを表示する、下流の列の系統を表示することができます。

さらに、タグとマスキングポリシーの管理権限を持つロールを使用している場合は、タグとマスキングポリシーの関連付けを確認できます。

ML 系統

ML Lineage は、単純な移動関係や依存関係ではなく、機械学習ワークフローでデータがどのように使用され、変換されるかに焦点を当てた機械学習関係を特にサポートします。以下のタイプのオブジェクト間の関係がサポートされています。

系統情報のアクセス制御

以下の権限を持つロールは、 Lineage タブにアクセスし、オブジェクトの上流および下流の系統オブジェクトと依存関係を表示できます:

  • アカウントに対する VIEW LINEAGE。

  • テーブルの SELECT など、リネージを評価したいオブジェクトの権限。

  • そのオブジェクトを含むデータベースとスキーマの USAGE

VIEW LINEAGE 権限は、ユーザーがオブジェクトのデータ系統を表示できるかどうかを制御します。既定のロール (PUBLIC) にはこの権限が与えられています。つまり、すべての人に表示権限があるということです。系統を表示できる人を絞り込むには、 PUBLIC ロールから VIEW LINEAGE 権限を取り消し、代わりにカスタムロールに付与します。

ユーザーが系統グラフの上流または下流のオブジェクトに対して権限を持っていない場合、オブジェクトは灰色で表示され、オブジェクトを表示するには権限が不足しているというメッセージが表示されます。グレーのオブジェクトは、系統グラフの終端ノードを意味するのではなく、単にユーザーがそのオブジェクトの系統を取得する権限を持っていないため、そのポイントより上流または下流の系統を表示できないことを示します。この動作は、他のアクセスポリシーで保護されているオブジェクトや列にも適用されます。

ターゲットオブジェクトを生成した SQL ステートメントを見るには、ユーザーに QUERY_HISTORY ビュー にアクセスする権限が必要です。

ユーザーがすべてのオブジェクトの系統を表示できるようにします。

ロールがオブジェクト、データベース、スキーマに対する権限を持っていなくても、系統内のすべてのオブジェクトを表示するように構成することができます。例えば、 GRANT RESOLVE ALL ON ACCOUNT TO ROLE lineage_role; のように、ロールにアカウントの RESOLVE ALL 権限を付与するだけです。このロールには VIEW LINEAGE 権限が必要です。

テーブルノードの名前変更と削除

名前変更されたテーブルはグラフに表示されますが、削除されたテーブルは表示されません。

系統履歴と保持

系統がSnowflakeに導入されたのは2024年11月。系統情報は以下の通り:

  • この日付より前に発生したオブジェクト依存関係 (例えば、テーブルをベースとするビュー) の系統は、利用可能 です

  • この日付より前に発生したデータ移動(たとえば、 CTAS ステートメントを使用して別のテーブルからテーブルを作成する)の系統は、利用 できません

過去の情報は以下の通りです。

  • 列は1年間保持されます。

  • オブジェクトのリネージは1年間保持されます。

制限と考慮事項

  • 系統は以下の種類のオブジェクトでは利用可能ではありません。

    • 共有データベース内のオブジェクト。

    • 共有 SNOWFLAKE データベース内のオブジェクト。

    • データベースの INFORMATION_SCHEMA にあるオブジェクト。

  • 動的テーブルは他のオブジェクトのリネージ・グラフに表示されますが、 Lineage タブは動的テーブル自体には表示されません。

  • テーブルから下流オブジェクトにデータが移動しなかった場合、フィルタリングや結合に使用されたテーブルは系統に含まれません。以下の例では、テーブル t2 はテーブル target_table の系統の一部とは見なされません:

    CREATE TABLE target_table AS
      SELECT t1.c1, t1.c2
        FROM t1, t2
        WHERE t1.c3 = t2.c3;
    
    Copy
  • 系統は、バラバラのクエリ結果によるデータの移動を追跡することはできません。例えば、以下のクエリセットは、テーブル sourceTable1 からテーブル target_table への系統の結果に なりません

    SET read_output1 = (SELECT c1 FROM sourceTable1);
    
    INSERT INTO target_table(c1) VALUES ($read_output1);
    
    Copy