2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

DWHを構成する大量のSQLからデータリネージを可視化するdatalineage-analyzer

Last updated at Posted at 2022-04-23

概要

データウェアハウスにおいて、データを整備する際に「あるテーブル」から「他方のテーブル」へ投入するSQLを用意し、バッチで運用するケースはしばしば見られます。このような仕組みを開発していく中で、互いのテーブルの関係性を設計し、ドキュメントとして整理しながら取り組めれば良いのですが、どうしてもビジネスニーズが先行し、ドキュメントが追いつかないケースも多々あるでしょう。このような状態を続けていくと、ソースにしかデータフローの仕様がなく、毎度毎度grepしてSQLの山からフローを読み解いていくことになります。

このように既存の仕組みから「データの流れを知りたい、管理したい」というニーズは高まってきており、DMBOKをはじめとする「データマネジメント」と呼ばれる管理体系に基づいた運用が期待されるようになってきました。本稿では、その中でも「データリネージ」に着目し、大量のSQLを解析して、テーブルのIN(SOURCE)とOUT(TARGET)の関係性をシンプルに可視化する方法を解説します。

スクリーンショット 2022-04-23 12.08.35.png

課題

何かOSSで良い物がないかと探してみると、sqllineageという、SQL解析から可視化までオールインワンで対応しているツールが見つかりました。
早速試してみたところ、「階層関係が多すぎて可視化できない」問題にぶつかります。

image.png

ツールがハングして戻ってこないな...

その他にも、DBベンダー固有の処理で解析が止まったりと少しずつ課題が見えてきました。

  • 全てを可視化しようとして破綻しているため、構造化と可視化のフェーズに分ける
  • 確認したいテーブルを指定して、そこを起点に可視化する
  • 可視化をシンプルにテキストベースで確認する
  • DBベンダー固有処理をスキップできる汎用的な機能を用意する

上記の点を踏まえながら、sqllineageをベースに一つツールを開発してみることにしました。

datalineage-analyzer

仕組み

このツールはSQLファイルを探索し、データリネージを解析して、その構造を表示します。
ツールのアーキテクチャは以下の通りです。

architecture.png

  1. analyzerはSQLファイルを検索します。
  2. SQLファイルのベンダー固有の処理を変換します。ReplaceHandlerと呼ばれる汎用的に変換する仕組みを有しています。
  3. ツリー構造のデータ構造を生成し、ファイルに出力します(pickle形式)。
  4. visualizerを使用してツリー構造をテキスト形式で出力します。

データ(カラム)までは対応しておらず、一旦テーブルのみ対応しています

実行サンプル

sampleディレクトリからSQLファイルを探索して、pklファイルを生成します

python analyzer.py -i sample

テーブルの流れを解析した木構造を持つdata_lineage.pklを生成します。

確認したい対象のテーブルを指定し、そのテーブルの先(OUT/TARGET)となったテーブルのリストをテキストベースで表示します。

python visualizer.py -k target -t persons

output:

persons
├── city_stat
└── members
    └── address_stat

確認したい対象のテーブルを指定し、そのテーブルの元(IN/SOURCE)となったテーブルのリストをテキストベースで表示します。

python visualizer.py -k source -t members

output:

members
├── address_of_member
└── persons

ソース一式

ソースコードとサンプルの一式をgithubに上げているので、よろしければ参照されてください。

今後の改善

コマンド+テキスト+ツリー形式、というかなり古典的な可視化方法でしたが、それなりの規模でも動作すると思われるので、課題感は達成できたと考えています。
有償ツールの導入は敷居が高いですし、無償ツールの活用でも予算を確保しての開発は難しいと思われたので、日曜大工の感覚で開発してみました。
今後は、より便利に使えるようにブラウザベースで出力できるようなUIを開発してみようかなと思っています。

こんな感じで可視化して、クリックしたら関連資料に飛ぶようにできたらなと。
graph.pn.png

Dashベースのテーブル検索&表示サーバーを追加しました。
dash_ui.png

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?