Prerequisites
Event deduplication requires that a unique identifier column is defined on your model:- Set
event_id_colto the name of the column containing unique event identifiers when onboarding your model usingModel.from_data()orModel(). - Events that do not have a value in this column (null or missing) are always accepted and stored without deduplication.
How Deduplication Works
Fiddler applies multiple independent layers of deduplication as events move through the ingestion pipeline. Each layer targets a different source of duplication.| Layer | What it prevents | Window |
|---|---|---|
| Request retry protection | Same HTTP request processed twice due to client retry | 30 minutes |
| Within-batch deduplication | Duplicate event IDs in the same publish call | Entire batch |
| Against recently stored events | Event IDs that already exist in recent ingestion history | 1 hour (default) |
| Across concurrent publish calls | Same event ID arriving in parallel chunks | 5 minutes (default) |
| Storage-level idempotency | Same internal batch resubmitted due to infrastructure retry | 7 days |
Request Retry Protection
When the Fiddler client SDK retries a publish request due to a network timeout or transient error, Fiddler detects the retry and returns the original result without reprocessing the events. This prevents duplicate job submissions and duplicate event ingestion caused by client-side retry logic.- Window: 30 minutes. A retried request received within 30 minutes of the original is recognized and deduplicated.
- Always active: This layer requires no configuration and is always enabled.
Within-Batch Deduplication
If the same event ID appears more than once within a single publish call (for example, duplicate rows in a DataFrame or CSV), Fiddler keeps the first occurrence and drops subsequent duplicates before the events are stored.- Window: The entire publish batch.
Against Recently Stored Events
Before storing incoming events, Fiddler checks whether their event IDs already exist in recently ingested data. If a match is found, the incoming event is dropped.- Window: 1 hour (default). Event IDs are checked against events ingested within the past hour.
Across Concurrent Publish Calls
Large batch uploads are internally split into chunks and processed in parallel. If the same event ID appears across multiple chunks — for example, when overlapping files are uploaded concurrently — Fiddler uses a short-lived shared cache to detect and drop the duplicates.- Window: 5 minutes (default). Event IDs seen within the past 5 minutes are held in cache and used to deduplicate overlapping chunks.
Storage-Level Idempotency
If an internal processing failure causes the same batch of events to be retried and resubmitted to storage, Fiddler’s storage layer silently ignores the duplicate insert using a per-chunk idempotency token.- Always active: This layer requires no configuration.
- It protects against infrastructure-level retries and does not deduplicate individual events by event ID.
Note: If all events in a publish call are identified as duplicates, the call succeeds with no new events stored — it is not treated as an error.
Without Deduplication
When event deduplication is not enabled, duplicate events published via retries or overlapping batches are accepted and stored. This may affect the accuracy of aggregated metrics such as event counts, drift scores, and model performance indicators shown in monitoring dashboards, charts, and alerts. To enable deduplication for your deployment, contact Fiddler support.Limitations
- Deduplication applies to insert operations only. Update operations (used to add ground truth labels or metadata) are never deduplicated.
- Events with a null or missing event ID are never deduplicated. They are always accepted and stored, and receive a system-generated identifier.
- Enabling deduplication does not retroactively correct metrics affected by previously published duplicates.