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

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

リネージ システムテーブル (パブリック プレビュー) を使用して、リネージ データを表示およびクエリすることもできます。 詳細については、リネージ システムテーブル リファレンスを参照してください。

リネージは、 Unity Catalogメタストアにアタッチされているすべてのワークスペースにわたって集約されます。 これは、あるワークスペースでキャプチャされたリネージが、そのメタストアを共有する他のワークスペースで表示されることを意味します。 ユーザーはリネージ データを表示するための適切な権限を持っている必要があります。 リネージデータは1年間保存されます。

この記事では、Catalog Explorer とREST APIを使用してリネージを視覚化する方法について説明します。 機械学習モデルのリネージを追跡する方法については、 「 Unity Catalogでモデルのデータリネージを追跡する」を参照してください。

要件

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

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

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

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

  • テーブルまたはビューのリネージを表示するには、ユーザーはテーブルまたはビューの親カタログに対する少なくともBROWSE権限を持っている必要があります。

  • ノートブック、ワークフロー、またはダッシュボードの系列情報を表示するには、ワークスペースのアクセス制御設定で定義されているように、これらのオブジェクトに対するアクセス許可がユーザーに必要です。 リネージの許可を参照してください。

  • Unity カタログ対応パイプラインの系列を表示するには、パイプラインに対する CAN_VIEW アクセス許可が必要です。

  • 場合によっては、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 年間のみ表示されます。

    リネージデータを時間枠でフィルタリングできます。 「全リネージ」を選択すると、2023年6月以降に収集されたリネージデータが表示されます。

  • ジョブ 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日以内に削除されます。

データリネージ API

データリネージ 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"
    }
  ]
}