Self-Assessment Quiz: Batch Ingestion

Twenty questions. Aim for 16 or more. This is the chapter whose material you will use most often.


Question 1

Which three steps of a batch extract do people most often omit?

  • A. Decide the range, read, land
  • B. Acquire a lease, verify, record a manifest
  • C. Read, land, commit
  • D. Verify, commit, release

Question 2

If the watermark commits and the write then fails:

  • A. The next run retries the range
  • B. The range is permanently skipped, and nothing errors
  • C. The extract raises an exception
  • D. The data is duplicated

Question 3

Which is NOT something a full load gets right for free?

  • A. Idempotency
  • B. Handling deletes
  • C. Self-healing past bugs
  • D. Low load on the source

Question 4

Which condition usually forces incremental extraction first?

  • A. The table is large
  • B. The full load puts unacceptable load on the source
  • C. You need history the source does not keep
  • D. Storage cost

Question 5

Ranging over an auto-increment primary key:

  • A. Catches inserts and updates
  • B. Catches inserts only — it silently misses every update
  • C. Catches deletes
  • D. Requires a watermark

Question 6

Which change-detection strategy catches deletes without CDC?

  • A. Timestamp column
  • B. Monotonic id
  • C. Full compare — key plus row hash on both sides
  • D. Version counter

Question 7

updated_at set at transaction start rather than at commit causes:

  • A. Duplicate rows
  • B. A row committing behind an already-advanced watermark, invisible forever
  • C. A cast failure
  • D. Slow extracts

Question 8

Which lie is the only one that produces wrong values rather than missing or extra data?

  • A. Set at transaction start
  • B. Not maintained on every write path
  • C. Granularity too coarse
  • D. A type change during schema drift

Question 9

The upper bound of a safe watermark should come from:

  • A. max(updated_at) of the rows read
  • B. An authority — now() read from the primary
  • C. The replica's clock
  • D. The scheduler's logical date

Question 10

Why must a watermark advance even when no rows were found?

  • A. To keep the manifest complete
  • B. Otherwise the extract rescans an empty range forever, which is what motivated the else now() bug that lost six weeks of orders
  • C. To trigger downstream jobs
  • D. It should not advance

Question 11

The overlap window in a safe watermark converts:

  • A. Duplicates into loss
  • B. Loss into duplicates, which an idempotent write absorbs
  • C. Deletes into updates
  • D. Slow queries into fast ones

Question 12

The right answer to hard deletes, if you can get it, is:

  • A. Periodic full key reconciliation
  • B. Soft deletes in the source — a source-system change worth asking for
  • C. Full loads
  • D. Ignoring them

Question 13

An overlap window combined with tombstone reconciliation can:

  • A. Lose rows
  • B. Resurrect a deleted row
  • C. Corrupt the watermark
  • D. Nothing — they are independent

Question 14

When ingesting files, why is filename alone insufficient to know what you have processed?

  • A. Filenames may contain invalid characters
  • B. Partners overwrite the same filename with different content, and re-send after failures
  • C. Filenames are not indexed
  • D. It is sufficient

Question 15

A file that never arrives:

  • A. Raises an error in the pipeline
  • B. Produces no error anywhere — you must alert on absence
  • C. Is retried automatically
  • D. Fails the manifest check

Question 16

SELECT * in a bronze extract is:

  • A. Always wrong
  • B. Correct — you want whatever arrives — with a schema check beside it
  • C. Correct only for small tables
  • D. Required by Parquet

Question 17

Chunking orders by placed_at rather than by order_id produces:

  • A. Faster extracts
  • B. Wildly uneven chunks, because Black Friday is 6.28× the median
  • C. Fewer chunks
  • D. Better compression

Question 18

Throttling a backfill is described as:

  • A. Expensive but necessary
  • B. Free in money — node-hours are node-hours — and valuable in risk
  • C. Only worthwhile for large backfills
  • D. A last resort

Question 19

A backfill is a different program from an incremental load because:

  • A. It uses different libraries
  • B. It processes a bounded historical range, may run at higher concurrency, and will be run more than once
  • C. It writes to a different table
  • D. It runs less often

Question 20

Restartable and idempotent differ in that:

  • A. They are the same property
  • B. Restartability decides what to redo; idempotency makes redoing harmless
  • C. Idempotency implies restartability
  • D. Restartability implies idempotency

Answer Key

1. B — §13.1. And each omission has a signature failure: interleaved runs, an empty result you cannot interpret, and an unanswerable question later.

2. B — §13.1. The single most damaging ordering mistake in ingestion, because the next run starts from the advanced watermark.

3. D — §13.2. Load is exactly what a full load costs. The other three are free.

4. B — §13.2. Chapter 7 §7.3's problem, and it usually fires before size does.

5. B — §13.3. Correct only for genuinely append-only tables, which is a claim to verify rather than assume.

6. C — §13.3. Needs nothing but a stable key, and is frequently the right answer for a mid-size table with no reliable updated_at.

7. B — §13.4, lie 1. updated_at is a value the application writes; visibility is governed by commit order. Two different clocks.

8. D — §13.7. Additions and removals are structural and visible; a type change is semantic — and a permissive cast setting turns it into silent nulls.

9. B — §13.4, property 1. Never max() of what you happened to read.

10. B — §13.4, property 3. The bounded range makes this automatic.

11. B — §13.4, property 2. Chapter 4 §4.5's central trade.

12. B — §13.5. Product teams frequently agree, because soft deletes are useful to them too.

13. B — §13.5, 🔁 callout. Two independently correct mechanisms, jointly wrong, invisible in each one's own tests.

14. B — §13.6. Hash the content as well.

15. B — §13.6. Alert on absence, not only on failure.

16. B — §13.7. Bronze must accept whatever arrives; the check announces the change without blocking it.

17. B — §13.8. Chapter 4 §4.2's skew, appearing in the extract rather than the processing, with an identical symptom.

18. B — §13.10, 💸 callout. What it buys is on the other meter — not competing with the nightly load or the source.

19. B — §13.10. Chapter 1's incident was a one-off backfill promoted to a schedule without being re-reviewed as one.

20. B — §13.11. The chunk manifest gives you both, and you need both.


Topic map

Missed Reread
1, 2 §13.1 — the seven steps
3, 4 §13.2 — full versus incremental
5, 6 §13.3 — change detection
7, 9, 10, 11 §13.4 — the four lies and the three properties
12, 13 §13.5 — deletes
14, 15 §13.6 — files
8, 16 §13.7 — schema drift
17 §13.8 — parallelism
18, 19 §13.10 — backfills
20 §13.11 — restartable versus idempotent