tetsuwan blog

鉄ワン(@tetsuwan30)の気ままなブログ

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. テスト

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

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を書く