次の方法で共有


Unity カタログを使用してデータ系列を表示する

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

データ系列の概要

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

系列には、Azure Databricks の外部で実行される外部資産とワークフローを含めることもできます。 この外部系列メタデータ機能はパブリック プレビュー段階です。 「 独自のデータ系列を持ち込む」を参照してください。

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

系列データは 1 年間保持されます。

以下は系列グラフのサンプル画像です。

系列の概要。

機械学習モデルの系列追跡については、「Unity Catalog でモデルのデータ系列を追跡する」を参照してください。

要件

Unity カタログを使用してデータ系列をキャプチャするには:

  • テーブルは Unity Catalog メタストアに登録する必要があります。
  • 外部アセット (Unity カタログ メタストアに登録されていないもの) は、Unity カタログの 外部メタデータ オブジェクトとして追加する必要があります。このオブジェクトは、Unity カタログメタストアに登録されている他のセキュリティ保護可能なオブジェクトとの関係を持つよう構成されている必要があります。 「 独自のデータ系列を持ち込む」を参照してください。
  • クエリでは、Spark DataFrame (DataFrame を返す Spark SQL 関数など) またはノートブックや SQL クエリ エディターなどの Databricks SQL インターフェイスを使用する必要があります。

データ系列を表示するには:

  • テーブルまたはビューの親カタログに対する BROWSE 権限が少なくとも必要です。 親カタログにもワークスペースからアクセスできる必要があります。 「特定のワークスペースにカタログ アクセスを制限する」を参照してください。
  • ノートブック、ジョブ、またはダッシュボードの場合、ワークスペースのアクセス制御設定で定義されているこれらのオブジェクトに対するアクセス許可が必要です。 詳細については、「 系列のアクセス許可」を参照してください。
  • Unity カタログ対応パイプラインの場合は、パイプラインに対する CAN VIEW アクセス許可が必要です。

コンピューティング要件:

  • Delta テーブル間のストリーミングの系列追跡には、Databricks Runtime 11.3 LTS 以降が必要です。
  • Lakeflow 宣言型パイプライン ワークロードの列系列の追跡には、Databricks Runtime 13.3 LTS 以降が必要です。

ネットワーク要件:

カタログ エクスプローラーを使用してデータ系列を表示する

カタログ エクスプローラーを使用してテーブル系列を表示するには:

  1. Azure Databricks ワークスペースで、[ データ] アイコンをクリックします。カタログ

  2. テーブルを検索または参照します。

  3. [ 系列 ] タブを選択します。系列パネルが表示され、関連テーブルが表示されます。

  4. データ系列のインタラクティブ グラフを表示するには、[See Lineage Graph] (系列グラフの表示) をクリックします。

    既定では、1 つのレベルがグラフに表示されます。 ノード上の プラス記号アイコン アイコンをクリックすると、追加の接続情報があれば表示されます。

  5. 系列グラフ内の各ノードを接続する矢印をクリックして、[系列接続] パネルを開きます。

    その接続の詳細 (ソースとターゲットのテーブル、ノートブック、ジョブなど) が [系列接続] パネルに表示されます。

    系列グラフ。

  6. テーブルに関連付けられているノートブックを表示するには、[ 系列接続 ] パネルでノートブックを選択するか、系列グラフを閉じて [ ノートブック] をクリックします。

    新しいタブでノートブックを開くには、ノートブック名をクリックします。

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

    Full menu 列系列。

ジョブ系列の表示

ジョブ系列を表示するには、テーブルの [ 系列 ] タブに移動し、[ ジョブ] を選択して、[ダウンストリーム] を選択 します。 ジョブ名は、テーブルのコンシューマーとして [ジョブ名] の下に表示されます。

ダッシュボードの系列を表示する

ダッシュボード系列を表示するには、テーブルの [ 系列 ] タブに移動し、[ ダッシュボード] をクリックします。 ダッシュボードは、テーブルのコンシューマーとして [ダッシュボード名] の下に表示されます。

Databricks Assistant を使用してテーブル系列を取得する

Databricks Assistant は、テーブルの系列と分析情報に関する詳細情報を提供します。

Assistant を使用して系列情報を取得するには:

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

