Unity Catalogを使用してデータリネージを表示
この記事では、Catalog Explorer、データリネージ システムテーブル、および REST APIを使用してデータリネージを視覚化する方法について説明します。
データリネージの概要
Unity Catalog は、 Databricksで実行されるクエリ間でランタイム データリネージをキャプチャします。 リネージはすべての言語でサポートされており、列レベルまでキャプチャされます。 リネージデータには、クエリに関連するノートブック、ジョブ、ダッシュボードが含まれます。 リネージは、カタログエクスプローラーでリアルタイムに近い状態で視覚化し、リネージシステムテーブルと Databricks REST APIを使用してプログラムで取得できます。
リネージは、 Unity Catalog メタストアにアタッチされているすべてのワークスペース全体で集計されます。 つまり、1つのワークスペースでキャプチャされたリネージは、そのメタストアを共有する他のワークスペースで見ることができます。 具体的には、メタストアに登録されているテーブルやその他のデータ オブジェクトは、メタストアに接続されているすべてのワークスペースで、それらのオブジェクトに対して少なくとも BROWSE
のアクセス許可を持つユーザーに表示されます。ただし、ノートブックや他のワークスペースのダッシュボードなど、ワークスペースレベルのオブジェクトに関する詳細な情報はマスクされます ( 「リネージの制限事項 」および 「リネージの権限」を参照してください)。
リネージデータは 1 年間保持されます。
次の図はリネージグラフのサンプルです。
機械学習モデルのリネージの追跡に関する情報については、Unity Catalogでのモデルのデータリネージの追跡を参照してください。
必要条件
Unity Catalogを使用してデータリネージをキャプチャするには:
- テーブルは Unity Catalog メタストアに登録する必要があります。
- クエリでは、Spark DataFrame (DataFrame を返す Spark SQL 関数など) または Databricks SQL インターフェイス (ノートブックや SQL クエリ エディターなど) を使用する必要があります。
データリネージを表示するには:
- 少なくとも、テーブルまたはビューの親カタログに対する
BROWSE
権限が必要です。親カタログは、ワークスペースからもアクセスできる必要があります。「 カタログへのアクセスを特定のワークスペースに制限する」を参照してください。 - ノートブック、ジョブ、またはダッシュボードの場合、ワークスペースのアクセス制御設定で定義されているこれらのオブジェクトに対するアクセス許可が必要です。詳細については、「 リネージ権限」を参照してください。
- Unity Catalog 対応パイプラインの場合は、パイプラインに対する CAN VIEW アクセス許可が必要です。
コンピュートの要件:
- Deltaテーブル間でのストリーミングのリネージトラッキングにはDatabricks Runtime11.3LTS以上が必要です。
- DLTワークロードのカラムリネージトラッキングには Databricks Runtime 13.3 LTS 以上が必要です。
ネットワーク要件:
- Databricks コントロールプレーンで Amazon Kinesis エンドポイントに接続できるように、アウトバウンドファイアウォールルールの更新が必要になる場合があります。 通常、これは、Databricks ワークスペースが独自の VPC にデプロイされている場合、または Databricks ネットワーク環境内で AWS PrivateLink を使用している場合に適用されます。 ワークスペースリージョンの Kinesis エンドポイントを取得するには、 Kinesis アドレスを参照してください。 顧客管理VPCの構成およびAWS PrivateLink を使用してプライベート接続を有効にするも参照してください。
カタログエクスプローラーを使用したデータリネージの表示
カタログエクスプローラを使用してテーブルリネージを表示するには:
-
Databricks ワークスペースで、
カタログ をクリックします。
-
テーブルを検索または参照します。
-
「リネージュ 」タブを選択します。リネージパネルが表示され、関連テーブルが表示されます。
-
データリネージのインタラクティブグラフを表示するには、 リネージグラフを見る をクリックします。
デフォルトでは、グラフには 1 つのレベルが表示されます。 ノード上の
アイコンをクリックすると、使用可能な接続がある場合は、さらに多くの接続が表示されます。
-
リネージグラフ内のノードを接続する矢印をクリックして、 リネージ接続 パネルを開きます。
リネージ接続 パネルには、ソース・テーブルとターゲット・テーブル、ノートブック、ジョブなど、接続に関する詳細が表示されます。
-
テーブルに関連付けられたノートブックを表示するには、 リネージ接続 パネルでノートブックを選択するか、リネージグラフを閉じて [ノートブック ]をクリックします。
ノートブックを新しいタブで開くには、ノートブック名をクリックします。
-
列レベルのリネージを表示するには、グラフ内の列をクリックして、関連する列へのリンクを表示します。 たとえば、このサンプル グラフの
full_menu
列をクリックすると、列の派生元であるアップストリーム列が表示されます。
View ワークフロー (ジョブ) リネージ
ワークフロー リネージを表示するには、テーブルの リネージ タブに移動し、[ ワークフロー ] をクリックして [ ダウンストリーム ] タブを選択します。 ジョブ名は、テーブルのコンシューマとして [ジョブ名 ] の下に表示されます。
ダッシュボードの表示 リネージ
ダッシュボードリネージを表示するには、テーブルの リネージ タブに移動し、[ ダッシュボード] をクリックします。 ダッシュボードは、テーブルのコンシューマとして [ダッシュボード名 ] の下に表示されます。
Databricks Assistantを使用してテーブルリネージを取得する
Databricks Assistant では、テーブルリネージと知見について詳しい情報を掲載しています。
アシスタントを使用してリネージ情報を取得するには:
- ワークスペースのサイドバーで、「
カタログ 」をクリックします。
- カタログを参照または検索し、カタログ名をクリックしてから、右上隅にある
アシスタント アイコンをクリックします。
- アシスタントのプロンプトで、次のように入力します。
- /getTableLineages を使用して、アップストリームとダウンストリームの依存関係を表示します。
- /getTableInsights を使用して、ユーザー アクティビティやクエリ パターンなどのメタデータ駆動型の知見にアクセスできます。
これらのクエリにより、Assistant は "ダウンストリーム リネージを表示する" や "このテーブルに対して最も頻繁にクエリを実行するユーザー" などの質問に答えることができます。
システムテーブルを用いたリネージのクエリー
リネージ システムテーブルを使用して、プログラムでリネージ データをクエリできます。 詳細な手順については、 システムテーブルを使用したアカウントアクティビティの監視 および リネージ システムテーブルリファレンスを参照してください。
ワークスペースがリネージ システムテーブルをサポートしていないリージョンにある場合は、代わりにデータ リネージ REST API を使用して、プログラムでリネージ データを取得できます。
データリネージ REST APIを使用してリネージを取得する
データリネージ API は、テーブルとカラムのリネージを取得することができます。 ただし、ワークスペースがリネージ システムテーブルをサポートするリージョンにある場合は、 REST APIの代わりにシステムテーブルクエリを使用する必要があります。 システムテーブルは、リネージデータをプログラムで取得するためのより良いオプションです。 ほとんどの地域でリネージ システムテーブルがサポートされています。
Databricks REST APIsにアクセスするには、認証が必要です。
テーブルリネージの取得
この例では、 dinner
テーブルのリネージ データを取得します。
依頼
curl --netrc -X GET \
-H 'Content-Type: application/json' \
https://<workspace-instance>/api/2.0/lineage-tracking/table-lineage \
-d '{"table_name": "lineage_data.lineagedemo.dinner", "include_entity_lineage": true}'
<workspace-instance>
を置き換えてください。
この例では、 .netrc ファイル。
応答
{
"upstreams": [
{
"tableInfo": {
"name": "menu",
"catalog_name": "lineage_data",
"schema_name": "lineagedemo",
"table_type": "TABLE"
},
"notebookInfos": [
{
"workspace_id": 4169371664718798,
"notebook_id": 1111169262439324
}
]
}
],
"downstreams": [
{
"notebookInfos": [
{
"workspace_id": 4169371664718798,
"notebook_id": 1111169262439324
}
]
},
{
"tableInfo": {
"name": "dinner_price",
"catalog_name": "lineage_data",
"schema_name": "lineagedemo",
"table_type": "TABLE"
},
"notebookInfos": [
{
"workspace_id": 4169371664718798,
"notebook_id": 1111169262439324
}
]
}
]
}
カラムリネージの取得
この例では、 dinner
テーブルの列データを取得します。
依頼
curl --netrc -X GET \
-H 'Content-Type: application/json' \
https://<workspace-instance>/api/2.0/lineage-tracking/column-lineage \
-d '{"table_name": "lineage_data.lineagedemo.dinner", "column_name": "dessert"}'
<workspace-instance>
を置き換えてください。
この例では、 .netrc ファイル。
応答
{
"upstream_cols": [
{
"name": "dessert",
"catalog_name": "lineage_data",
"schema_name": "lineagedemo",
"table_name": "menu",
"table_type": "TABLE"
},
{
"name": "main",
"catalog_name": "lineage_data",
"schema_name": "lineagedemo",
"table_name": "menu",
"table_type": "TABLE"
},
{
"name": "app",
"catalog_name": "lineage_data",
"schema_name": "lineagedemo",
"table_name": "menu",
"table_type": "TABLE"
}
],
"downstream_cols": [
{
"name": "full_menu",
"catalog_name": "lineage_data",
"schema_name": "lineagedemo",
"table_name": "dinner_price",
"table_type": "TABLE"
}
]
}
リネージの権限
リネージグラフは、 と同じ 許可モデルUnity Catalogを共有しています。Unity Catalog メタストアに登録されているテーブルやその他のデータ オブジェクトは、それらのオブジェクトに対して少なくとも BROWSE
のアクセス許可を持つユーザーにのみ表示されます。 ユーザーがテーブルに対する BROWSE
権限または SELECT
権限を持っていない場合、そのリネージを探索できません。 リネージ グラフには、ユーザーが適切なオブジェクト アクセス許可を持っている限り、メタストアに接続されているすべてのワークスペースの Unity Catalog オブジェクトが表示されます。
たとえば、次のコマンドを実行します userA
:
GRANT USE SCHEMA on lineage_data.lineagedemo to `userA@company.com`;
GRANT SELECT on lineage_data.lineagedemo.menu to `userA@company.com`;
userA``lineage_data.lineagedemo.menu
テーブルのリネージグラフを表示すると、menu
テーブルが表示されます。ダウンストリーム lineage_data.lineagedemo.dinner
テーブルなど、関連付けられたテーブルに関する情報は表示できません。 dinner
テーブルは、userA
への表示でmasked
ノードとして表示されuserA
アクセス権限のないテーブルからグラフを展開してダウンストリームテーブルを表示することはできません。
次のコマンドを実行して、 BROWSE
にパーミッションを userB
に付与すると、そのユーザーは lineage_data
スキーマ内の任意のテーブルのリネージグラフを表示できます。
GRANT BROWSE on lineage_data to `userB@company.com`;
同様に、リネージユーザーは、ノートブック、ジョブ、ダッシュボードなどのワークスペースオブジェクトを表示するための特定の権限を持っている必要があります。 また、ワークスペースオブジェクトに関する詳細情報を表示できるのは、そのオブジェクトが作成されたワークスペースにログインしている場合のみです。 他のワークスペース内のワークスペースレベルのオブジェクトに関する詳細な情報は、リネージグラフではマスクされます。
Unity Catalogでのセキュリティ保護可能なオブジェクトへのアクセスの管理の詳細については、Unity Catalogでの特権の管理を参照してください。ノートブック、ジョブ、ダッシュボードなどのワークスペースオブジェクトへのアクセスの管理の詳細については、アクセス制御リストを参照してください。
リネージュの制限
データリネージには、以下の制限があります。
-
リネージは、同じ Unity Catalog メタストアにアタッチされているすべてのワークスペースに対して集約されますが、ノートブックやダッシュボードなどのワークスペース オブジェクトの詳細は、それらが作成されたワークスペースにのみ表示されます。
-
リネージは1年ローリングウィンドウでコンピュートされているため、1年以上前に収集されたリネージは表示されません。 たとえば、ジョブまたはクエリがテーブル A からデータを読み取り、テーブル B に書き込む場合、テーブル A とテーブル B の間のリンクは 1 年間だけ表示されます。 1年間の期間でリネージデータをフィルタリングできます。
-
Jobs API
runs submit
リクエストを使用するジョブは、リネージュビューでは使用できません。テーブル・レベルと列レベルのリネージは、ジョブがruns submit
要求を使用する場合でもキャプチャーされますが、実行へのリンクはキャプチャーされません。 -
テーブルまたはビューの名前が変更された場合、名前が変更されたテーブルまたはビューのリネージはキャプチャされません。
-
スキーマまたはカタログの名前が変更された場合、名前が変更されたカタログまたはスキーマの下のテーブルおよびビューのリネージはキャプチャされません。
-
Spark SQLデータセットのチェックポイント設定を使用すると、リネージはキャプチャされません。
-
Unity Catalog は、ほとんどの場合 DLT パイプラインからリネージをキャプチャします。 ただし、場合によっては、パイプラインが APPLY CHANGES API または PRIVATE テーブルを使用する場合など、完全なリネージ カバレッジを保証できない場合があります。
-
リネージは スタック関数をキャプチャしません。
-
グローバル一時ビューはリネージにキャプチャされません。
-
system.information_schema
未満のテーブルはリネージにキャプチャされません。 -
Unity Catalog は、リネージを可能な限りカラムレベルまでキャプチャします。 ただし、列レベルのリネージがキャプチャできない場合があります。 これには、次のものが含まれます。
-
ソースまたはターゲットがパスとして参照されている場合、カラムリネージはキャプチャできません(例:
select * from delta."s3://<bucket>/<path>"
)。 カラムリネージは、ソースとターゲットの両方がテーブル名で参照されている場合にのみサポートされます (例:select * from <catalog>.<schema>.<table>
)。 -
完全な列レベルのリネージは、
MERGE
操作のためにデフォルトによってキャプチャされません。MERGE
操作のリネージキャプチャをオンにするには、 Spark プロパティのspark.databricks.dataLineage.mergeIntoV2Enabled
をtrue
に設定します。 このフラグを有効にすると、特に非常に幅の広いテーブルを含むワークロードで、クエリのパフォーマンスが低下する可能性があります。
-