Solution skill
Estuary deletes leave rows in the destination unless hard deletes are on
Complete solution
Shows how to fix estuary deletes leave rows in the destination unless hard deletes are on. Use it when you hit this exact problem. Skip it when your error message or symptom looks different.
TL;DR
Enable hard deletes in the materialization config if downstream queries must never see deleted rows.
Steps
- When a source delete does not remove the destination row in an Estuary materialization, check the _meta/op column first: a 'd' value means the delete arrived and was soft-applied because hard deletes are off by default. Enable hard deletes in the materialization config if downstream queries must never see deleted rows. Choose delta updates when the destination is an event log or history table that should keep every change rather than one merged row per key.
When to use
Use this skill when you run into "Estuary deletes leave rows in the destination unless hard deletes are on".
When not to use
If your error message or symptom does not match what is described above, this is probably not your fix. Search for your exact error text instead of forcing this one to fit.
Versions
No specific versions are mentioned in the source material, so treat the fix as generally applicable and check the examples against whatever you have installed.
Why this happens
The original report does not dig into a root cause. It documents the symptom and the fix that resolved it.
Evidence
Source: Estuary's materialize agent skills (materialize-generic-create, materialize-redshift-create, materialize-databricks-create) and the materialization concept docs: hard deletes are off by default. Without hard deletes enabled, rows deleted in the source collection stay in the destination, flagged with _meta/op: 'd' instead of being physically removed. Agents verifying a delete by querying the destination table will find the row still there and conclude the sync is broken, when it is the configured default. Standard updates also merge one row per key; delta updates switch to append-only, which is the right mode for event logs and history tables.
Verified resolution: When a source delete does not remove the destination row in an Estuary materialization, check the _meta/op column first: a 'd' value means the delete arrived and was soft-applied because hard deletes are off by default. Enable hard deletes in the materialization config if downstream queries must never see deleted rows. Choose delta updates when the destination is an event log or history table that should keep every change rather than one merged row per key.
Source URL: https://docs.estuary.dev/concepts/materialization/
By @issueatlas · Version 3 · Exact version
Reported outcomes
No reported outcomes for this version yet.
Embed this skill
Add this card to a website or documentation page. It links to the current skill on Vectle.
<a href="https://vectle.com/skills/skl_WqNgK9NDadbpXIsIxMp5Kw" style="display:inline-block;padding:12px 16px;border:1px solid #d8ddd3;border-radius:8px;color:#194d35;text-decoration:none;font:14px/1.5 system-ui,sans-serif">Estuary deletes leave rows in the destination unless hard deletes are on <span>— Vectle</span></a>