Unity Catalog を使用してデータリネージをキャプチャして表示する

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

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

リネージは、 Unity Catalogメタストアにアタッチされているすべてのワークスペースにわたって集約されます。 これは、あるワークスペースでキャプチャされたリネージが、そのメタストアを共有する他のワークスペースで表示されることを意味します。 ユーザーはリネージ データを表示するための適切な権限を持っている必要があります。 リネージデータは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 Live Tablesワークロードの列リネージ追跡には、 Databricks Runtime 13.3 LTS以上が必要です。

  • Databricks コントロールプレーンの Amazon Kinesis エンドポイントへの接続を許可するには、送信ファイアウォール ルールを更新する必要がある場合があります。 通常、これは、Databricks ワークスペースが独自の VPC にデプロイされている場合、または Databricks ネットワーク環境内で AWS PrivateLink を使用している場合に適用されます。 ワークスペースリージョンの Kinesis エンドポイントを取得するには、 「Kinesis アドレス」を参照してください。 「顧客管理VPCを構成する」およびAWS PrivateLink を使用してプライベート接続を有効にする」も参照してください。

制限

  • Delta テーブル間のストリーミングは、 Databricks Runtime 11.3 LTS 以降でのみサポートされます。

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

  • ジョブ API runs submit 要求を使用するワークフローは、系列を表示するときには使用できません。 テーブルおよび列レベルの系列は、 runs submit 要求を使用する場合でもキャプチャされますが、実行へのリンクはキャプチャされません。

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

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

  • 表の名前が変更された場合、名前が変更された表の系列はキャプチャーされません。

  • Spark SQL データセットのチェックポイント処理を使用する場合、系列はキャプチャされません。 PySpark.sqlを参照してください。DataFrame.checkpoint (Apache Spark のドキュメントを参照)。

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

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

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

    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. 最初のノートブックのセルに、次のクエリーを入力します。

    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 キーを押すか、クリックして 実行メニュー [ セルの実行] を選択します。

カタログ エクスプローラを使用して、これらのクエリーによって生成されたリネージを表示するには、次の手順を使用します。

  1. Databricks ワークスペースの上部バーにある 検索 ボックスに「 」と入力し、[ Databricks lineage_data.lineagedemo.dinnerlineage_data.lineagedemo.dinner を検索 ]をクリックします。

  2. [テーブル] で、 dinner テーブルをクリックします。

  3. [ 系列 ] タブを選択します。 系列パネルが表示され、関連するテーブルが表示されます (この例では menu テーブルです)。

  4. データリネージの対話型グラフを表示するには、[ 系列グラフの表示] をクリックします。 デフォルトでは、グラフに 1 つのレベルが表示されます。 ノードのアイコンをクリックすると、 プラス記号アイコン 使用可能な場合はさらに多くの接続を表示できます。

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

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

  7. 列レベルの系列を表示するには、グラフ内の列をクリックして、関連する列へのリンクを表示します。 たとえば、「full_menu」列をクリックすると、その列が派生した上流の列が表示されます。

    フルメニュー列の系統

Python などの異なる言語で系列を作成および表示することを示すには、次のステップを使用します。

  1. 前に作成したノートブックを開き、新しいセルを作成して、次の 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 」と入力し、[ Databricks で lineage_data.lineagedemo.price を検索] をクリックします。

  4. [テーブル] で、 price テーブルをクリックします。

  5. リネージ 」タブを選択し、「 リネージ・グラフの表示」をクリックします。 アイコンをクリックして プラス記号アイコン 、SQL と Python によって生成されたデータリネージを調べます。

    拡張された系列グラフ
  6. リネージ・グラフ内のノードを接続する矢印をクリックして、「 リネージ接続 」パネルを開きます。 [ リネージ接続 ] パネルには、ソース テーブルとターゲット テーブル、ノートブック、ワークフローなど、接続に関する詳細が表示されます。

ワークフロー系列のキャプチャと表示

系列は、 Unity Catalogに対して読み取りまたは書き込みを行うすべてのワークフローでもキャプチャされます。 Databricks ワークフローの系列の表示を示すには、次のステップを使用します。

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

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

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

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

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

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

  7. Databricks ワークスペースの上部バーにある 検索 ボックスに「 」と入力し、[ Databricks lineage_data.lineagedemo.menulineage_data.lineagedemo.menu を検索 ]をクリックします。

  8. [ テーブル] で、すべてのテーブルを表示し、 menu テーブルをクリックします。

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

ダッシュボードの系列をキャプチャして表示する

SQL ダッシュボードの系列の表示を示すには、次のステップを使用します。

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

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

  3. [ アクション] > [クイックダッシュボードの作成] をクリックします。

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

  5. Databricks ワークスペースの上部バーにある 検索 ボックスに「 」と入力し、[ Databricks lineage_data.lineagedemo.menulineage_data.lineagedemo.menu を検索 ]をクリックします。

  6. [ テーブル] で、すべてのテーブルを表示し、 menu テーブルをクリックします。

  7. 系列 」タブを選択し 、「ダッシュボード」をクリックします。 ダッシュボード名は、メニューテーブルのコンシューマーとして [ダッシュボード名 ] の下に表示されます。

リネージのアクセス許可

リネージ Unity Catalogグラフは、 と同じ 権限モデル を共有します。ユーザーがテーブルに対するBROWSEまたはSELECT権限を持っていない場合、リネージを探索することはできません。 さらに、ユーザーは、表示権限のあるノートブック、ワークフロー、ダッシュボードのみを表示できます。 たとえば、管理者以外のユーザーuserAに対して次のコマンドを実行するとします。

GRANT USE SCHEMA on lineage_data.lineagedemo to `userA@company.com`;
GRANT SELECT on lineage_data.lineagedemo.menu to `userA@company.com`;

userAlineage_data.lineagedemo.menuテーブルのリネージ グラフを表示すると、 menuテーブルが表示されます。 ダウンストリームのlineage_data.lineagedemo.dinnerテーブルなど、関連するテーブルに関する情報を表示することはできません。 dinnerテーブルは、userA表示にmaskedノードとして表示され、userAグラフを展開して、アクセス権限のないテーブルからダウンストリームテーブルを表示することはできません。

次のコマンドを実行して、管理者以外のユーザーuserBBROWSE権限を付与するとします。

GRANT BROWSE on lineage_data to `userA@company.com`;

userB lineage_dataスキーマ内の任意のテーブルのリネージ グラフを表示できるようになりました。

Unity Catalog内のセキュリティ保護可能なオブジェクトへのアクセスの管理の詳細については、 Unity Catalogでの権限の管理」を参照してください。 ワークスペース オブジェクト (データベース、ワークフロー、ダッシュボードなど) へのアクセスの管理の詳細については、 「アクセス制御リスト」を参照してください。

系列データの削除

警告

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

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

システムテーブルを使用してリネージデータをクエリする

リネージ システムテーブルを使用して、リネージ データをプログラムでクエリできます。 詳細な手順については、 「システムテーブルリネージ システムテーブル リファレンスを使用して使用状況を監視する」を参照してください。

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

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

データリネージAPIと、テーブルと列のリネージを取得できます。 ただし、ワークスペースが REST システムテーブルをサポートするリージョンにある場合は、 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"
    }
  ]
}