これらのクエリを使用すると、Assistant は "ダウンストリーム系列を表示する" や "このテーブルに最も頻繁にクエリを実行するユーザー" などの質問に回答できます。

Databricks Assistant は、テーブルの系列と分析情報を提供します。

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

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

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

Data Lineage REST API を使用して系列を取得する

データ系列 API を使用すると、テーブルと列の系列を取得できます。 ただし、ワークスペースが系列システム テーブルをサポートするリージョンにある場合は、REST API ではなく、システム テーブルに対するクエリの使用を推奨します。 系列データのプログラムでの取得には、システム テーブルによる方法を選択するほうがよいでしょう。 ほとんどのリージョンで系列システム テーブルはサポートされています。

重要

Databricks REST API にアクセスするには、認証する必要があります。

テーブルの系列を取得する

この例では、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 カタログ メタストアに登録されているテーブルおよびその他のデータ オブジェクトは、それらのオブジェクトに対するアクセス許可が少なくとも BROWSE ユーザーにのみ表示されます。 ユーザーがテーブルに対する BROWSE または SELECT 権限を持っていない場合、その系列を調べることはできません。 系列グラフは、ユーザーが適切なオブジェクト権限を持っている限り、メタストアにアタッチされているすべてのワークスペースにわたって Unity カタログ オブジェクトを表示します。

たとえば、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 に対する表示では、masked テーブルが userA ノードとして表示されます。userA がグラフを展開して、自分に権限がないテーブルのダウンストリーム テーブルを表示することはできません。

次のコマンドを実行して、BROWSEuserBアクセス許可を付与すると、そのユーザーは、lineage_data スキーマ内の任意のテーブルの系列グラフを表示できます。

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

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

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

系列の制限

データ系列には、次の制限があります。 これらの制限は、系列システム テーブルにも適用されます。

  • 系列は、同じ Unity カタログ メタストアにアタッチされているすべてのワークスペースに対して集計されますが、ノートブックやダッシュボードなどのワークスペース オブジェクトの詳細は、作成されたワークスペースにのみ表示されます。

  • 系列は 1 年間のローリング ウィンドウで計算されるため、1 年よりも前に収集された系列は表示されません。 たとえば、ジョブまたはクエリでテーブル A からデータを読み取り、テーブル B に書き込んだ場合、テーブル A とテーブル B の間のリンクは 1 年間だけ表示されます。 系列データは、1 年以内の時間枠でフィルター処理することができます。

  • ジョブ API runs submit 要求または spark submit タスクの種類を使用するジョブは、系列ビューでは使用できません。 これらのワークフローのテーブル レベルと列レベルの系列は引き続きキャプチャされますが、ジョブ実行へのリンクはキャプチャされません。

  • テーブルまたはビューの名前が変わった場合、名前が変わったテーブルまたはビューの系列は取り込まれません。

  • スキーマまたはカタログの名前が変更された場合、名前が変更されたカタログまたはスキーマのテーブルとビューの系列はキャプチャされません。

  • Spark SQL データセットのチェックポイントを使用する場合、系列はキャプチャされません。

  • Unity カタログは、ほとんどの場合、Lakeflow 宣言パイプラインから系列をキャプチャします。 ただし、パイプラインで PRIVATE テーブルを使用する場合など、完全な系列カバレッジを保証できない場合があります。

  • 系列では、Stack 関数はキャプチャされません。

  • グローバル一時ビューは系列に記録されません。

  • system.information_schema 下にあるテーブルは系列に記録されません。

  • Unity Catalog は、可能な限り列レベルに系列を取り込みます。 ただし、列レベルの系列を取り込むことができない場合があります。 これらには次のものが含まれます。

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

    • 共通テーブル式 (CTE)、列の名前変更、ユーザー定義関数 (UDF)、または Resilient Distributed Datasets (RDD) の使用。これらはすべて、ソース列とターゲット列の間のマッピングを隠す可能性があります。

    • 既定では MERGE 操作は完全な列レベルの系列には記録されません。

      MERGE 操作の系列記録を有効にするには、Spark プロパティ spark.databricks.dataLineage.mergeIntoV2Enabledtrue に設定してください。 このフラグを有効にすると、非常に幅の広いテーブルを使用するワークロードで特にクエリ パフォーマンスが低下する可能性があります。