BigQueryのtableとviewの依存関係をグラフで描写した
BigQueryのtableとviewが乱立してたので、viewのSQLをパースすれば無向グラフ作って依存関係を出せると思ったのでやってみました。
方針
方針としてはproject配下のtableかviewの情報を順番に取得して、viewであればクエリパースしてノードの依存に追加するという感じです。
またBigQueryのSQLパーサーがほぼ見つからず、pipにそれっぽいものがあったのでpythonで書きました。
↑SQLパーサーがなかったのでzeta SQLをビルドしてcgoでサーバー作ろうとしましたが断念しました。
ノード
table_idは、`project_id.dataset_id.table_id` です。依存関係があるtableやviewを`nodes`に追加していきます。
グラフ作成
project->dataset->tableと全部のtableのAPIを叩きながらノードを作っていきます。viewであればSQLパーサーにいれて依存するidを取得して、対象のノードとの関連を作ります。
描写
最終的にpipのgraphvizを使いグラフをsvgに吐き出します。ノードを作りつつ依存するものがあればエッジにも追加していきます。
結果
最終的にscriptは組めたのですがtableとviewが膨大で画像がとても大きくなり、文字が潰れてしまってただのドット絵が生成されてしまいました、、、。
理想は下記のようなgraphvizにあるようなグラフを思い浮かべたのですが、、、。
scriptの全体は create_bq_graph.py これです。
今回の結果をもとに全部を描写するのではなく、個別に辿れるような方針に変えようと思いました。