メインコンテンツまでスキップ

Unity Catalog を使用したデータリネージのキャプチャと表示

この記事では、Catalog Explorer、データリネージ システムテーブル、および REST APIを使用してデータリネージをキャプチャして視覚化する方法について説明します。

Unity Catalog を使用して、Databricksで実行されるクエリ間でランタイム データリネージをキャプチャできます。リネージはすべての言語でサポートされており、列レベルまでキャプチャされます。 リネージデータには、クエリに関連するノートブック、ジョブ、ダッシュボードが含まれます。 リネージは、カタログエクスプローラーでリアルタイムに近い状態で視覚化し、リネージシステムテーブルと Databricks REST APIを使用してプログラムで取得できます。

リネージは、 Unity Catalog メタストアにアタッチされているすべてのワークスペース全体で集計されます。 つまり、1つのワークスペースでキャプチャされたリネージは、そのメタストアを共有する他のワークスペースで見ることができます。 具体的には、メタストアに登録されているテーブルやその他のデータ オブジェクトは、メタストアに接続されているすべてのワークスペースで、それらのオブジェクトに対して少なくとも BROWSE のアクセス許可を持つユーザーに表示されます。 ただし、ノートブックや他のワークスペースのダッシュボードなど、ワークスペースレベルのオブジェクトに関する詳細な情報はマスクされます ( 制限事項リネージのアクセス許可を参照)。

リネージデータは 1 年間保持されます。

次の図はリネージグラフのサンプルです。 特定のデータリネージ機能と例については、この記事の後半で説明します。

リネージの概要。

機械学習モデルのリネージの追跡に関する情報については、Unity Catalogでのモデルのデータリネージの追跡を参照してください。

必要条件

Unity Catalogを使用してデータリネージをキャプチャするには、次のものが必要です。

  • ワークスペースで Unity Catalog が有効になっている必要があります。

  • テーブルは Unity Catalog メタストアに登録する必要があります。

  • クエリでは、Spark DataFrame (DataFrame を返す Spark SQL 関数など) または Databricks SQL インターフェイスを使用する必要があります。 Databricks SQL クエリと PySpark クエリの例については、を参照してください。

  • テーブルまたはビューのリネージを表示するには、ユーザーは少なくともテーブルまたはビューの親カタログに対する 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 を使用してプライベート接続を有効にするも参照してください。

注記
  • 次の例では、カタログ名 lineage_data とスキーマ名 lineagedemo を使用しています。 別のカタログとスキーマを使用するには、例で使われている名前を変更してください。

  • この例を完了するには、スキーマに対する CREATE 権限と USE SCHEMA 権限が必要です。 メタストア管理者、カタログ所有者、スキーマ所有者、またはスキーマに対する MANAGE 権限を持つユーザーは、これらの権限を付与できます。 たとえば、グループ 'data_engineers' 内のすべてのユーザーに、lineage_data カタログの lineagedemo スキーマにテーブルを作成する権限を付与するには、上記のいずれかの権限またはロールを持つユーザーが次のクエリを実行できます。

    SQL
    CREATE SCHEMA lineage_data.lineagedemo;
    GRANT USE SCHEMA, CREATE on SCHEMA lineage_data.lineagedemo to `data_engineers`;

リネージのキャプチャと探索

リネージデータをキャプチャーするには:

  1. Databricksランディングページに移動し、サイドバーの 新しいアイコン 新規 をクリックして、メニューから ノートブック を選択します。

  2. ノートブックの名前を入力し、 デフォルト言語SQL を選択します。

  3. クラスター で、 Unity Catalogにアクセスできるクラスターを選択します。

  4. 作成 をクリックします。

  5. 最初のノートブックセルに、次のクエリを入力します。

    SQL
    CREATE TABLE IF NOT EXISTS
    lineage_data.lineagedemo.menu (
    recipe_id INT,
    app string,
    main string,
    dessert string
    );

    INSERT INTO lineage_data.lineagedemo.menu
    (recipe_id, app, main, dessert)
    VALUES
    (1,"Ceviche", "Tacos", "Flan"),
    (2,"Tomato Soup", "Souffle", "Creme Brulee"),
    (3,"Chips","Grilled Cheese","Cheesecake");

    CREATE TABLE
    lineage_data.lineagedemo.dinner
    AS SELECT
    recipe_id, concat(app," + ", main," + ",dessert)
    AS
    full_menu
    FROM
    lineage_data.lineagedemo.menu
  6. クエリを実行するには、セルをクリックして Shift+Enter キーを押すか、 実行メニュー をクリックして セルの実行 を選択します。

