🐕

SQLFluffをSnowflakeとdbtで使ってみる

2023/06/16に公開

概要

dbtを作っている会社がつくっているというsqlfluffを試してみます。
SQLFluffとは、SQLのLinter(文法やコードスタイルをチェック)したり、fix(整形)したりするツール
※かなり昔に下書きとして書いた記事をエイやって公開しちゃいます

対象としては、

  • ANSI SQL
  • BigQuery,Snowflake,Redshift
  • MySQL,Postgres
    などもある。

あと、dbt にも対応している(Jinjaマクロなども)

$ sqlfluff dialects

調べることができる。

インストール

MacOSを使っているので、homebrew を使ってインストールします。
※他には、pip install sqlfluffというやり方もあります。

$ brew install sqlfluff

Running `brew update --preinstall`...
==> Auto-updated Homebrew!
Updated 3 taps (homebrew/cask-versions, homebrew/core and homebrew/cask).
==> New Formulae
.............
==> awscli
The "examples" directory has been installed to:
  /usr/local/share/awscli/examples

zsh completions and functions have been installed to:
  /usr/local/share/zsh/site-functions
==> pipenv
zsh completions have been installed to:
  /usr/local/share/zsh/site-functions

なんやかんやインストールやアップグレードが走るので、そこそこ時間がかかりました。

インストールしたバージョンの確認を行います。

% sqlfluff version
0.11.2

Lintを試してみる (ANSI SQL & Snowflake)

SQLのコード規約を作成

  • 一行80文字
  • インデントはスペース2文字
  • 予約語・関数は小文字に統一
  • テーブル名なども小文字に統一
[sqlfluff:rules]
tab_space_size = 2

[sqlfluff:rules:L07]
operator_new_lines = after

[sqlfluff:rules:L010]
capitalisation_policy = lower

[sqlfluff:rules:L016]
ignore_comment_lines = True
indent_unit = space
max_line_length = 80
tab_space_size = 2

[sqlfluff:rules:L019]
comma_style = leading

[sqlfluff:rules:L030]
extended_capitalisation_policy = lower

Rule Reference

https://zenn.dev/gak_t12/articles/5e19585d53b862

参考

https://dev.classmethod.jp/articles/sqlfluff-dbtcoalesce/
https://dev.classmethod.jp/articles/sqlfluff/
https://zenn.dev/takimo/articles/918a51c9bdd486
https://zenn.dev/tenajima/articles/f4f99caab361c1
https://zenn.dev/takimo/articles/86b347fd8b5c32

Discussion