dbt覚書
dbtについての覚書 ** 元の記事は、githubに置いてます github.com
確認したバージョン
% dbt --version Core: - installed: 1.2.0 - latest: 1.2.0 - Up to date! Plugins: - bigquery: 1.2.0 - Up to date!
1. dbt CLI
- インストールして使用するCoummunity版のツール
1.1. インストール
1.2. ざっくりとした使い方
% dbt --version # dbtのインストールされたバージョンを確認する % dbt init [プロジェクトフォルダ] # 初期セットアップ % cd [プロジェクトフォルダ] # 作成したプロジェクトフォルダの中に入る % dbt debug # 設定ファイル通りにデータベースに接続できるかチャックする % dbt deps # 追加設定したパッケージを取り込む % dbt run # モデルを作成する % dbt test # 作成したモデルをテストする
1.3. フォルダ・ファイルの構成
. ├─ .dbt │ └─ profiles.yml # 設定ファイル └─ プロジェクトフォルダ ├─ dbt_project.yml # プロジェクトの設定ファイル ├─ analyses ├─ dbt_packages # 追加でインストールしたパッケージを格納するフォルダ ├─ logs # 実行したログが出力されるフォルダ ├─ macros # SQLで使うマクロを保存するフォルダ ├─ models # モデルのスキーマやSQLを保存するフォルダ │ ├─ schema.yml # モデルのスキーマを設定するファイル、テストも書く │ └─ hogehoge.sql # モデルのSQLを書くファイル ├─ seeds # インポートするCSVファイルを保存するフォルダ ├─ snapshots # スナップショットを保存するフォルダ ├─ target # モデルやテストで作成したSQLを保存するフォルダ └─ tests # テスト用のSQLを保存するフォルダ
2. テスト
- dbtを使って、モデルのテストを行う
- Generic testsとSingular testsがある
- ドキュメント
2.1. dbtのテストパターン
- モデルやカラムごとに行いたいテストパターンをまとめました
カラム
No. | 分類 | テスト事項 | 機能 | 書き方 |
---|---|---|---|---|
1 | 値の確認 | ユニークな項目か | 標準 | unique |
2 | 値の確認 | 必ず値が入っているか | 標準 | not_null |
3 | 値の確認 | 指定した値が入っているか | 標準 | accepted_values |
4 | 値の確認 | 指定した値が入っていないか | dbt_utils | not_accepted_values |
5 | 値の確認 | 値が指定した範囲内に入っているか | dbt_utils | accepted_range |
6 | 値の確認 | 条件通りの結果になるか | dbt_utils | expression_is_true |
7 | 列の確認 | 他のテーブルと結合できるか | 標準 | relationships |
モデル
No. | 分類 | テスト事項 | 機能 | 書き方 |
---|---|---|---|---|
1 | 行の確認 | 他のモデルと、モデルの行数が同じか | dbt_utils | equal_rowcount |
2 | 行の確認 | 他のモデルより、モデルの行数が少ないか | dbt_utils | fewer_rows_than |
3 | 列の確認 | 他のモデルと、共通の項目になっているか | dbt_utils | equality |
4 | 列の確認 | 指定された項目が入っているかj | dbt_expectations | expect_table_columns_to_contain_set |
5 | 列の確認 | 指定された項目が入っていないか | dbt_expectations | expect_table_columns_to_not_contain_set |
6 | 列の確認 | 指定された項目と一致しているか | dbt_expectations | expect_table_columns_to_match_ordered_list |
7 | 列の確認 | 列数があっているか | dbt_expectations | expect_table_column_count_to_equal |
8 | 値の確認 | 条件通りの結果になるか | dbt_utils | expression_is_true |
2.2. Generic tests
- ./models/schema.yml にテストしたい内容を記載する
- 標準の機能を使う
- dbt_utilsを使う
- dbt_expectationsを使う
version: 2 models: - name: teams_all description: "teams all" columns: - name: pos description: "list postion" tests: - not_null - name: id description: "team id" tests: - unique - not_null
2.3. Singular tests
- testsフォルダにテスト用のSQLを書く