Catalog Explorer を使用して、これらのクエリによって生成されたリネージを表示するには:

  1. Databricks ワークスペースの上部バーにある 検索 ボックスで、 lineage_data.lineagedemo.dinner テーブルを検索して選択します。

  2. 依存関係 タブを選択します。リネージパネルが表示され、関連テーブルが表示されます(この例では、 menu テーブルです)。

  3. データリネージのインタラクティブグラフを表示するには、 リネージグラフを見る をクリックします。 デフォルトでは、グラフには 1 つのレベルが表示されます。 ノード上の プラス記号アイコン アイコンをクリックすると、使用可能な接続がある場合は、さらに多くの接続が表示されます。

  4. リネージグラフ内のノードを接続する矢印をクリックして、 リネージ接続 パネルを開きます。 リネージ接続 パネルには、ソース・テーブルとターゲット・テーブル、ノートブック、ジョブなど、接続に関する詳細が表示されます。

    リネージグラフ。

  5. dinnerテーブルに関連付けられたノートブックを表示するには、 リネージ接続 パネルでノートブックを選択するか、リネージグラフを閉じ てノートブックをクリックします 。ノートブックを新しいタブで開くには、ノートブック名をクリックします。

  6. 列レベルのリネージを表示するには、グラフ内の列をクリックして、関連する列へのリンクを表示します。 たとえば、[full_menu] 列をクリックすると、列の派生元であるアップストリーム列が表示されます。

    フルメニューコラムリネージ。

リネージを別の言語(例 Python)で表示するには:

  1. 前に作成したノートブックを開き、新しいセルを作成して、次の Python コードを入力します。

    Python
    %python
    from pyspark.sql.functions import rand, round
    df = spark.range(3).withColumn("price", round(10*rand(seed=42),2)).withColumnRenamed("id","recipe_id")

    df.write.mode("overwrite").saveAsTable("lineage_data.lineagedemo.price")

    dinner = spark.read.table("lineage_data.lineagedemo.dinner")
    price = spark.read.table("lineage_data.lineagedemo.price")

    dinner_price = dinner.join(price, on="recipe_id")
    dinner_price.write.mode("overwrite").saveAsTable("lineage_data.lineagedemo.dinner_price")
  2. セル内をクリックして Shift+Enter キーを押すか、実行メニュー をクリックして [セルの実行] を選択して、セルを実行します。

  3. Databricks ワークスペースの上部バーにある 検索 ボックスで、 lineage_data.lineagedemo.price テーブルを検索して選択します。

  4. 依存関係 タブに移動し、 リネージグラフを表示 をクリックします。プラス記号アイコンアイコンをクリックして、クエリによって生成されたデータリネージを探索します。

    リネージグラフを拡張しました。

  5. リネージグラフ内のノードを接続する矢印をクリックして、 リネージ接続 パネルを開きます。 リネージ接続 パネルには、ソース・テーブルとターゲット・テーブル、ノートブック、ジョブなど、接続に関する詳細が表示されます。

ワークフローのリネージをキャプチャして表示する

リネージは、 Unity Catalogに対して読み取りまたは書き込みを行うすべてのワークフローに対してもキャプチャされます。 Databricksワークフローのリネージを表示するには:

  1. サイドバーの 新しいアイコン 新規 をクリックし メニューから ノートブック を選択します。

  2. ノートブックの名前を入力し、 デフォルト言語SQL を選択します。

  3. 作成 をクリックします。

  4. 最初のノートブック セルに、次のクエリを入力します。

    SQL
    SELECT * FROM lineage_data.lineagedemo.menu
  5. トップバーの スケジュール をクリックします。 スケジュールダイアログで、 手動 を選択し、 Unity Catalogにアクセスできるクラスターを選択して、 作成 をクリックします。

  6. 今すぐ実行 をクリックします。

  7. Databricks ワークスペースの上部バーにある 検索 ボックスで、 lineage_data.lineagedemo.menu テーブルを検索して選択します。

  8. 依存関係 タブで、 ワークフロー をクリックし、 ダウンストリーム タブを選択します。ジョブ名は、menuテーブルのコンシューマとして ジョブ名 の下に表示されます。

