2
1

Unity Catalogのリネージ機能のウォークスルー

Posted at

気づかない間に機能エンハンスされていたので、改めてウォークスルーします。

リネージとは

日本語では依存関係や系統情報と訳されます。要はデータやモデルの依存関係です。以下はすべてリネージです

  • あるノートブックであるテーブルが作成された
  • あるテーブルが別のテーブルやファイルから作成された
  • あるモデルではあるテーブルの特徴量を利用している
  • あるダッシュボードであるテーブルのデータを表示している

Databricksにおけるリネージ機能

DatabricksのガバナンスソリューションUnity Catalogで管理されているテーブル、モデル、ファイルなどの資産間のリネージは自動でキャプチャされます。何も追加で作業する必要はありません。

以下のようなリネージグラフを参照することで、テーブルの由来をクイックに確認することができます。
Screenshot 2024-02-28 at 18.22.40.png

ウォークスルー

自分で使うカタログとスキーマ(データベース)を準備します。

SQL
USE CATALOG takaakiyayoi_catalog;
SQL
CREATE SCHEMA lineagedemo;
USE lineagedemo;

いくつかテーブルを作成します。

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

INSERT INTO takaakiyayoi_catalog.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
  takaakiyayoi_catalog.lineagedemo.dinner
AS SELECT
  recipe_id, concat(app," + ", main," + ",dessert)
AS
  full_menu
FROM
  takaakiyayoi_catalog.lineagedemo.menu

できました。
Screenshot 2024-02-28 at 18.32.27.png

テーブルの依存関係にアクセスするとリネージを確認できます。依存関係がUpstreamになっているので、takaakiyayoi_catalog.lineagedemo.dinnerの上流にtakaakiyayoi_catalog.lineagedemo.menuが存在することがわかります。つまり、menuからdinnerが作られたわけです。
Screenshot 2024-02-28 at 18.34.48.png

さらにリネージグラフを表示をクリックします。グラフィカルな形でリネージを確認できます。
Screenshot 2024-02-28 at 18.35.12.png

ここで注目は左上のドロップダウンメニューです。これまでは90日分のリネージしか保持されなかったのですが、範囲が拡張されています。過去一年までキャプチャされます。これは嬉しい。
Screenshot 2024-02-28 at 18.35.38.png

さらに、リネージはテーブル間のものだけではなく、カラムレベルでも追跡されます。特定のカラムをクリックするとカラムのリネージが表示されます。
Screenshot 2024-02-28 at 18.37.01.png

また、テーブルをクリックするとさらに詳細を確認できます。
Screenshot 2024-02-28 at 18.37.59.png

そして、リネージのキャプチャは言語を問いません。Pythonでも同様です。以下のコマンドでは連番を保持するrecipe_idと適当な数値を価格priceとして保持するpriceテーブルを作成し、dinnerテーブルとrecipe_idで結合を行いdinner_priceというテーブルを作成しています。

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")

# priceテーブルの保存
df.write.mode("overwrite").saveAsTable("takaakiyayoi_catalog.lineagedemo.price")

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

# dinnerとpriceをrecipe_idでjoinしてdinner_priceテーブルとして保存
dinner_price = dinner.join(price, on="recipe_id")
dinner_price.write.mode("overwrite").saveAsTable("takaakiyayoi_catalog.lineagedemo.dinner_price")

dinner_priceテーブルができました。
Screenshot 2024-02-28 at 18.45.58.png

リネージグラフも更新されます。
Screenshot 2024-02-28 at 18.46.53.png

これまでは「このテーブルどういう風に作られたのかわからないから、データベース管理者に聞きに行かないと」となっていたのかもしれませんが、リネージ機能を使えばそのような手間は不要ですぐに分析に着手できます。是非ご活用ください。

はじめてのDatabricks

はじめてのDatabricks

Databricks無料トライアル

Databricks無料トライアル

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1