LoginSignup
11
1

More than 1 year has passed since last update.

SQLFuffでdbtプロジェクトのSQLを整形する方法[.sqlfluff]

Last updated at Posted at 2023-03-23

はじめに

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
[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

profiles.ymlのドキュメント

.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文などで値を列挙した後の最後のカンマです

trailing commnaの例
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
スクリーンショット 2023-03-23 19.42.44.png

コマンドでやる場合は以下です。

sqlfluff fix /path/to/sql.sql

プロジェクト内のすべてのsqlを整形したい場合は

sqlfluff fix

でいけます。

おわりに

以上、参考になりましたら幸いです。

11
1
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
11
1