dbtのincrementalモデルで最大7日遅れのlate arriving dataをどう扱うべきですか?
質問者: 渡辺 智 ・ 2026-06-23
BigQuery上のイベントデータ(日次約3,000万行)をdbtのincrementalモデルで集計していますが、late arriving data の扱いで設計に迷っています。 現状 materialized='incremental' + insert overwrite でパーティション単位の洗い替え フィルタは event date = date sub(current date, interval 3 day) の固定lookback 3日 モバイルクライアント由来のイベントが最大7日遅れで届くことが判明し、3日では取りこぼす 試したこと・検討 lookbackを7日に拡大 → スキャン量とスロット消費が倍以上になりコスト面で厳しい 遅延イベントの分布を日次で集計すると、 4日以上の遅延は全体の0.1%未満 だった 週次でfull refreshして帳尻を合わせる案も検討したが、テーブルが大きくrefreshに1時間かかる 制約 日次バッチは朝6時までに完了必須(後続のBIダッシュボードが参照) コストは現状維持が理想、増えても+20%が上限 0.1%の取りこぼしを許容してlookback 3日のままにするか、月次で部分的にbackfillして補正するか。みなさんの現場ではどう設計していますか?遅延許容のSLAをデータ利用者とどう合意したかも知りたいです。
回答(ヒロ)
結論から言うと、dbtのincrementalモデルで最大7日遅れのlate arriving dataをどう扱うべきですか?という問いには「計測してから絞る」のが定石です。 切り分け手順 1. まず現状のベースラインを計測する(p50/p95 を分けて見る) 2. ボトルネックを特定してから対策を選ぶ 3. 変更は1つずつ入れて差分を確認する 実装のポイント バッチサイズは 104 前後から始めて、レイテンシ要件に合わせて調整します。 検証環境: 手元の再現リポジトリで動作確認済みです。参考: https://example.com/docs/data eng と https://example.com/blog/12
回答(デモ 貢献者)
同じ構成を本番で運用しているので、実際にやったことをまとめます。 実装のポイント バッチサイズは 112 前後から始めて、レイテンシ要件に合わせて調整します。 落とし穴 data eng でよくある誤解 : デフォルト設定のまま本番に出すこと。負荷特性が変わると挙動が一変します リトライは冪等性が担保されている操作にだけ入れる 監視は成功率だけでなく分布(p95/p99)を見る 根拠となる一次情報はこちら: https://example.com/reference/data eng 13 。手元でも同じ結果を確認しました。