ダッシュボードリネージのキャプチャと表示

ダッシュボードを作成し、そのデータリネージを表示するには:

  1. Databricksのランディングページに移動し、サイドバーの カタログ をクリックしてカタログエクスプローラーを開きます。

  2. カタログ名をクリックし、 lineagedemoをクリックしてmenu テーブルを選択します。 トップバーの検索ボックスを使用して menu テーブルを検索することもできます。

  3. ダッシュボードで開く をクリックします。

  4. ダッシュボードに追加する列を選択し、 作成 をクリックします。

  5. ダッシュボードを公開します。

    公開されたダッシュボードのみがデータリネージで追跡されます。

  6. 上部のバーの 検索 ボックスで、 lineage_data.lineagedemo.menu テーブルを検索して選択します。

  7. 依存関係 タブで、 ダッシュボード をクリックします。ダッシュボードは、メニューテーブルのコンシューマーとして ダッシュボード名 の下に表示されます。

リネージの権限

リネージグラフは、 と同じ 許可モデルUnity Catalogを共有しています。Unity Catalog メタストアに登録されているテーブルやその他のデータ オブジェクトは、それらのオブジェクトに対して少なくとも BROWSE のアクセス許可を持つユーザーにのみ表示されます。 ユーザーがテーブルに対する BROWSE 権限または SELECT 権限を持っていない場合、そのリネージを探索できません。 リネージ グラフには、ユーザーが適切なオブジェクト アクセス許可を持っている限り、メタストアに接続されているすべてのワークスペースの Unity Catalog オブジェクトが表示されます。

たとえば、次のコマンドを実行します userA:

SQL
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 スキーマ内の任意のテーブルのリネージグラフを表示できます。

SQL
GRANT BROWSE on lineage_data to `userB@company.com`;

同様に、リネージユーザーは、ノートブック、ジョブ、ダッシュボードなどのワークスペースオブジェクトを表示するための特定の権限を持っている必要があります。 また、ワークスペースオブジェクトに関する詳細情報を表示できるのは、そのオブジェクトが作成されたワークスペースにログインしている場合のみです。 他のワークスペース内のワークスペースレベルのオブジェクトに関する詳細な情報は、リネージグラフではマスクされます。

Unity Catalogでのセキュリティ保護可能なオブジェクトへのアクセスの管理の詳細については、Unity Catalogでの特権の管理を参照してください。ノートブック、ジョブ、ダッシュボードなどのワークスペースオブジェクトへのアクセスの管理の詳細については、アクセス制御リストを参照してください。

リネージデータの削除

警告

次の手順では、Unity Catalog に格納されているすべてのオブジェクトを削除します。 これらの手順は、必要な場合にのみ使用してください。 たとえば、コンプライアンス要件を満たすためなどです。

リネージデータを削除するには、 Unity Catalog オブジェクトを管理しているメタストアを削除する必要があります。 メタストアの削除の詳細については、 メタストアの削除を参照してください。 データは 90 日以内に削除されます。

Databricks Assistantを使用してテーブルリネージを取得する

Databricks Assistant では、テーブルリネージと知見に関する詳細な情報を提供しています。

アシスタントを使用してリネージ情報を取得するには:

  1. Databricksのランディングページに移動し、サイドバーの[カタログ] をクリックしてカタログ エクスプローラーカタログアイコン開きます。
  2. カタログ名をクリックし、右上隅にある 製品内ヘルプアシスタントアイコン - 色 アシスタント アイコンをクリックします。
  3. アシスタントのプロンプトで、次のように入力します。
    • /getTableLineages を使用して、アップストリームとダウンストリームの依存関係を表示します。
    • /getTableInsights を使用して、ユーザー アクティビティやクエリ パターンなどのメタデータ駆動型の知見にアクセスできます。

