SQL-formattering med SQLFluff¶
SQLFluff er et linting- og formatteringsverktøy for SQL. I dbt-prosjekter brukes det til å holde SQL-koden konsistent på tvers av bidragsytere – tilsvarende det black gjør for Python.
Installer SQLFluff¶
SQLFluff er allerede tilgjengelig i Knast. Sjekk versjon med:
sqlfluff version
Vil du installere det lokalt:
pip install sqlfluff sqlfluff-templater-dbt
Konfigurasjon¶
SQLFluff konfigureres via en .sqlfluff-fil i roten av dbt-prosjektet. Eksempel tilpasset NAV/Oracle/dbt:
[sqlfluff]
templater = dbt
dialect = ansi
exclude_rules = RF05
[sqlfluff:templater:dbt]
project_dir = .
[sqlfluff:indentation]
tab_space_size = 4
[sqlfluff:rules:capitalisation.keywords]
capitalisation_policy = upper
[sqlfluff:rules:capitalisation.identifiers]
capitalisation_policy = lower
[sqlfluff:rules:capitalisation.functions]
capitalisation_policy = upper
[sqlfluff:rules:layout.long_lines]
max_line_length = 120
Oracle og dialect
SQLFluff støtter ikke Oracle-dialect direkte. Bruk ansi som dialect og legg eventuelt til Oracle-spesifikke unntak ved behov.
Bruk¶
Lint én fil¶
sqlfluff lint models/staging/stg_kilde__hendelser.sql
Lint hele prosjektet¶
sqlfluff lint models/
Fiks automatisk¶
sqlfluff fix models/staging/stg_kilde__hendelser.sql
Sjekk endringer etter fix
sqlfluff fix endrer filer på disk. Gjennomgå diff-en i Git før du committer.
Integrasjon med dbt-templater¶
For at SQLFluff skal forstå {{ ref() }}, {{ source() }} og Jinja-kode i dbt-modeller, må du bruke dbt-templater. Dette krever at dbt er installert i samme miljø og at prosjektet er konfigurert.
[sqlfluff]
templater = dbt
Alternativt kan du bruke jinja-templater som er raskere, men som ikke forstår dbt-makroer fullt ut:
[sqlfluff]
templater = jinja
Legg til i CI/CD¶
For å hindre dårlig formatert SQL i main, kan SQLFluff kjøres i GitHub Actions:
- name: Lint SQL
run: sqlfluff lint models/ --dialect ansi
Ignorer filer¶
Legg til en .sqlfluffignore-fil for å ekskludere mapper eller filer:
target/
dbt_packages/
macros/