- カテゴリ:
GET_LINEAGE (SNOWFLAKE.CORE)¶
Snowflakeオブジェクトが指定された場合は、そのオブジェクトの上流または下流のデータ系統情報を返します。上流とは、そのオブジェクトが作成されるに至ったオブジェクトのパスを意味し、下流とは、そのオブジェクトから作成されたオブジェクトのパスを意味します。
構文¶
SNOWFLAKE.CORE.GET_LINEAGE(
'<object_name>',
'<object_domain>',
'<direction>',
[ <distance>, ]
[ '<object_version>' ]
)
引数¶
必須:
'object_name'
データ系統情報を取得するオブジェクトの名前。オブジェクトがセッションの現在のスキーマとは異なるスキーマにある場合は、完全修飾名を使用します。
'object_domain'
オブジェクトのドメイン。サポートされるドメインは「COLUMN」、「TABLE」(ビューや動的テーブルなどを含め、すべてのテーブル型オブジェクトを含む)、「STAGE」です。ML 系統の場合、特徴量ビュー(内部的に動的なテーブルとビュー)には
TABLE
を、モデルには「DATASET」または「MODULE」を使用します。'direction'
系統を保持する必要がある場合の方向性。サポートされている方向は「UPSTREAM」と「DOWNSTREAM」です。
オプション:
distance
検索する系統のレベル数。最大値は5で、これがデフォルトでもあります。
'object_version'
データセットやモデルなどのバージョン管理されたオブジェクトの場合は、系統を取得するオブジェクトのバージョン。指定がない場合は、デフォルトのバージョンが使用されます。
出力¶
出力は、系統パスのオブジェクト関係(つまり、系統グラフのエッジ)ごとに1行を持つテーブルです。関係は、各行でソースとターゲットとして指定されたオブジェクト間のものです。テーブルには、次の列が含まれています。
列 |
型 |
説明 |
---|---|---|
|
VARCHAR |
ソースオブジェクトを含むデータベース。 |
|
VARCHAR |
ソースオブジェクトを含むスキーマ。 |
|
VARCHAR |
ソースオブジェクトの非修飾名。 |
|
VARCHAR |
ターゲットオブジェクトのドメイン。指定できる値は「COLUMN」、「TABLE」、「DATASET」、「MODULE」(ML モデルの場合)、「STAGE」です。 |
|
VARCHAR |
データセットやモデルなどのバージョン管理されたオブジェクトの場合は、ソースオブジェクトのバージョン。ソースオブジェクトがバージョン管理されていない場合は NULL。 |
|
VARCHAR |
ソースオブジェクトが列の場合は、ソース列の名前。ソースオブジェクトが列でない場合は NULL。 |
|
VARCHAR |
ソースオブジェクトのステータス。可能な値は DELETED、 ACTIVE、および MASKED。 |
|
VARCHAR |
ターゲットオブジェクトを含むデータベース。 |
|
VARCHAR |
ターゲットオブジェクトを含むスキーマ。 |
|
VARCHAR |
ターゲットオブジェクトの非修飾名。 |
|
VARCHAR |
ターゲットオブジェクトのドメイン。指定できる値は「COLUMN」、「TABLE」、「DATASET」、「MODULE」(ML モデルの場合)、「STAGE」です。 |
|
VARCHAR |
データセットやモデルなどのバージョン管理されたオブジェクトの場合は、ターゲットオブジェクトのバージョン。ターゲットオブジェクトがバージョン管理されていない場合は NULL。 |
|
VARCHAR |
ターゲットオブジェクトが列の場合は、ターゲット列の名前。ターゲットオブジェクトが列でない場合は NULL。 |
|
VARCHAR |
ターゲットオブジェクトのステータス。可能な値は DELETED、 ACTIVE、および MASKED。 |
|
INTEGER |
系統パスにおけるターゲットオブジェクトのソースオブジェクトからの距離。直接関係は距離1。 |
使用上の注意¶
オブジェクトが存在しない場合、オブジェクトに現在のユーザーがアクセスできない場合、オブジェクトがデータ系統をサポートしていない場合、またはオブジェクトが指定されたドメインにない場合は、エラーメッセージが表示されます。
指定されたオブジェクトについて系統情報が利用できない場合、出力テーブルには行が含まれませんが、これはエラーではありません。
GET_LINEAGE
は、各行が系統グラフのエッジ(関係)を表す行を最大1,000万行返します。出力に1,000万行以上ある場合、関数は出力を1,000万行に警告なしで切り捨てます。
例¶
CREATE TABLE AS SELECT を使用して TABLE_A から TABLE_B という名前のテーブルを作成し、同様の方法で TABLE_B から TABLE_C という名前のテーブルを作成したとします。以下の SQL クエリは、 TABLE_A から下流の系統の2つのステップを検索します。
SELECT
DISTANCE,
SOURCE_OBJECT_DOMAIN,
SOURCE_OBJECT_DATABASE,
SOURCE_OBJECT_SCHEMA,
SOURCE_OBJECT_NAME,
SOURCE_STATUS,
TARGET_OBJECT_DOMAIN,
TARGET_OBJECT_DATABASE,
TARGET_OBJECT_SCHEMA,
TARGET_OBJECT_NAME,
TARGET_STATUS,
FROM TABLE (SNOWFLAKE.CORE.GET_LINEAGE('my_database.sch.table_a', 'TABLE', 'DOWNSTREAM', 2));
出力は以下のようになります。
+----------+----------------------+------------------------+----------------------+--------------------+---------------+----------------------+------------------------+----------------------+--------------------+---------------+
| DISTANCE | SOURCE_OBJECT_DOMAIN | SOURCE_OBJECT_DATABASE | SOURCE_OBJECT_SCHEMA | SOURCE_OBJECT_NAME | SOURCE_STATUS | TARGET_OBJECT_DOMAIN | TARGET_OBJECT_DATABASE | TARGET_OBJECT_SCHEMA | TARGET_OBJECT_NAME | TARGET_STATUS |
|----------+----------------------+------------------------+----------------------+--------------------+---------------+----------------------+------------------------+----------------------+--------------------+---------------|
| 1 | TABLE | MY_DATABASE | SCH | TABLE_A | ACTIVE | TABLE | MY_DATABASE | SCH | TABLE_B | ACTIVE |
| 2 | TABLE | MY_DATABASE | SCH | TABLE_B | ACTIVE | TABLE | MY_DATABASE | SCH | TABLE_C | ACTIVE |
+----------+----------------------+------------------------+----------------------+--------------------+---------------+----------------------+------------------------+----------------------+--------------------+---------------+