はじめに
sqlfluffでdbtプロジェクトのSQLファイルを整形する方法を記載します。
dbt公式のコーディング規約であるdbt Style Guide
に合わせて設定をカスタマイズする方法についても触れます。
(予約語を小文字にするなど)
CUIだけで実行可能ですが、Visual Studio Code
を使っているのでそちらでの使い方も載せます。
SQLFluffとは
SQLFLuff とは Fishtown Analytics 社が作成した SQL Lint ツールで、多人数での SQL メンテナンスを実行してく際にとても役立つツールの一つです。
「ソフトウェア開発者のための OSS、まとめてみました!」より引用
インストール
pipenvを使用している前提で記載します。
SQLFuffのパッケージをインストールする
pipenv install sqlfluff
pipenv install sqlfluff-templater-dbt
Visual Studio Code
を使用している場合の場合、SQLFuffの便利な拡張機能があるのでお好みでご活用ください
https://marketplace.visualstudio.com/items?itemName=dorzey.vscode-sqlfluff
.sqlfluffの作成
SQLFluffの設定を行うには.sqlfluff
ファイルを作成する必要があります。
.sqlfluff
ファイルはプロジェクトルートに配置します。
.sqlfluffの例
公式ドキュメントはこちら
現状、私の環境では以下のようにしています。ご参考までにどうぞ。
[sqlfluff]
dialect = bigquery
templater = dbt
[sqlfluff:templater:dbt]
project_dir = ./ # 相対パスでプロジェクトのルートを記載します
profiles_dir = ~/.dbt/ # dbtのprofiles.ymlが格納されているパスを記載します。(私の場合dbt power userという拡張を使っており、profiles.ymlが`~/.dbt/`にあるのでこのように記載しています)
profile = default # profiles.ymlの<profile-name>の部分(下記の`profiles.yml`のドキュメントを参考)
target = dev # profiles.ymlの<target-name>の部分(下記の`profiles.yml`のドキュメントを参考)
[sqlfluff:templater:jinja]
apply_dbt_builtins = False
[sqlfluff:rules:capitalisation.keywords]
capitalisation_policy = lower
[sqlfluff:rules:capitalisation.functions]
extended_capitalisation_policy = lower
[sqlfluff:rules:convention.select_trailing_comma]
select_clause_trailing_comma = require
.sqlfluffの解説
dbtに対応するための設定と、一部dbt Style Guide
に合わせるための設定を記述しています。
dbt Style Guide
apply_dbt_builtins
[sqlfluff:templater:jinja]
apply_dbt_builtins = False
この部分はdbt jinjaの組み込み関数(ref)などの機能に対応するかどうかというフラグになっています。
(まだSQLFuffを導入したばかりなので、一旦Falseにして様子を見てます)
予約語と関数の小文字固定
dbt Style Guide
に合わせて予約語は全て小文字にします。
デフォルトだとsqlファイル内の最初の予約語のケースに合わせる設定(consistent: 一貫性のある)になっているので変更しました。
[sqlfluff:rules:capitalisation.keywords]
capitalisation_policy = lower
[sqlfluff:rules:capitalisation.functions]
extended_capitalisation_policy = lower
trailing commna (後ろのカンマ)の有効化
dbt Style Guide
に合わせてtrailing commaを有効にします。
trailing commma
とは、select文などで値を列挙した後の最後のカンマです
select
a,
b,
c,←これ
from test
[sqlfluff:rules:convention.select_trailing_comma]
select_clause_trailing_comma = require
インデントをスペース4つ(four spaces)に
これはsqlfluffのデフォルトなのであえて記載追加はしませんでした。
SQLFuffでSQLファイルを整形する
vscodeの場合、以下の操作で実行できます。
右クリック→Format Document
コマンドでやる場合は以下です。
sqlfluff fix /path/to/sql.sql
プロジェクト内のすべてのsqlを整形したい場合は
sqlfluff fix
でいけます。
おわりに
以上、参考になりましたら幸いです。