💡

dbt cloudでのSQL Fluffの設定で困ったこと

2024/03/27に公開

やりたかったこと

ルール1.予約語は小文字
ルール2.関数も小文字
ルール3.カラムに関してはフォーマットしない
ルール4.インデントはスペース4文字
ルール5.カンマはカラムの前に

最終的なSQL Fluffの設定ファイル

[sqlfluff]
exclude_rules = CP02

[sqlfluff:rules]
tab_space_size = 4
output_line_length = 100
max_line_length = 150
indent_unit = space
comma_style = leading

[sqlfluff:rules:capitalisation.keywords]
capitalisation_policy = lower

[sqlfluff:rules:aliasing.table]
# Aliasing preference for tables
aliasing = explicit

[sqlfluff:rules:capitalisation.functions]
extended_capitalisation_policy = lower

[sqlfluff:rules:layout.select_modifiers]

#自分の環境に合わせて
[sqlfluff:templater:dbt]
project_dir = hoge
profiles_dir = fuga
profile = foo
target = bar

困ったこと

1.ルールの除外がうまくいかない

最初はexclude_rules = L014のようにエイリアスで指定をしていましたが、どうやってもカラムまで小文字にフォーマットされてしまうので困りました。
自分の場合、エイリアスでなくコードでの記載にするようにしたのと、[sqlfluff]の配下に記載したところうまく除外されるようになりました。

2.ルールに則ったフォーマットをしてくれない

除外はうまくいったのですが、今度は記載したルール通りにフォーマットをしてくれませんでした。
リント自体も働かず、予約語や関数名が大文字で書かれているにも関わらずハイライトされませんでした。

こちらも最初は[sqlfluff:rules:layout.L010]のように書いており、除外設定のこともありましたのでコード値での記述も試しましたがうまくいきませんでした。

こちらは[sqlfluff:rules:capitalisation.keywords]のように、ルール名での記述にしたところうまく働くようになった気がします。

ただこちらはもしかするとうまくdbtのIDE再起動が出来ていなかったということが原因かもしれません...

最後に

0から何もわからない状態で試行錯誤して結構ハマってしまったため、もし誰かの助けになれば幸いです!
あくまでも自身の環境でうまくいったルール設定になりますので、他の参考記事も合わせて試してみてください!

Discussion