気づかない間に機能エンハンスされていたので、改めてウォークスルーします。
リネージとは
日本語では依存関係や系統情報と訳されます。要はデータやモデルの依存関係です。以下はすべてリネージです
- あるノートブックであるテーブルが作成された
- あるテーブルが別のテーブルやファイルから作成された
- あるモデルではあるテーブルの特徴量を利用している
- あるダッシュボードであるテーブルのデータを表示している
Databricksにおけるリネージ機能
DatabricksのガバナンスソリューションUnity Catalogで管理されているテーブル、モデル、ファイルなどの資産間のリネージは自動でキャプチャされます。何も追加で作業する必要はありません。
以下のようなリネージグラフを参照することで、テーブルの由来をクイックに確認することができます。
ウォークスルー
自分で使うカタログとスキーマ(データベース)を準備します。
USE CATALOG takaakiyayoi_catalog;
CREATE SCHEMA lineagedemo;
USE lineagedemo;
いくつかテーブルを作成します。
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
テーブルの依存関係にアクセスするとリネージを確認できます。依存関係がUpstream
になっているので、takaakiyayoi_catalog.lineagedemo.dinner
の上流にtakaakiyayoi_catalog.lineagedemo.menu
が存在することがわかります。つまり、menuからdinnerが作られたわけです。
さらにリネージグラフを表示をクリックします。グラフィカルな形でリネージを確認できます。
ここで注目は左上のドロップダウンメニューです。これまでは90日分のリネージしか保持されなかったのですが、範囲が拡張されています。過去一年までキャプチャされます。これは嬉しい。
さらに、リネージはテーブル間のものだけではなく、カラムレベルでも追跡されます。特定のカラムをクリックするとカラムのリネージが表示されます。
そして、リネージのキャプチャは言語を問いません。Pythonでも同様です。以下のコマンドでは連番を保持するrecipe_id
と適当な数値を価格price
として保持するprice
テーブルを作成し、dinner
テーブルとrecipe_id
で結合を行いdinner_price
というテーブルを作成しています。
%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")
これまでは「このテーブルどういう風に作られたのかわからないから、データベース管理者に聞きに行かないと」となっていたのかもしれませんが、リネージ機能を使えばそのような手間は不要ですぐに分析に着手できます。是非ご活用ください。