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
)を含めたり除外したりできるようになった