これらのクエリにより、Assistant は "ダウンストリーム リネージを表示する" や "このテーブルに対して最も頻繁にクエリを実行するユーザー" などの質問に答えることができます。

Databricks Assistant テーブルリネージと知見を提供しています。

システムテーブルを用いたリネージのクエリー

リネージ システムテーブルを使用して、プログラムでリネージ データをクエリできます。 詳細な手順については、 システムテーブルを使用したアカウントアクティビティの監視 および リネージ システムテーブルリファレンスを参照してください。

ワークスペースがリネージ システムテーブルをサポートしていないリージョンにある場合は、データリネージ REST API を使用してプログラムでリネージデータを取得することもできます。

データリネージ REST APIを使用してリネージを取得する

データリネージ API は、テーブルとカラムのリネージを取得することができます。 ただし、ワークスペースがリネージ システムテーブルをサポートするリージョンにある場合は、 REST APIの代わりにシステムテーブルクエリを使用する必要があります。 システムテーブルは、リネージデータをプログラムで取得するためのより良いオプションです。 ほとんどの地域でリネージ システムテーブルがサポートされています。

important

Databricks REST APIsにアクセスするには、認証が必要です。

テーブルリネージの取得

この例では、 dinner テーブルのリネージ データを取得します。

依頼

Bash
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 ファイル。

応答

JSON
{
"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 テーブルの列データを取得します。

依頼

Bash
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 ファイル。

応答

JSON
{
"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 メタストアにアタッチされているすべてのワークスペースに対して集約されますが、ノートブックやダッシュボードなどのワークスペース オブジェクトの詳細は、それらが作成されたワークスペースにのみ表示されます。

  • リネージは1年ローリングウィンドウでコンピュートされているため、1年以上前に収集されたリネージは表示されません。 たとえば、ジョブまたはクエリがテーブル A からデータを読み取り、テーブル B に書き込む場合、テーブル A とテーブル B の間のリンクは 1 年間だけ表示されます。 1年間の期間でリネージデータをフィルタリングできます。

  • Jobs API runs submit リクエストを使用するジョブは、リネージを表示するときには使用できません。 runs submit要求を使用する場合、テーブル・レベルと列レベルのリネージは引き続きキャプチャされますが、実行へのリンクはキャプチャされません。

  • Unity Catalog は、リネージを可能な限りカラムレベルまでキャプチャします。 ただし、列レベルのリネージがキャプチャできない場合があります。

  • カラムリネージは、ソースとターゲットの両方がテーブル名で参照されている場合にのみサポートされます (例: select * from <catalog>.<schema>.<table>)。 ソースまたはターゲットがパスでアドレス指定されている場合、列リネージはキャプチャできません(例: select * from delta."s3://<bucket>/<path>")。

  • テーブルまたはビューの名前が変更された場合、名前が変更されたテーブルまたはビューのリネージはキャプチャされません。

  • スキーマまたはカタログの名前が変更された場合、名前が変更されたカタログまたはスキーマの下のテーブルおよびビューのリネージはキャプチャされません。

  • Spark SQLデータセットのチェックポイント設定を使用すると、リネージはキャプチャされません。

  • Unity Catalogはほとんどの場合、DLTパイプラインからリネージをキャプチャします。 ただし、場合によっては、パイプラインが APPLY CHANGES API または TEMPORARY テーブルを使用する場合など、完全なリネージ カバレッジを保証できない場合があります。

  • リネージは スタック関数をキャプチャしません。

  • グローバル一時ビューはリネージにキャプチャされません。

  • system.information_schema未満のテーブルはリネージにキャプチャされません。

  • 完全な列レベルのリネージは、 MERGE 操作のためにデフォルトによってキャプチャされません。

    MERGE操作のリネージキャプチャをオンにするには、 Spark プロパティのspark.databricks.dataLineage.mergeIntoV2Enabledtrueに設定します。 このフラグを有効にすると、特に非常に幅の広いテーブルを含むワークロードで、クエリのパフォーマンスが低下する可能性があります。