株式会社ブレインパッド・プロダクトユニット・イノベーション開発グループ
(Rtoaster GenAIなど、新規開発を担っているグループ)の津久井です。
はじめに
データリネージのOSSはいくつか存在しますが、LineageXは、SQLファイルからカラムレベルのデータリネージを自動的に行い、動的なhtmlによるインタラクティブなグラフを生成してくれます。
(あまり情報が無いOSSの割には、比較的ちゃんと生成してくれます)
サンプルプロジェクト
ミニマムなサンプルコードを用意しました。
プロジェクト構成
lineagex_sample_uv/
├── pyproject.toml # プロジェクト設定
├── generate_lineage.py # LineageX実行スクリプト
├── sample_sql/ # 解析対象のSQL
│ ├── stage_sales.sql
│ └── daily_sales.sql
└── README.md
セットアップ
# uvを使用してプロジェクトをセットアップ
uv sync
# LineageXを実行
uv run python generate_lineage.py
サンプルSQL
1. ステージングテーブル(stage_sales.sql)
-- ステージングテーブル
CREATE TABLE stage_sales AS
SELECT
order_id,
customer_id,
order_date,
amount
FROM raw_sales
WHERE order_date >= '2025-01-01';
2. 集計テーブル(daily_sales.sql)
-- 集計テーブル
CREATE TABLE daily_sales AS
SELECT
DATE(order_date) AS sale_date,
SUM(amount) AS total_amount
FROM stage_sales
GROUP BY sale_date;
3. LineageXを実行するPythonスクリプト(generate_lineage.py)
"""Generate column-level lineage graph using LineageX."""
from pathlib import Path
from lineagex.lineagex import lineagex
def main():
sql_dir = Path(__file__).parent / "sample_sql"
lineagex(sql=str(sql_dir), target_schema="public")
if __name__ == "__main__":
main()
実行結果
実行すると、以下のファイルが生成されます:
-
output.json
: データリネージ情報のJSONデータ -
index.html
: インタラクティブな可視化 -
vendor.js
: 必要なJavaScriptライブラリ
データリネージ解析の結果
生成されたoutput.json
から、以下のデータリネージ情報が抽出されます:
{
"raw_sales": {
"tables": [""],
"columns": {
"order_id": [[""], [""]],
"order_date": [[""], [""]],
"customer_id": [[""], [""]],
"amount": [[""], [""]]
},
"table_name": "raw_sales",
"sql": "this is a base table"
},
"stage_sales": {
"tables": ["raw_sales"],
"columns": {
"order_id": [["raw_sales.order_id"], ["raw_sales.order_date"]],
"customer_id": [["raw_sales.customer_id"], ["raw_sales.order_date"]],
"order_date": [["raw_sales.order_date"], ["raw_sales.order_date"]],
"amount": [["raw_sales.amount"], ["raw_sales.order_date"]]
},
"table_name": "stage_sales",
"sql": "SELECT order_id,customer_id,order_date,amount FROM raw_sales WHERE order_date >= '2025-01-01'"
},
"daily_sales": {
"tables": ["stage_sales"],
"columns": {
"sale_date": [["stage_sales.order_date"], ["stage_sales.order_date"]],
"total_amount": [["stage_sales.amount"], ["stage_sales.order_date"]]
},
"table_name": "daily_sales",
"sql": "SELECT DATE(order_date) AS sale_date,SUM(amount) AS total_amount FROM stage_sales GROUP BY sale_date"
}
}
このJSONファイルには、各テーブルの依存関係やカラムレベルのデータリネージ情報が含まれています。
可視化の確認
生成されたHTMLファイルをブラウザで確認できます:
# 簡易サーバーを起動
uv run python -m http.server --directory .
# ブラウザで http://localhost:8000/index.html を開く
スクリーンショット
- 「explore」クリックで、テーブルの依存関係を展開
- カラムへのマウスオーバーで、依存関係のグラフを強調
まとめ
数多のリネージグラフの生成ツールに比べ、ライトに導入することができる印象です。
(割と苦心していたカラムレベルのリネージがアッサリ実現した。。。。)
html画面上でも他の便利な機能が存在しそうなので、把握し次第また紹介できればと思います。
(続きます)
Views: 0