dbt について
dbtは、SQLモデルでデータウェアハウスを変換する開発者向けのコマンドラインツールです。テスト、ドキュメント生成、増分処理、再利用可能なマクロを備えます。
主な機能
- 01Jinjaを使ったSQLモデル
- 02スキーマテストと独自テスト
- 03モデルドキュメントの生成
- 04増分データ処理
- 05再利用可能なマクロとパッケージ
- 06データウェアハウス接続設定
活用シーン
- 01データウェアハウス変換モデルの構築
- 02新しいレコードのみの取り込み
- 03モデルのnull値や重複の検査
- 04依存関係ドキュメントの生成
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ alphaonedev/ openclaw-graph --skill dbtインストール後、Claude Code で/dbtを入力して読み込まれたか確認します。
詳細
目的
dbt(data build tool)は、SQL ベースのモデルを使用してデータウェアハウス内のデータを変換するコマンドラインツールです。開発者はデータ変換の作成、テスト、ドキュメント化を行うことができ、信頼性の高い ETL プロセスを実現できます。
使用する場面
Snowflake、BigQuery、Redshift などのデータウェアハウス向けに SQL データモデルを構築する場合は、dbt を使用します。データパイプラインでの増分データ読み込み、スキーマの進化、自動テストに適しています。リアルタイム処理や非 SQL データソースには適していません。バージョン管理された SQL コードと組み込みの検証機能が必要な場合に dbt を選択してください。
主な機能
- Jinja テンプレートを使って、動的なクエリ(例:パラメーターの挿入に使う
{{ var('date') }})を記述した再利用可能な SQL モデルを .sql ファイルで定義できます。 - YAML 設定を使って、スキーマチェックやカスタムアサーション(例:
not_nullまたはuniqueテスト)などの自動テストを実行できます。 dbt docs generateを使ってモデルからドキュメントを自動生成し、モデルの依存関係や説明を含む HTML を出力できます。is_incremental()マクロを使って増分モデルを処理し、新しいデータのみを処理することでデータウェアハウスの負荷を軽減できます。- dbt hub を介してマクロやパッケージをサポートしており、ユーティリティ関数の追加など、機能を拡張できます。
使用パターン
次のワークフローに従います。1)dbt init でプロジェクトを初期化します。2)models/ ディレクトリに SQL ファイルとしてモデルを記述します。3)profiles.yml で接続を設定します。4)モデルの実行とテストを繰り返します。5)静的データにはシードを、緩やかに変化するディメンションにはスナップショットを使用します。CI/CD では、スクリプトに dbt を組み込みます。たとえば、ボリュームをマウントした Docker コンテナで dbt run を実行します。環境を切り替える場合は、--target dev のようなターゲットを必ず指定してください。
主なコマンド/API
dbt は主に CLI ベースです。直接、またはスクリプト経由で使用します。主なコマンドは次のとおりです。
-
dbt init --name project_name:新しいプロジェクトを作成します。--project-dir /pathでディレクトリを指定します。例:
dbt init --name sales_dbt --project-dir ./sales_project -
dbt run --models model_name --select tag:nightly:モデルを実行します。すべてのデータを再構築するには--full-refreshを使用します。例:
dbt run --models orders --target prod --threads 8 -
dbt test --models model_name:テストを実行します。エラーを記録するには、--store-failuresなどのフラグを追加します。例:
dbt test --select source:raw_data -
dbt docs generate && dbt docs serve:ドキュメントを生成して公開します。自動デプロイのために CI に組み込みます。 -
API のように使用するには、subprocess を使った Python スクリプトで dbt をラップします。例:
subprocess.run(['dbt', 'run', '--models', 'my_model'])。プロファイルには環境変数を使用します。たとえば、$DBT_PROFILES_DIRに/path/to/profiles.ymlを設定します。
統合に関する注意事項
profiles.yml を設定して、dbt をデータウェアハウスと統合します。Snowflake の場合は、次のようにします。
your_profile:
target: dev
outputs:
dev:
type: snowflake
account: your_account
user: your_user
password: "{{ env_var('SNOWFLAKE_PASSWORD') }}"
database: your_db
schema: your_schema
BigQuery の場合は、次のように指定します。
bigquery_profile:
target: dev
outputs:
dev:
type: bigquery
method: service-account
project: your-gcp-project
dataset: your_dataset
keyfile: "{{ env_var('GOOGLE_KEYFILE') }}"
シークレットには環境変数を使用します(例:export SNOWFLAKE_PASSWORD=your_key)。バージョン管理には Git と統合し、オーケストレーションには Airflow などのツールを使用して、タスクとして dbt run を呼び出します。VS Code では、構文ハイライト表示のために dbt 拡張機能をインストールします。
エラー処理
まず dbt debug を実行して接続とプロファイルを検証し、エラーに対処します。SQL のコンパイルエラーが発生した場合は、モデルファイルの構文(例:セミコロンの不足)を確認し、dbt compile でプレビューします。テストが失敗した場合は、出力ログで「column not found」などの詳細を確認し、.yml ファイルのスキーマを更新して修正します。最初のエラーで停止するには、dbt run に --fail-fast を指定します。一般的な方法として、スクリプト内でコマンドを try-catch で囲みます(例:Python では try: subprocess.run(['dbt', 'run']) except Exception as e: log_error(e))。認証に失敗する場合は、$SNOWFLAKE_PASSWORD などの環境変数が設定されていることを確認します。dbt run --target dev --log-level debug でテストしてください。
具体的な使用例
-
シンプルな増分モデルを構築する:
models/orders.sqlを作成し、次のように記述します。{{ config(materialized='incremental') }} select order_id, customer_id from source_orders where order_date > (select max(order_date) from {{ this }})次に、
dbt run --models orders --target devを実行します。これにより、新しい注文のみが処理されます。 -
データモデルを実行してテストする:
models/schema.ymlにテストを定義します。models: - name: customers columns: - name: customer_id tests: - unique - not_null次を実行します:
dbt run --models customers && dbt test --models customers。これにより、モデルが構築され、重複や NULL がないことが検証されます。
グラフの関係性
- クラスター:data-engineering(SQL や ETL ツールなどのスキルとつながっています)。
- タグ:dbt、sql、data-modeling(ほかのスキルにある関連タグとつながっており、例:クエリ最適化の SQL)。
- 関係性:ウェアハウスコネクタに依存し、data-engineering クラスター内のデータパイプラインと統合されます。