ISSUE
ETLツール(dbt)においてsnapshotと呼ばれる機能があります。
弊社環境においてInsertおよびUpdateはうまく反映されるのに
なぜかDELETEがスナップショットに反映されない場合がありましたので共有します。
TL;DR
1,DELETE反映する際は、invalidate_hard_deletes=True を付与すること。
2.Snapshotに定義するunique_key列はNULLキーを許容しましょう。
テーブル作成用
CREATE TABLE dwh_dev.test
(
- uuid UUID, --NULLを許容しない
+ uuid Nullable(UUID), --NULLを許容する
uuid2 Nullable(String),
value Nullable(String),
update_date timestamp
)
ENGINE = MergeTree
ORDER BY tuple()
スナップショット用
{% snapshot test1 %}
{{
config(
target_schema='snapshots',
unique_key='uuid', -- NULLキーを許容するカラムを指定すること。
strategy='timestamp',
invalidate_hard_deletes=True, -- ソース元のDELETEを反映する際は指定する。
updated_at='upd'
)
}}
select * from {{ source('dwh_dev','test1') }}
{% endsnapshot %}