vscode-dbt-power-userでdbtの開発やレビューを効率化する

背景

dbtは前職時代から含めると二年以上使っていて、SQLでDWHやデータマートの開発をしようと思うともはやこれなしでは生きられないくらいには便利になっている。dbtがあっても大変なクエリは大変ではあるが、大変さは大分緩和してくれる。dbtがなくて、1つのSQLが1000行以上あり、中間クエリがテストもされていない、という状況はもう戻りたくない...。

dbtに限らずであるが、コードは書いているときの時間よりも時間が経ってから読む時間(コードリーディング)のほうが圧倒的に長い。dbtを使って開発する場合、適切にレイヤリングして複数のSQLファイルに分割してsourcerefで参照することが多くなる。自分はこれまでvimを使ってdbtを書いているが、参照しているモデルファイルをvim上で開きたい場合、以下のようにコマンドを叩いていた。

% git ls-files "*MODEL_NAME*" | peco | xargs -o vim

dbtはファイル名 = モデル名な世界なので、grepgit grepだと引っかけてこれず、仕方なくgit ls-filesを使っていた。これはお世辞にも使いやすいとは言えないだろう。

最近はチームメンバーが書いたSQLをレビューする機会や時間も増えてきていて、こういったdbtのモデルファイルの行き来をもっと効率化したいと思って、よさそうなツールを漁ったところ、vscode-dbt-power-userがよかったのでエントリを書いてみた次第。

vscode-dbt-power-userがよかったところ

導入方法は後述するとして、実際に使ってよかったところを書く。

定義にさっと行ける / 戻れる(Go to definitionが使える)

コードリーディングする上で、これがでかい。ref / source / macroあたりの定義にさっと行ける。自分はg dGo to definitionに割り当てているので、秒で定義に行って元のファイルに戻るのも簡単(Ctrl-oに割り当てている)。dbtのSQLファイルだけど、Go言語やPythonでの開発のような体験ができる。

ボタンを押すでもいいし、ショートカットキーでも定義にさっと行ける sourceも同様

VSCode内でモデル間のリネージが見れる

dbtの強力なところにモデル間のリネージを見れる、というのがある。複雑さを分解できるし、影響範囲の絞り込みなどもやりやすい。しかし、データリネージは開発時には意外と使いにくい。dbt docs generateした後にdbt docs serveをしないと反映されないため、いわゆるホットリロードでデータリネージが更新されるわけではない。

vscode-dbt-power-userは(ホットリロードまではいかないっぽいが)dbt docs generateなどを明示的に打たずともVSCode内でさっとモデル間のリネージが見れる。

モデル間のリネージを見る

直近の親子関係しか表示してくれないが、dbtのリネージはdefaultだと巨大過ぎるため、逆にこれくらいのほうが見やすい。また、Go to definitionで定義を行き来していると、リネージの画面も現在フォーカスが当たっているものに切り替えてくれる。また、リネージ上に出てくるモデル名をクリックすると、VSCode上でそのファイルを開いてくれるのもとても便利である。

VSCode内からdbtのモデルをさっと実行できる

SQLのレビューをしていて「SQLだけ見てても分からん、データも一緒に確認しないと」という場面はAnalytics Engineer / Data Engineerあるあるだと思う。エディタとBigQueryの画面を行ったり来たりするのは割とダルい。VSCode内だけで完結するとうれしいが、vscode-dbt-power-userだとそれができる。

SQLをその場で実行

CMD + Enterでさっと実行できる。ディフォルトだとファイル全体を実行してくれるし、領域を選択しているとその部分のみ実行してくれる。

モデルファイルの単独の実行も簡単

dbtを開発するとき、リポジトリルートでdbt rundbt buildを実行すると、数十分かかってしまうことは珍しくはないだろう。そのため、dbt build --select my_modelのようにselectorを指定して実行することが多いと思う。しかし、毎回モデル名を指定して実行するのはダルい。vscode-dbt-power-userは現在開いているファイルにselectorをかけた状態でrunやbuildをすぐ実行することができる。対象のモデルの特定のテストのみをさっと実行する、ということも簡単にできる。

簡単に実行

コンパイル済みのSQLファイルをさっとプレビューできる

dbtを使った開発をしていて「何かデータのほうがおかしい気がする...」ということはよくあると思う(よくあっては欲しくないが...)。その場合「何かデータがおかしい気がするんですが、ちょっと見てもらえますか?」とSQLを共有したい場合も多い。共有する際はrefなどが入っていないコンパイル済みのSQLを共有したい。素朴にやろうとすると、dbt compileして、target/compiledから対象のSQLファイルを探して...と手間が割と多い。vscode-dbt-power-userでは対象のモデルファイルがコンパイルされたSQLをさっとプレビューして見ることができる。

簡単にプレビュー

まとめ

dbtは便利だが、ゴリゴリと開発やレビューをする上で素朴に開発しているとペインポイントは多い。vscode-dbt-power-userはそのペインポイントを解消してくれるし、このエントリには書いてない新しい機能も最近追加されたりしているので、是非使ってみてはいかがでしょうか。

補足: vscode-dbt-power-userの導入方法

大体READMEを読めばいいんだけど、自分用のメモです。設定は色々指定できるけど、最低限これくらいで動かせるようになる。

  • ファイルの関連付けをjinja-sqlにする
    • sqlに紐付いたままだと動かない。dbtは内部的にはpython + jinjaで動いているので、関連付けを変える必要がある
  • dbtがinstallされているdbt interpreterを指定
    • VSCode内からdbtコマンドを打てるようにする必要があるため