public note

データリネージツール Stairlight でテーブルの依存関係をグラフにする

この記事は、datatech-jp Advent Calendar 2021 の6日目の記事です。

こんにちは、GMOペパボ株式会社でデータエンジニアをしています、@tosh2230 と申します。

5日目は よしむらさんのデータマネジメント成熟度アセスメント、データ利活用機運アセスメントを行った話 でした。アセスメントの実施例は貴重ですね。参考にしつつ所属企業ではどう進めていけばよいのか、自分なりに考えていこうと思いました。


はじめに

この記事では、先月に実装したデータリネージツール Stairlight を使って、データパイプラインで作成されるテーブル群(に見立てたテストデータ)の依存関係をグラフにしてみようと思います。*1

Stairlight をかいつまんで説明

Stairlight は、テーブルレベルのデータリネージを行うためのツールです。つくったばかりなので Pre-release 扱いです。

ざっくり機能を説明しますと、入力が SQL を含んだファイル群で、そのファイル内のクエリ文字列を正規表現で解析して、テーブル間の依存関係を出力します。

PyPi に パッケージ、GitHubソースコードを公開しています。

pypi.org

github.com

機能の詳細については、こちらのブログ記事をご参照ください。

ts223.hatenablog.com

ライブラリとしても使えます

上記のブログ記事では、CLI のコマンドを中心に紹介しましたが、Stairlight はライブラリとしてアプリケーションに組み込むことができます。

正確には、最初からライブラリとして実装していて、公開にあたって CLI でラップした、という順序になります。 ライブラリの関数と CLI のコマンドは基本的に一緒にしています。

デモ用のアプリケーションをつくりました

見ていただいたほうが話が早いので、デモ用の Web アプリケーションを公開しました! *2

https://stairlight.run

ダークモードにしたほうが見やすいかもしれません。

ここからは、このアプリケーションでやっていることを紹介していきます。

初期表示

f:id:ts223:20211201230606p:plain
初期表示

初期画面では、入力ファイルすべてを読み取ったグラフが表示されています。上から下がデータが流れる方向です。

グラフの中にあるノード(グラフ中の四角) が、テーブルやアプリケーションを指します。*3 その間のエッジ(矢印) が、ノード間の依存関係を表しています。

グラフ下の Details を展開すると、グラフのデータソースである JSON 文字列が表示されます。

これは、CLI のコマンド stairlight を実行した結果と同じ内容で、ライブラリにおける StairLight クラスの mapped プロパティの値を出力しています。

f:id:ts223:20211201233717p:plain
Details

ノードを選んでみる

サイドバーにドロップダウンリストを設置しており、これを使って特定のノードを選ぶことができます。

ドロップダウンリストを操作すると、選択したノードと、その上流・下流に位置するノードの色が変化します。これによって、選択したノードのデータがどの経路で作成され、そしてどのデータに影響するのかを視覚的に把握することができます。

f:id:ts223:20211202000348p:plain
ノード選択で色が変わる

また、グラフ下の Details の内容も変化しています。選択したノードから見て、上流 (Upstairs) と 下流 (Downstairs) の属性情報がそれぞれ表示されます。ライブラリの実装でいえば、前者が StairLight.up()、後者が StairLight.down() の結果を出力しています。

f:id:ts223:20211201235937p:plainf:id:ts223:20211202000019p:plain
ノード選択時の Details

ファイル名を表示

また、Show file names チェックボックスをオンにすると、エッジの横に ファイル名のラベルが表示されます。これにより、どのファイルによって依存関係が生じているのかを確認できます。

デモアプリケーションの構成

このアプリケーションでは、主に下記のライブラリ・サービスを使用しています。

ソースコードGitHub に公開しています。

github.com

なお、今回の Cloud Run & Streamlit アプリケーションは認証なしで公開していますが、前段に Cloud Load Balancing を設置すると Identity-Aware Proxy(IAP) による認証機能を追加できます。

ts223.hatenablog.com

おわりに

今回のお見せしたアプリでは Stairlight の出力結果のみでグラフを描画してみましたが、Stairlight の出力結果は単独で使うよりも、その他のデータと組み合わせることで便利になるのではと考えています。個人的には、マスタデータという位置付けかなと思います。

例えば、データウェアハウスの監査ログやジョブ実行ログと結合すれば、テーブル単位でのデータ生成時刻と流量、流入経路を把握できますので、いわゆるデータの鮮度を捕捉できるようになります。

または、センシティブなデータの有無をグラフで色付けしておくと、データセキュリティを意識した設計・運用・コミュニケーションに役立つかもしれません。

別の切り口では、--save オプションで Stairlight の出力結果を時系列で保存しておけば、データパイプラインの変遷を記録に残すことができます。問題発生時には、その変更タイミングを手がかりにソースコードを調査する、といった使い方もできそうです。

...などなど活用するアイデアはいくつかあるのですが、ツールの精度が高いことが大前提となりますので、今後も継続的な改善を続けていきたいと思います。


datatech-jp Advent Calendar 2021、7日目は @nii_yan さんです!

*1:当記事でのデータリネージは、データがいつ・どのように作成・加工されたのか、というライフサイクルをトレースするメタデータを管理して、データ品質やデータセキュリティの向上に役立てる取り組みを指すものとします。

*2:諸事情で閲覧できない時があるかもしれませんが、ご容赦ください...

*3:ドロップダウンリストの選択肢にあるように、このツールは Transform 前後のテーブルだけでなく、終端ノードに位置するアプリケーションやツールも表現できます。