データ系統¶
Snowflakeは、データがソースオブジェクトからターゲットオブジェクトへ、例えばテーブルから表示へどのように流れるかを追跡し、オブジェクト内のデータがどこから来たのか、あるいはどこへ行くのかを確認することができます。この情報は data lineage と呼ばれ、Snowflakeオブジェクト間の関係を理解するのに役立ちます。
データ系統は2つのタイプの関係を捉えます:
あるオブジェクトから別のオブジェクトへのデータのコピーやマテリアライズなど、データの移動。例えば、 CREATE TABLE AS SELECT (CTAS)、 INSERT、 MERGE のようなテーブルに対する演算子はデータ移動になります。
オブジェクトの依存関係。オブジェクトがベースオブジェクトを参照するが、データを実体化したりコピーしたりしない場合(表示オブジェクトがテーブルを参照する場合など)。
Snowflakeデータリネージはこれらのメリットを提供します。
異なるオブジェクト間の関係を理解することにより、影響分析を提供します。
データ移動の系統とオブジェクト依存関係を表示することで、モニタリングとトラブルシューティングを強化します。
機密データの流れを追跡することで、コンプライアンスを促進します。
タグやマスキングポリシーを使って列を操作し、機密データを保護します。
ソースとターゲットのオブジェクトと列を理解することで、データの信頼性を高めます。
表示系統の管理者を委任することができます。詳細については、 系統情報のアクセス制御 をご参照ください。
上流と下流の関係について¶
データ系統は、ソース・オブジェクトとターゲット・オブジェクトの関係を理解するのに役立ちます。系統の用語では、ソースオブジェクトはターゲットオブジェクトの「上流にあり、ターゲットオブジェクトはソースオブジェクトの「下流」にあります。 Snowsight は、選択したオブジェクトの上流または下流に一歩ずつ、インクリメンタルにオブジェクトを明らかにしていきます。
例えば、この SQL ステートメントでは:
CREATE TABLE table2 AS SELECT col1 FROM table1;
table2
はターゲット・テーブルで、ソース・テーブルの table1
の下流です。テーブルで table1
に由来する列 col1
は、テーブル table2
に含まれています。これは下流のリネージ関係でもあります。
Snowsight のテーブル table1
の詳細を表示すると、 Lineage のタブに、 table1
から table2
を指す矢印が表示され、下流のリネージ関係が示されます。代わりにテーブル table2
から始めると、矢印は table2
の上流から table1
に向かいます。
始めましょう¶
Snowsight でデータ系統を使い始めるには、次のようにします。
必要な権限 で Snowsight にサインインしてください。
Data » Databases メニューを使用して、テーブルやビューなどの サポートされているオブジェクト を選択します。
Lineage タブを選択します。
Lineage タブの基本アクションは以下の通りです。
A. オブジェクトを選択すると、そのオブジェクトの列やタグなどの詳細が表示されます。
B. +/- を選択して、さらに上流または下流にあるオブジェクトを表示または非表示にします。
C. 2つのオブジェクトを接続する矢印を選択すると、下流のオブジェクトの作成方法に関する情報(例えば、オブジェクトを作成した SQL ステートメント)が表示されます。アクセス制御権限によって表示される情報が決まります。
D. 選択したオブジェクトの系統に焦点を当てた新しい系統図を開きます。
Lineage タブを使ったその他のアクションについては、以下をご参照ください。
列の系列¶
Snowsight を使って、ソースオブジェクトの列とターゲットオブジェクトの列の関係をトレースすることができます。ある列について、その列と系統を共有する上流および下流のすべての列を決定することができます。
列の血統を調べる:
Lineage タブを開き、トレースしたい列を含むオブジェクトを選択します。サイドパネルが開きます。
サイドパネルの列名にカーソルを合わせ、 View Lineage を選択します。
Upstream Lineage または Downstream Lineage を選択すると、上流または下流のオブジェクトの列がリストされます。
Distance を使用して、その列がどの程度の距離にあるのかを知ることができます。例えば、下流の距離が1の場合、列は現在のオブジェクトから直接作成されたオブジェクトの中にあります。下流の距離が2の場合、列は現在のオブジェクトから作成されたオブジェクトから作成されたオブジェクトに存在します。
マスキングポリシーの識別子¶
Lineage タブを開き、興味のあるオブジェクトを選択します。サイドパネルが開きます。
オブジェクトの列のマスキングポリシーを表示するには、 Columns セクションでその列を見つけます。列がマスキングポリシーで保護されている場合、列名の横にシンボルが表示されます。シンボルにカーソルを合わせると、マスキングポリシー名と詳細が表示されます。
マスキングポリシーに問題がある場合、例えば同じ列に複数のマスキングポリシーが割り当てられている場合、マスクシンボルの代わりに Policy Error が表示されます。 Policy Error にカーソルを合わせると、エラーの説明が表示されます。エラーの発生原因の特定については、 タグおよびポリシーの検出 および タグベースのマスキングポリシーをトラブルシューティングする を参照してください。
プログラムによる系統の取得¶
GET_LINEAGE (SNOWFLAKE.CORE) 関数を使用すると、プログラムで系統情報を取得できます。この関数は、 Snowsight の Lineage タブが提供する情報のサブセットを返します。
データ系統でサポートされる演算子¶
以下の演算子は、ソースオブジェクトとターゲットオブジェクトの間に上流と下流の関係を作成します。
CREATE TABLE...AS SELECT (CTAS)
例えは UPDATE があります。
UPDATE mydb.schema1.table1 FROM mydb.schema2.table2 SET table1.col1 = table2.col1;
サポートされているオブジェクト¶
データ系統は、 テーブルのようなオブジェクト 間のデータ移動と依存関係をサポートします。テーブルのような」オブジェクトとは、テーブルを含む、テーブルのようにクエリできるオブジェクトのことです(テーブルほどテーブル的なものはありません)。テーブルのようなオブジェクトは以下の通りです。
テーブル
動的テーブル
外部テーブル
Icebergテーブル
ビュー
マテリアライズドビュー
ステージングは、以下の機械学習オブジェクトのように、データの系統関係に参加することもできます。
Feature Views (実際にはSnowflake内の動的なテーブルまたはビューです)
列の系統は、任意の2つのテーブルのようなオブジェクトの列間でサポートされています。例えば、テーブルの列を選択すると、その列が表示される他のテーブルのようなオブジェクトを表示する、下流の列の系統を表示することができます。
さらに、タグとマスキングポリシーの管理権限を持つロールを使用している場合は、タグとマスキングポリシーの関連付けを確認できます。
ML 系統¶
ML Lineage は、単純な移動関係や依存関係ではなく、機械学習ワークフローでデータがどのように使用され、変換されるかに焦点を当てた機械学習関係を特にサポートします。以下のタイプのオブジェクト間の関係がサポートされています。
Feature Views (実際にはSnowflake内の動的テーブルまたはビューです)
系統情報のアクセス制御¶
以下の権限を持つロールは、 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;
系統は、バラバラのクエリ結果によるデータの移動を追跡することはできません。例えば、以下のクエリセットは、テーブル
sourceTable1
からテーブルtarget_table
への系統の結果に なりません。SET read_output1 = (SELECT c1 FROM sourceTable1); INSERT INTO target_table(c1) VALUES ($read_output1);