9
8

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.

VSCode で dbt プロジェクトを快適に書く方法 (BigQuery)

Posted at

この記事は dbt Advent Calendar 2022 12日目の記事です。

VSCode を使って、dbt + BigQuery のプロジェクトを快適にすすめるのに役立つ拡張機能をいくつか紹介したいと思います。

※予定では、dbt metircs や Semantic Layer について書くつもりでしたが変更しました。
※DWH として BigQuery を利用することを前提としています。
※dbt-bigquery プロジェクトの基本的なことはご理解されている方を対象にしています。

紹介する VSCode 拡張機能一覧

Wizard for dbt Core (TM)

dbt プロジェクトにコード補完・クエリのプレビューなどの機能を追加してくれます。位置づけとしては、dbt の Language Server のようです。

セットアップ
  • 必要なパッケージをインストール。pip install dbt-rpc
  • リアルタイムでクエリのコンパイル結果を見るために、ファイルの自動保存を有効にすることが推奨されているため、必要に応じて、"files.autoSave": "afterDelay" などと設定。(必須ではない)
機能
  • クエリのプレビュー (コンパイル)
    • Ctrl-p: WidardForDbtCore(TM): Show query preview

公式の gif (プレビュー)

  • クエリのシンタックスチェック

公式の gif (シンタックスチェック)

  • コード補完
    • テーブル
    • カラム
    • dbt macro
    • 関数 (BigQuery のみ)

公式の gif (コード補完)

  • その他機能
    • model や macro の定義へのジャンプ
    • 関数のシグネチャーヘルプ (BigQuery のみ)

総評

これまで、クエリに問題があると dbt compile して、target/ から問題のクエリを探して、BigQuery のコンソールに貼り付けて、とやっていました。このフローを何とかしたいと思っていたのですが、この拡張機能によって、VSCode 内でコンパイルされたクエリをリアルタイムで確認しながら書くことができるようになりました。

まだ、拡張機能としては Preview の位置付けなので、model や source を作成してから、 補完候補に現れるまでにタイムラグがあったり、あるはずのカラム名が補完候補に出ないことがあったりしますが、総じて生産性を大きく上げてくれる拡張ではないかと思います。

BigQuery Runner

セットアップ
  • 以下のいずれかの方法で認証
    • Ctrl-p: BigQuery Runner: Login でユーザー認証
    • 事前に gcloud auth application-default login を実行しておく
  • 設定 "bigqueryRunner.projectId" でプロジェクト名を指定

※サービスアカウントを利用する方法については、公式のドキュメント を参照

機能

VSCode のエディタ画面から、BigQuery にクエリを投げられるようになります (Ctrl-P: BigQuery Runner: Run)。

公式の gif

基本的には、dbt run でクエリを実行するのですが、開発中ではインタラクティブに修正内容を確認したいことが多々あります。そんなときは、前述のリアルタイムプレビューから、コンパイルされたクエリに移動し、BigQuery Runner: Run するというフローが強力で、ターミナルや BQ の Web コンソールを行ったり来たりする必要がなくなります。

sqlfluff

sqlfluff は Python 製 の SQL Linter/Formatter です。dialect としてBigQuery をサポートしているだけでなく、テンプレートエンジンとして、dbt や Jinja などもサポートしています。カスタマイズできる項目も多く、個人的に SQL Linter/Formatter の決定版かなと思っています。

セットアップ
  • sqlfluff をインストール。pip install sqlfluff
  • .sqlfluff 設定ファイルを用意
  • VSCode でフォーマッターの設定を追加 "[sql]": {"editor.defaultFormatter": "dorzey.vscode-sqlfluff"}

例えば、.sqlfluff で「タブ幅は2」「予約後は大文字」というルールを書くとすると以下のような設定になります。

[sqlfluff]
dialect = bigquery

[sqlfluff:rules]
tab_space_size = 2

[sqlfluff:rules:L010]
capitalisation_policy = upper

機能

Ctrl-P: Format Document で設定したルールで、クエリを整形してくれます。

最後に

dbt のコミュニティはさらにこれから成長していきそうなので、VSCode の拡張機能も今後さらに便利なものが出てくるんじゃないかと期待しています。もし良さそうなものを見つけ次第、記事も更新していきたいと思っています。

9
8
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
9
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?