alisql
SQL ファイル内の Jinja2 {{ ref() }} マクロを解析して、テーブル間の依存関係を抽出・可視化するツールです。
インストール
または Releases からプラットフォーム別のバイナリをダウンロードできます。
CLI
deps — 依存関係を表示
# テキスト形式(デフォルト)
# JSON形式
# 探索する深さを指定(デフォルト: 5)
出力例(text):
[sample]
<- db.users
<- role
[sample2]
<- db.sales
<- db.sale_detail
出力例(json):
graph — Mermaid 図を出力
# デフォルト(上から下: TD)
# 向きを指定(TB / TD / BT / RL / LR)
出力例:
graph TD;
db.users --> sample;
role --> sample;
db.sales --> sample2;
db.sale_detail --> sample2;
GitHub や Notion などで Mermaid をレンダリングすると、次のようなグラフになります。
graph TD;
db.users --> sample;
role --> sample;
db.sales --> sample2;
db.sale_detail --> sample2;
Rust ライブラリとして使う
# Cargo.toml
[]
= "0.2"
依存関係を取得
let tables = get_dependencies;
for table in &tables
Mermaid 図を取得
let graph = get_mermaid;
println!;
SQL ファイルの書き方
{{ ref("table") }} または {{ ref("schema", "table") }} の形式で依存テーブルを参照します。
-- sql/orders.sql
select o.*, u.name
from {{ ref("db", "orders") }} as o
left join {{ ref("users") }} as u on o.user_id = u.id
このファイルを解析すると、orders テーブルが db.orders と users に依存していることが分かります。