pre-commitでdbt-coreのyamlファイルのスキーマをチェックする
dbt-coreを使って開発をしているといろいろとyamlファイルを作ることになるので、
これらのスキーマ検証を自動的に行えると便利です。
dbt-core | GitHub
https://github.com/dbt-labs/dbt-core
次のリポジトリで、dbtのjsonschemaが公開されているので、
このエントリでは、
pre-commitのcheck-jsonschemaフックで検証する手順を記載したいと思います。
dbt-jsonschema | GitHub
https://github.com/dbt-labs/dbt-jsonschema
check-jsonschema | GitHub
https://github.com/python-jsonschema/check-jsonschema
動作確認用のdbtプロジェクト作成
動作確認用プロジェクトのディレクトリを作成します。
mkdir dbt-sample && cd $_
Gitのリポジトリを初期化します。
git init
Pythonの仮想環境を用意します。
python -m venv venv
. venv/bin/activate
dbt-sqliteをインストールします。
pip install dbt-sqlite
pip freeze > requirements.txt
dbtプロジェクトを初期化します。
dbt init sample
この時点で、次のようなディレクトリ構成になっています。(dotfileは除く)
- dbt-sample
- sample
- analyses
- macros
- models
- example
- my_first_dbt_model.sql
- my_second_dbt_model.sql
- schema.yml
- example
- seeds
- snapshots
- tests
- dbt_project.yml
- README.md
- venv
- requirements.txt
- sample
pre-commitの設定
次のHookを使うと、pre-commitでjson-schemaの検証ができます。
check-jsonschema | GitHub
https://github.com/python-jsonschema/check-jsonschema
dbtのjson-schemaについての設定は、次のようになります。
.pre-commit-config.yaml
repos:
- repo: https://github.com/python-jsonschema/check-jsonschema
rev: 0.29.2
hooks:
- id: check-jsonschema
name: "Check dbt dbt_project yaml"
files: dbt_project.yml$
types: [yaml]
args: ["--schemafile", "https://raw.githubusercontent.com/dbt-labs/dbt-jsonschema/main/schemas/latest/dbt_project-latest.json"]
- id: check-jsonschema
name: "Check dbt selectors yaml"
files: selectors.yml$
types: [yaml]
args: ["--schemafile", "https://raw.githubusercontent.com/dbt-labs/dbt-jsonschema/main/schemas/latest/selectors-latest.json"]
- id: check-jsonschema
name: "Check dbt package yaml"
files: packages.yml$
types: [yaml]
args: ["--schemafile", "https://raw.githubusercontent.com/dbt-labs/dbt-jsonschema/main/schemas/latest/packages-latest.json"]
- id: check-jsonschema
name: "Check dbt properties yaml"
files: (models|analysis|snapshots)/.*.yml$
types: [yaml]
args: ["--schemafile", "https://raw.githubusercontent.com/dbt-labs/dbt-jsonschema/main/schemas/latest/dbt_yml_files-latest.json"]
前項で、schema.yml, dbt_project.ymlが生成されているので、
これらのファイルをスキーマに沿わないように変更してcommitを試みると、
FAILしてcommitできなくなることが確認できると思います。
以上。