[新機能]CI Jobの実行時にSQLFluffによるリンティングが行えるようになりました

[新機能]CI Jobの実行時にSQLFluffによるリンティングが行えるようになりました

Clock Icon2024.10.26

さがらです。

dbt Cloudの新機能として、CI Jobの実行時にSQLFluffによるリンティングが行えるようになりました。

https://docs.getdbt.com/docs/deploy/continuous-integration#sql-linting-

簡素な内容となりますが、どのように挙動するのかを本記事でまとめてみます。

事前準備

下記の内容に沿って、CI Jobを設定しておきます。

https://dev.classmethod.jp/articles/dbt-cloud-new-ci-job/

リンティング機能の有効化

※私の環境だけかもしれませんが、本機能がデフォルトで表示されていなかったため、サポートチケットをあげて表示させてもらうようにしました。

設定済のCI Jobの編集画面を開き、Execution settingsからLintingにチェックを入れて有効化します。リンティングの処理でエラーが発生したときに、ジョブをそのまま続けるかどうかも選択可能です。

2024-10-18_17h56_18

SQLFluffによるリンティングの確認

今回、事前にdbt projectのルート階層に.sqlfluffを下記の内容で作成しておきました。

ポイントは、templater = dbt-cloudとすることです。 ※サポートの方に問い合わせて教えて頂きました。将来的にはこの定義をしなくてもうまく起動するようになるとのことです。

[sqlfluff]
templater = dbt-cloud
# This change (from jinja to dbt templater) will make linting slower
# because linting will first compile dbt code into data warehouse code.
runaway_limit = 10
max_line_length = 80
indent_unit = space

[sqlfluff:indentation]
tab_space_size = 4

[sqlfluff:layout:type:comma]
spacing_before = touch
line_position = trailing

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

[sqlfluff:rules:aliasing.table]
aliasing = explicit

[sqlfluff:rules:aliasing.column]
aliasing = explicit

[sqlfluff:rules:aliasing.expression]
allow_scalar = False

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

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

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

[sqlfluff:rules:ambiguous.column_references]  # Number in group by
group_by_and_order_by_style = implicit

この上で、下図のようにあるSQLファイルの内容をSQLFluffのルールにマッチしないようなものにあえて書き換え、プルリクエストを発行します。

2024-10-18_18h05_25

すると、下図のようにCI Jobが走り、dbt buildの前にリンティング処理が走りエラーとなりました。今回はCI Jobでの輪ティング設定時にFail fob runにしていたため、リンティングの後につづくbuild処理は動かない形となりました。

2024-10-26_05h39_53

最後に

dbt Cloudの新機能として、CI Jobの実行時にSQLFluffによるリンティングが行えるようになったので試してみました。

以前私もdbt CloudからSQLFluffをCIで実行するために下記のブログを書いたことがありましたが、リンティングを行うことをだけであれば本記事の内容の方が圧倒的に楽ですね!

https://dev.classmethod.jp/articles/dbt-sqlfluff-formatting-via-github-actions/

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.