A company processes IoT sensor data with Dataflow, writing results to BigQuery. The pipeline occasionally encounters duplicate events from the source (sensors may retry). The company uses BigQuery as the source of truth for analytics. How should you handle deduplication?
- A. Accept duplicates in BigQuery and deduplicate during analysis queries using GROUP BY and ROW_NUMBER()
- B. Let duplicates flow to BigQuery and use INSERT OR IGNORE on the BigQuery side with a unique constraint
- C. Implement deduplication in Dataflow using a Stateful ParDo with a side input bloom filter✓ Correct
- D. Configure Dataflow to use exactly-once processing semantics and rely on the framework to deduplicate
Explanation
Option 1 is correct. Stateful ParDo with a bloom filter (or dedup state) can deduplicate events in Dataflow before writing to BigQuery, ensuring clean data upstream. This is the most reliable approach. Option 2 is partially viable but INSERT OR IGNORE is not a native BigQuery operation (you'd need MERGE or upserts via DML, which is slower). Option 3 is misleading; exactly-once processing in Dataflow does not deduplicate application-level duplicates (sensor retries)—it only prevents framework-level duplication. Option 4 is poor practice; deduplicating during queries is inefficient (slower analytics) and masks data quality issues.