dbt1.9の内容まとめ
新機能と変更点
1. マイクロバッチ (microbatch incremental_strategy)
概要:
incremental_strategyにマイクロバッチが追加。従来の方法では全データを一度に処理するため、パフォーマンスに問題が発生することがあったが、マイクロバッチではデータを小さなバッチに分けて処理することで、この問題を解消できるようになった
コード例
{{ config(
materialized='incremental',
incremental_strategy='microbatch',
unique_key='sales_id',
event_time='transaction_date',
begin='2023-01-01',
batch_size='day',
concurrent_batches=true,
lookback=3
) }}
select
sales_id,
transaction_date,
customer_id,
product_id,
total_amount
from {{ source('sales', 'transactions') }}
主な機能:
-
クエリ設計の簡素化: モデルクエリをバッチ単位で書くだけで、
event_time、lookback、batch_sizeに基づいて自動でフィルタを生成 -
独立したバッチ処理: 指定した
batch_sizeに基づきデータを自動分割。各バッチは独立して処理されるため、効率が上がりクエリタイムアウトのリスクが減少。失敗したバッチのみをリトライできる -
ターゲット再処理: CLI 引数
--event-time-startと--event-time-endを使って、特定のバッチをロードすることが可能になったdbt run --event-time-start "2024-09-01" --event-time-end "2024-09-04" -
自動並列バッチ実行: 複数のバッチを同時に処理。dbt が並列実行可能かを自動検出し、必要に応じて
concurrent_batches設定を手動で上書き可能
対応アダプター:
- PostgreSQL
- Redshift
- Snowflake
- BigQuery
- Spark
- Databricks
2. スナップショットの改善 (Snapshots improvements)
概要:
スナップショット機能が強化され、設定がより柔軟で一貫性のあるものに。設定、実行、カスタマイズが簡単に。
snapshot/schema.yml
snapshots:
- name: <snapshot_name>
config:
hard_deletes: 'ignore' | 'invalidate' | 'new_record'
主な改善点:
-
新しいスナップショット仕様:
- YAML ファイルで設定可能になり、クリーンで一貫性のある設定が実現した
-
snapshot_meta_column_names設定:- 自動追加されるメタフィールド(例:
dbt_valid_from、dbt_valid_to)の名前をカスタマイズ可能 - メタデータをニーズに合わせて調整できる
- 自動追加されるメタフィールド(例:
-
target_schemaのオプション化:-
target_schemaを省略すると、現在の環境で定義されたスキーマが使われる
-
-
標準的なスキーマおよびデータベース設定のサポート:
- 他の dbt リソースタイプと一貫性があり、環境ごとのスナップショット保存場所を指定できる
-
updated_atデータ型の警告:-
updated_atフィールドが適切なデータ型でない場合に警告が表示される
-
-
dbt_valid_toのカスタムインジケーター設定:-
dbt_valid_to_currentを使ってdbt_valid_toをカスタムインジケーター(例: 未来の日付)に設定可能 - デフォルトは
NULL
-
-
ハードデリートの管理オプション (
hard_deletes):- 削除された行の処理方法を制御
-
ignore(デフォルト)、invalidate、new_recordが選べる -
new_recordを設定すると、削除時に新しいレコードが追加される
既存のスナップショットを安全に移行する方法は、Snapshot configuration migration を参照
3. state:modified の改善
概要:
state:modified の動作が向上し、誤検出や見逃しのリスクが減少した
主な改善点:
- 環境依存の強化: プロダクションではテーブル、開発ではビューといった環境ごとに異なるロジックでも誤検出が減るように強化
-
state_modified_compare_more_unrendered_valuesフラグ: ソース解析中にunrendered_databaseとunrendered_schemaを保持し、state:modifiedチェック時に環境依存ロジックによる誤検出を減少。デフォルトは無効
4. レガシー動作管理 (Managing changes to legacy behaviors)
概要:
レガシー動作の変更を管理する新しいフラグが追加。既存の動作を維持しつつ新機能を導入することができる
主な機能:
-
新しいフラグの導入:
dbt_project.ymlでフラグをTrue/Falseに設定し、最近の変更(デフォルトで無効)を有効化、または既存の変更(デフォルトで有効)を無効化 - 具体的なフラグ一覧:
| フラグ名 | 説明 |
|---|---|
state_modified_compare_more_unrendered_values |
未レンダリングの設定を保持し、state:modified チェック時に比較。 |
skip_nodes_if_on_run_start_fails |
on-run-start フックが失敗した場合、選択されたすべてのノードをスキップ。 |
require_nested_cumulative_type_params |
累積メトリクスが適切にフォーマットされていない場合にエラー。 |
require_batched_execution_for_custom_microbatch_strategy |
カスタムマイクロバッチマクロ使用時にバッチ実行を有効化。 |
restrict_direct_pg_catalog_access(Redshift 用) |
Redshift API を使うか、information_schema をクエリ。 |
5. 各DWH固有の機能の改善
| アダプター | 機能 | 説明 |
|---|---|---|
| Redshift | IAM ロール認証のサポート | Redshift への接続に IAM ロールを使用可能。セキュリティと管理が強化。 |
| Snowflake | Iceberg テーブルフォーマットのサポート |
table、incremental、dynamic tables の3つのマテリアライゼーションで Iceberg フォーマットを利用可能。大規模データの管理が効率化。 |
| BigQuery | ・キーボード割り込みでのクエリキャンセル ・インクリメンタルモデルによる中間テーブルの自動削除 |
・ 実行中のクエリを Ctrl+C などでキャンセルできる。 ・インクリメンタルモデルが使う中間テーブルを自動でドロップし、リソースを節約。 |
| Spark | ODBC ドライバー接続文字列の上書きサポート | カスタム接続が可能になり、接続の柔軟性が向上。 |
6. Quick hits
- データ品質の維持: コントラクトされたモデルを削除、リネーム、無効化すると、バージョン管理されたモデルではエラー、されていないモデルでは警告が出る
- データテストのドキュメント化: データテストのドキュメントが自動生成され、管理がしやすくなった。
-
外部キー制約での
refとsourceの使用: 外部キー制約にrefとsourceを使えるようになり、データモデル間の関係性が明確に -
テストの包括・除外が可能なフラグの追加:
--resource-typeと--exclude-resource-typeフラグで、データテスト(test)やユニットテスト(unit_test)を含めたり除外したりできるようになった