背景
dbtは前職時代から含めると二年以上使っていて、SQLでDWHやデータマートの開発をしようと思うともはやこれなしでは生きられないくらいには便利になっている。dbtがあっても大変なクエリは大変ではあるが、大変さは大分緩和してくれる。dbtがなくて、1つのSQLが1000行以上あり、中間クエリがテストもされていない、という状況はもう戻りたくない...。
dbtに限らずであるが、コードは書いているときの時間よりも時間が経ってから読む時間(コードリーディング)のほうが圧倒的に長い。dbtを使って開発する場合、適切にレイヤリングして複数のSQLファイルに分割してsource
やref
で参照することが多くなる。自分はこれまでvimを使ってdbtを書いているが、参照しているモデルファイルをvim上で開きたい場合、以下のようにコマンドを叩いていた。
% git ls-files "*MODEL_NAME*" | peco | xargs -o vim
dbtはファイル名 = モデル名な世界なので、grep
やgit grep
だと引っかけてこれず、仕方なくgit ls-files
を使っていた。これはお世辞にも使いやすいとは言えないだろう。
最近はチームメンバーが書いたSQLをレビューする機会や時間も増えてきていて、こういったdbtのモデルファイルの行き来をもっと効率化したいと思って、よさそうなツールを漁ったところ、vscode-dbt-power-userがよかったのでエントリを書いてみた次第。
vscode-dbt-power-userがよかったところ
導入方法は後述するとして、実際に使ってよかったところを書く。
定義にさっと行ける / 戻れる(Go to definitionが使える)
コードリーディングする上で、これがでかい。ref
/ source
/ macro
あたりの定義にさっと行ける。自分はg d
をGo to definition
に割り当てているので、秒で定義に行って元のファイルに戻るのも簡単(Ctrl-o
に割り当てている)。dbtのSQLファイルだけど、Go言語やPythonでの開発のような体験ができる。
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だとそれができる。
CMD + Enter
でさっと実行できる。ディフォルトだとファイル全体を実行してくれるし、領域を選択しているとその部分のみ実行してくれる。
モデルファイルの単独の実行も簡単
dbtを開発するとき、リポジトリルートでdbt run
やdbt 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コマンドを打てるようにする必要があるため