sqllineageというデータリネージのツールを使ってみました。
結論: 手軽の導入できるし簡単にかけるので個人のメモとしては使いやすい。ただチームで使うには少し機能不足感。
データリネージについてざっくりと
データリネージはデータパイプラインの設計書みたいなもの
データリネージはデータの紐付けを表現した図のことを言います。
データ分析基盤やデータ系の業務の現場で使われます。
シンプルなWebシステムの構築をしているときは、UIの入出力によるデータを格納するDBは1つ、それ以外にはS3やRedisがあるぐらいです。しかし、規模の大きいシステムの場合、入力の元データはあちこちに散らばっており、その形式もDB、CSV、JSONなど様々です。その元の生データからデータを抽出したり集計したりとさまざまなプロセスを経て、バックエンドやユーザが使えるDBやDWHにデータが格納されます。
そのデータの流れを示した図がデータリネージです。データの設計書のようなものになります。
データリネージのツールについて
データリネージのツールはいくつかありますが、特にメジャーなものは今のところないと思います。
ツールには大別して、アクティブとパッシブがあります。
アクティブはツール使用者が直接、データの定義を書くタイプです。パッシブは、SQLの実行ログを解析してリネージを生成するタイプです。アクティブは、定義を書いていくのが大変ですが、直接データにアクセスすることはないのでシステムの影響を考慮せずにすみます。データにアクセスできる環境も必要ないので、気楽に導入できます。
やっていることは、ドキュメントを書くことと大差ありません。
今回、使ってみたsqllineageはアクティブタイプになります。
なんで使おうと思ったか
キャッチアップ変わりに
データリネージはあれば便利ですが、必須ではありません。
データリネージが一番効力を発揮するときは、引継ぎ時や新規にジョインした人がキャッチアップするときです。
データパイプライン構築者は、自身の頭の中に入っていますし、必要になったときはソースコードを見ればことたりることがほとんどです。なので、実際の現場ではデータリネージは後回しになりがちです。自分や構築者用のメモとして、マークダウンやdraw.ioでちょろっと書いて終わりということがほとんどえす。
バックエンドで言えば、第三者用のOpen APIのドキュメントやちゃんと用意するけど、アーキテクチャーや参照データ、デプロイなどについてはメモ程度のドキュメントしか残さないのと同じ原理です。
私が最近ジョインした案件は、ドキュメントや環境整備などかなりしっかりとしている現場ですが、それでもデータリネージはツールは導入されてはいなく、MarkdownのMermaidがあったりGoogleドキュメントが散見したりという状態でした。
なのでキャッチアップ変わりに、空き時間でデータリネージを作ってみることにしました。まあ、ツールを使ってみたかったというのが一番の理由ではありますが😇
Marquezとどっち使うか迷った
2022年06月現在、データリネージでググったらsqllineageが上位に出てくるのですが、他に色々と調べていたら、Marquezというツールも引っかかりました。
こちらもアクティブタイプで、データリネージの登録はRest APIでできるようです。ローカルでdockerを動かして、そのサーバにcURLで追加していくようです。sqllineageはSQLライクのファイルを用意するだけなので、sqllineageより若干、使い方が複雑な感じでしょうか。その分、メタ情報が登録できたりと、sqllineageよりはできることが多そうです。
今回は、とりあえずデータリネージツールを使ってみるのが目的でしたので、手軽そうなsqllineageを使ってみることにしました。
使用方法についてのメモ
公式
https://github.com/reata/sqllineage
インストール
公式にある通り、pipでinstallするだけ。お手軽♪
pip install sqllineage
起動、使い方
公式やDocs https://sqllineage.readthedocs.io/en/latest/ には、チュートリアルでeオプションやfオプションが書いてあるが、何のタメにやっているのかよくわかりませんでした。
リネージを書いたSQLファイル(READMEでいうfoo.sql)があるディレクトリで、
sqllineage -g
を実行すればサーバが起動して、 http://localhost:5000/ にアクセスすれば、foo.sqlのリネージが見られる。ファイルを更新したり、追加したと、ブラウザをリロードすれば反映される。
使ってみた感想
使ってみた感想は簡単なSQL構文で、サクサクとデータリネージを作っていけるので便利です。
ただREADMEのサンプルぐらいの規模だと綺麗に見えますが、少し規模が大きくなる矢印だらけで分けがわからなくなります。マウスで移動できて見やすくは調整できるのですが、ブラウザをリロードすると戻ってしまいます。
あと、やっぱりメタ情報が書けないのは、少し物足りなく感じます。所有者やデータパイプラインやタスクの情報は表示させたいですね。現状、設計書変わりとして使うなら、これらの情報はコメントで残して、必要な時はソースを直接見るしかなさそうです。
もちろん、draw.ioやGoogleドキュメントなどで作成された図よりは、全然使いやすくわかりやすいので、あれば便利ではあります。ただ、現場でこれを正規として運用して行くには、少し物足りないかなという感じはします。
あと、個人的には少しビジュアルがいまいちかなという気がします。テーブルを選択したときの関連テーブルのカラーリングが地味でわかりづらいですし、矢印も直線だけで見づらいです。ダークテーマもできれば欲しいし、グルーピングみたいな表示もできればしたい。。。
今回は個人メモ的な用途だったのでこれで十分なので、しばらく使っていく予定です。また、そのうち、Marquezも試してみたいと思います。
そのうち、鉄板の使いやすいリネージツールが出るといいですね。
