📌
sqlfluff に render が実装されたので、templating されている sql ファイルの取り回しが便利に
Summary
- sqlfluff の最新版(1.4.2)で、
sqlfluff render
が実装された。 - Airflow などで使われている、jinja template の sql ファイルに、sqlfluff からパラメータを渡して、render できるようになったので、local での取り回しなどが便利になった。
- この記事では、ユースケースをちょっとだけ紹介する。
Install
$ python3 -m venv .venv
$ .venv/bin/pip install sqlfluff
$ .venv/bin/sqlfluff --version
sqlfluff, version 1.4.2
Sample Project
以下のようなプロジェクトを想定する。
$ tree -a -L 2
.
├── .sqlfluff
├── .venv
│ ├── bin
│ ├── include
│ ├── lib
│ └── pyvenv.cfg
├── sql
│ └── sample.sql
└── sqlfluff_libs
└── params.py
.sqlfluff
[sqlfluff]
ignore_templated_areas = True
dialect = bigquery
[sqlfluff:templater:jinja:context]
[sqlfluff:templater:jinja]
library_path = sqlfluff_libs
sample.sql
select
*
from
`foo-project.{{ params.dataset }}.{{ params.table }}`
;
sqlfluff_libs/params.py
import os
dataset = os.getenv("DATASET", "foobar_dataset")
table = os.getenv("TABLE", "foobar_table")
Example
その1. そのまま render してみる
$ .venv/bin/sqlfluff render sql/sample.sql
select
*
from
`foo-project.foobar_dataset.foobar_table`
;
params.dataset
と params.table
が 置換されていることがわかる。
その2. 環境変数で渡して render してみる
$ DATASET=foobar2_dataset TABLE=foobar2_table .venv/bin/sqlfluff render sql/sample.sql
select
*
from
`foo-project.foobar2_dataset.foobar2_table`
;
os.getenv() が反映されているのがわかる。
べんりー
余談
おかげで以下のように、bq コマンドに sql をそのまま渡せるようになりました。うれしー
$ sqlfluff render /path/to/foobar.sql | bq query
Discussion