テック

【SQLFluff】Docker&GitHub ActionsでBigQueryのLintチェックをする【デモコード付き】

使用するLinter

SQLFluff

SQLFluffとは

  • SQLの方言 (*1)に柔軟に対応したSQLリンター
  • ELTアプリケーションを意識して設計され、Jinjaテンプレートやdbtテンプレートにも対応
  • ほとんどのLintエラーを自動修正できる

*1. サポートされるSQL方言:
ANSI SQL / Athena / BigQuery / ClickHouse / Databricks / Db2 / Exasol / Hive / MySQL / Oracle / PostgreSQL / Redshift / Snowflake / SOQL / SparkSQL / SQLite / Teradata / Transact-SQL

Dockerで動かす

$ docker pull sqlfluff/sqlfluff:<version_tag>
$ docker run -it --rm -v $PWD:/sql sqlfluff/sqlfluff:<version_tag> lint <args>

例:

$ docker pull sqlfluff/sqlfluff:0.9.4
$ docker run -it --rm -v $PWD:/sql sqlfluff/sqlfluff:0.9.4 lint sample_sql --dialect bigquery

c.f. https://hub.docker.com/r/sqlfluff/sqlfluff

CIで動かす(Github Actions)

  • Pull Request(以降PR)をトリガーにGitHub ActionsでLinter動かす
  • 以下内容で .github/workflows/lint_sql.yml を作成しGitHubリポジトリに配置する
name: Lint SQL

on: [pull_request]

jobs:
  lint-sql:
    runs-on: ubuntu-latest
    steps:
      - uses: "actions/checkout@v2"
      - uses: "actions/setup-python@v2"
        with:
            python-version: "3.8"
      - name: Install SQLFluff
        run: "pip install sqlfluff==0.9.4"
      - name: Lint sql
        run: "sqlfluff lint sample_sql --dialect bigquery"

c.f. https://github.com/sqlfluff/sqlfluff-github-actions/tree/main/menu_of_workflows/sunrise_movement

上記は、PRをトリガーにsample_sqlディレクトリ配下の*.sqlファイルをBigQuery構文でLintチェックする

実際に動かしてみると以下のようになる。

上記PR:https://github.com/luckyriverr/sqlfluff_ci/pull/3

ルール

  • 一覧
  • 特定の行だけルール無視したい場合、-- noqa: <rule> を記述する
SELECT DATETIME('2021-09-01 12:34:56') AS timestamp, 500 AS amount  -- noqa: L036, L029
UNION ALL
SELECT DATETIME('2021-09-02 01:12:23') AS timestamp, 150 AS amount  -- noqa: L036, L029

c.f. https://docs.sqlfluff.com/en/stable/rules.html#inline-ignoring-errors

  • 特定のルール定義を変更もできる
  • その場合、sqlfluffコマンド実行する直下ディレクトリに .sqlfluff ファイルを格納する(以下サンプル)
[sqlfluff:rules]
tab_space_size = 2

[sqlfluff:rules:L016]
ignore_comment_lines = True
indent_unit = space
max_line_length = 120

c.f. https://docs.sqlfluff.com/en/stable/configuration.html#configuration

デモコード

GitHub: https://github.com/luckyriverr/sqlfluff_ci

以下ですぐに動かせます。

$ git clone git@github.com:luckyriverr/sqlfluff_ci.git
$ cd sqlfluff_ci
$ docker pull sqlfluff/sqlfluff:0.9.4
$ docker run -it --rm -v $PWD:/sql sqlfluff/sqlfluff:0.9.4 lint sample_sql --dialect bigquery

最後に

デモコードも含め、ご自由にご利用ください。

参考

公式ドキュメントはこちら

以下の書籍も参考になります。

ビッグデータ分析
この記事に関連する記事