Most ETL interview lists test memory. Strong interviews test judgment.
A candidate may know what a staging table is and still struggle when the interviewer asks what happens after a partial load, how to replay a failed batch, or how to prove that yesterday’s data is complete. That is the difference between naming pipeline components and designing a pipeline someone can trust.
This guide takes the second approach. It covers 50 ETL interview questions across fundamentals, SQL, data modeling, testing, incremental loading, CDC, orchestration, reliability, and senior-level design. The answers are intentionally framed around assumptions, correctness, validation, recovery, and trade-offs.
The goal is not to predict the exact question you will receive. No public question bank can do that reliably. The goal is to give you a repeatable way to answer unfamiliar questions without hiding behind tool names.
Key takeaways
Click any topic to expand or collapseStart every design answer with the core parameters
Include the grain, freshness target, data volume, update pattern, and failure assumptions.
Retries require restartable work
Retries are useful only when the work is restartable and its side effects are idempotent or deduplicated.
ETL testing goes beyond row counts
Test mappings, business rules, duplicates, nulls, freshness, deletes, late data, and reconciliation.
CDC is a capture mechanism, not a zero-latency promise
CDC is a change-capture mechanism, not an automatic promise of zero-latency, duplicate-free delivery.
“Exactly once” must name its boundary
For an external sink, a carefully designed at-least-once pipeline with idempotent writes may be the more honest answer.
A senior answer addresses failures and recovery
It explains what can fail, how the team detects it, and how the pipeline recovers without creating a second problem.
ETL interview readiness scorecard
Check each statement you can explain without memorizing a script. Your score is directional, not a hiring prediction.
How to read your score: 0–3 means review the fundamentals; 4–7 means you have a foundation and should practice scenarios; 8–10 means your preparation is production-oriented, but you still need to calibrate to the role and company.
How to use this ETL interview guide
Read the questions in three passes.
- First pass: learn the definitions and vocabulary.
- Second pass: practice answering each question aloud in 60–90 seconds.
- Third pass: add one assumption, one validation check, one failure mode, and one trade-off to every answer.
For broader data-engineering preparation, use this guide beside Vertex Frontier’s 41-question data-engineering interview guide. That article is the wider hub. This one is deliberately narrower: ETL execution, testing, incremental movement, and production reasoning.
| Target role or level | Prioritize these questions | Show evidence of |
|---|---|---|
| Entry-level / junior | 1–10, 11–15, 21–24 | Clear definitions, SQL grain, basic validation, and careful assumptions |
| ETL developer | 6–10, 25–40, 41–44 | Incremental logic, orchestration, retries, CDC, and recoverable design |
| ETL tester / QA | 21–30, 41–43 | Mapping coverage, reconciliation, edge cases, defects, and ownership |
| Senior / staff data engineer | 31–40, 44–50 | Boundaries, trade-offs, cost, security, observability, and incident recovery |
H2: The answer framework: G-V-C-R-T
A useful ETL answer has five parts:
- G — Grain: What does one row or event represent?
- V — Validity: What checks prove that the output is correct?
- C — Change: How are inserts, updates, deletes, and late records handled?
- R — Recovery: What happens after a timeout, duplicate, partial load, or bad deployment?
- T — Trade-off: What do you gain, and what complexity or cost do you accept?
| Question type | Start with | Finish with |
|---|---|---|
| SQL question | Grain, join cardinality, and NULL assumptions | Validation query, edge cases, and dialect caveat |
| Testing question | Expected behavior and acceptance criteria | Failure evidence, severity, and owner |
| CDC question | Source log, event identity, and change semantics | Replay, duplicates, deletes, and sink boundary |
| System-design question | Freshness, scale, source limits, and consumers | Recovery plan, observability, cost, and trade-off |
| Behavioral question | Impact, context, and your responsibility | Evidence, prevention, and the lesson learned |
This framework is more useful than memorizing a fixed script because it works for a SQL question, a testing question, and a pipeline-design question.
Before you stop speaking, check whether your answer contains:
- One explicit assumption about grain, freshness, scale, or source behavior.
- One correctness or data-quality check.
- One failure, retry, late-data, or duplicate case.
- One trade-off and the condition that would change your decision.
ETL fundamentals interview questions

1. What is ETL?
ETL means extract, transform, and load. A pipeline reads data from one or more sources, applies transformations such as cleaning, joining, standardizing, or aggregating, and writes the result to a target such as a warehouse, lakehouse, or operational store.
The important interview detail is not the acronym. Explain the boundaries: what is extracted, where raw data is retained, where business rules run, how failures are isolated, and how the target proves that a load is complete.
A practical design often separates raw, staged, and curated data. That separation makes it easier to replay an extract without repeatedly querying a production source.
2. What is the difference between ETL and ELT?
In ETL, transformation happens before the data is loaded into the final target. In ELT, raw or lightly processed data is loaded first and transformed inside the target platform.
The AWS comparison of ETL and ELT describes this as a difference in ordering and execution location.
Do not claim that ELT is always cheaper, faster, or safer. The answer depends on warehouse capacity, data sensitivity, governance, transformation complexity, and how much raw data the organization is allowed to retain.
A strong answer is: “I would choose based on where compute is available, whether raw retention is permitted, how quickly I need to change transformations, and whether sensitive fields must be filtered before landing.”
3. What are the main stages of an ETL pipeline?
A practical pipeline usually contains:
- Source extraction.
- Raw landing or staging.
- Structural validation.
- Transformation and business-rule application.
- Quality checks and reconciliation.
- Target publication.
- Monitoring, lineage, and alerting.
The exact names vary. What matters is that the stages have clear ownership and failure boundaries. A pipeline that mixes extraction, transformation, and publication in one opaque task is harder to retry safely.
4. What is a staging area, and why is it useful?
A staging area is an intermediate location where extracted data can be validated, normalized, or prepared before publication to the final model.
It helps isolate source systems, preserve a replayable boundary, inspect malformed records, and compare source and target counts. It also gives operators a place to quarantine bad input instead of silently dropping it.
The weakness is that staging creates storage and lifecycle work. You need retention rules, access controls, cleanup, and a clear definition of which version of the data is authoritative.
5. What is the difference between batch and streaming ETL?
Batch processing handles a finite set of records on a schedule or trigger. Streaming processing handles an unbounded flow of events, often continuously. The Apache Beam programming guide uses bounded and unbounded data to describe this distinction.
Do not equate streaming with “real time.” Real-time is a latency objective. A streaming pipeline can still have delays caused by checkpoints, backpressure, source-log lag, network failures, or downstream maintenance.
Choose batch when the business can tolerate scheduled freshness and the simpler operating model matters. Choose streaming when the event flow and freshness requirement justify the added complexity.
6. How do you design an ETL pipeline for a large table?
Start by asking what “large” means in rows, bytes, daily change volume, and source-system limits. Then consider:
- Incremental extraction instead of repeated full scans.
- Partition or range boundaries that match the access pattern.
- Parallel reads that do not overload the source.
- Compressed, columnar intermediate files where appropriate.
- Checkpoints and resumable batches.
- Target-side partitioning, clustering, or sorting.
- Reconciliation at the batch and business-key level.
Avoid giving a universal partition-size or parallelism number. Optimal values depend on the engine, files, warehouse, network, and workload.
7. What is a full load versus an incremental load?
A full load processes the complete source dataset. An incremental load processes only new or changed records since a known point.
Full loads are simple to reason about but can be expensive and disruptive. Incremental loads reduce work, but they introduce questions about updates, deletes, missed windows, late data, duplicate delivery, and backfills.
A production answer should include a full-refresh or rebuild path even when the normal process is incremental. Incremental logic eventually needs repair.
8. What is a data warehouse, and how does ETL support it?
A data warehouse is a system organized for analytical queries rather than day-to-day transaction processing. ETL prepares source data for consistent reporting by applying types, keys, business definitions, history rules, and quality controls.
The interview trap is to describe the warehouse as merely a large database. A warehouse also needs trustworthy definitions, predictable refresh behavior, access controls, metadata, and a way to explain where a number came from.
If your interview shifts from pipeline mechanics to how the warehouse itself is modeled and queried, see our companion guide to 45 Data Warehouse Interview Questions and Answers covering facts, dimensions, SCDs, and grain-safe SQL.
9. What is ETL orchestration?
Orchestration coordinates tasks, dependencies, schedules, retries, alerts, parameters, and backfills. It should make the pipeline’s state visible rather than simply launching scripts.
For example, an orchestrator may wait for an input partition, run extraction, validate the raw batch, transform it, test the target, and publish a success marker. Airflow’s task documentation documents task states and retry-related behavior, but orchestration retries do not make a non-idempotent task safe.
10. What is a data contract?
A data contract is an explicit agreement about a dataset’s schema, meaning, ownership, quality expectations, freshness, and change policy.
A useful contract answers:
- What does each field mean?
- Which fields are required?
- What is the key?
- How are deletes represented?
- What happens when a column changes?
- Who is notified when freshness or quality fails?
Contracts reduce ambiguity between producers and consumers, but they do not replace runtime validation.
The pipeline still needs to test that the delivered data meets the contract.
| Question type | What the interviewer is testing | Your answer should mention |
|---|---|---|
| Definition | Conceptual clarity | Meaning, boundary, and one limitation |
| SQL or testing | Correctness | Grain, nulls, duplicates, and expected result |
| Scenario | Operational judgment | Diagnosis, containment, recovery, and prevention |
| System design | Trade-off reasoning | Freshness, scale, failure modes, cost, and ownership |
Fundamentals become persuasive when you connect every component to a correctness or recovery problem.
ETL SQL and data-modeling interview questions

11. How do you validate that source and target row counts match?
First define the comparison boundary. Are you comparing all records, one partition, one batch, or one business date? Then compare counts at the same grain and after applying the same inclusion rules.
A count match is useful but insufficient. Two datasets can have equal counts and different values. Add checks for keys, nulls, duplicates, aggregates, and a sample or hash comparison where practical.
For a large system, store reconciliation results with the batch ID, source count, target count, difference, status, and timestamp. That turns a one-time query into an auditable control.
12. How would you find records present in the source but missing from the target?
Use an anti-join or an equivalent set-difference operation on a stable business key. Before writing SQL, state whether the key is truly unique and whether nulls are allowed.
Different databases use different syntax and optimization rules. Some support EXCEPT; Oracle commonly uses MINUS; a NOT EXISTS pattern is often portable but still requires careful null and duplicate handling. Label the SQL dialect in an interview instead of presenting one form as universal.
The result should feed triage: missing because of a filter, failed transformation, late arrival, rejected record, or target write failure?
The following examples are illustrative ANSI-style SQL. Confirm the execution plan, null behavior, and dialect-specific syntax in the target warehouse before using them in production.
SQL — anti-join with NOT EXISTS:
SELECT s.order_id
FROM source_orders AS s
WHERE NOT EXISTS (
SELECT 1
FROM target_orders AS t
WHERE t.order_id = s.order_id
);SQL — anti-join with LEFT JOIN:
SELECT s.order_id
FROM source_orders AS s
LEFT JOIN target_orders AS t
ON t.order_id = s.order_id
WHERE t.order_id IS NULL;The two patterns express the same business question when order_id is the intended key. In an interview, explain why you chose the key and how you would handle nullable or non-unique identifiers rather than presenting the syntax as universally interchangeable.
13. How do you detect duplicate records in an ETL target?
Group by the declared key and filter groups whose count is greater than one. Then investigate whether the duplicates are true duplicates, multiple valid versions, or a grain mistake.
This last distinction matters. A customer can legitimately have multiple orders. If the target is supposed to contain one row per customer, joining customers to orders before aggregating can create accidental duplication.
The best answer names the grain before naming the query.
For a quick duplicate count, use GROUP BY and HAVING. This checks repeated keys, but it does not decide whether multiple rows are valid history or an error.
SQL — duplicate keys with GROUP BY:
SELECT order_id, COUNT(*) AS row_count
FROM target_orders
GROUP BY order_id
HAVING COUNT(*) > 1;When you need to inspect which row should survive, ROW_NUMBER() can make the selection rule explicit. The ordering column must represent a documented version or event sequence; an arbitrary timestamp can produce unstable results when ties exist.
SQL — identifying duplicate versions with ROW_NUMBER:
WITH ranked AS (
SELECT
t.*,
ROW_NUMBER() OVER (
PARTITION BY order_id
ORDER BY source_sequence DESC
) AS row_num
FROM target_orders AS t
)
SELECT *
FROM ranked
WHERE row_num > 1;14. How do NULL values affect ETL transformations?
NULL is an unknown or missing value, not the same thing as zero, an empty string, or the literal text “NULL.” It affects joins, comparisons, aggregates, conditional logic, and uniqueness checks.
Ask what the target contract requires. Should a missing amount remain null, become zero, or reject the record? Should an unknown customer be assigned to an inferred member? These are business decisions, not just SQL formatting choices.
Test null behavior explicitly. A query that works on complete development data may fail when production contains missing keys or optional attributes.
15. How do you prevent double counting after a join?
Identify the grain of each input before joining. If one table is one row per order and another is multiple rows per order, joining them directly can multiply measures.
Common fixes include aggregating the many-side first, joining on the complete key, using EXISTS when you only need to test presence, or calculating each metric at its own correct grain before combining results.
Explain the expected row count before and after the join. That simple habit catches many ETL SQL errors.
16. What is a slowly changing dimension?
A slowly changing dimension is a method for managing changes to descriptive attributes such as customer segment, address, or account status.
The interview answer should distinguish the desired history:
- Type 1: overwrite the current value; history is not retained.
- Type 2: create a new versioned row and preserve history, often with effective dates and a current-row indicator.
- Type 3: retain a limited previous value in an additional attribute.
The exact implementation varies by warehouse and modeling convention. dbt snapshots directly document Type 2-style history, so do not present one tool’s snapshot behavior as proof that every SCD pattern is implemented the same way.
17. What is the difference between a fact and a dimension?
A fact records a measurable event or state, such as an order, payment, click, or daily balance. A dimension describes the entities used to filter or group facts, such as customer, product, or location.
The most important modeling concept is grain. State it explicitly: “One row per order line,” “one row per customer version,” or “one row per account per day.” If the grain is unclear, joins and metrics become unreliable.
18. How do you handle late-arriving data?
First define whether “late” means late relative to the source event time, ingestion time, or reporting cutoff.
Then choose a policy:
- Accept and update the affected window.
- Route late records to a correction path.
- Recompute a bounded historical period.
- Use an inferred dimension member until the real dimension arrives.
- Reject only when the business rule truly requires it.
In stream processing, a watermark represents progress in event time; it does not prove that no later record can arrive. Flink’s time documentation explains watermarks and late elements. In a warehouse, late-arriving dimensions and facts may require a separate restatement policy.
19. How would you optimize a slow ETL SQL query?
Diagnose before changing the query. Check the execution plan, join cardinality, filters, data movement, partition pruning, sort operations, skew, and repeated scans.
Then consider:
- Filtering earlier when it is semantically safe.
- Selecting only needed columns.
- Aggregating before a many-to-one join.
- Replacing repeated full scans with incremental logic.
- Adjusting partitioning, clustering, indexes, or file layout for the actual access pattern.
- Materializing an expensive reusable intermediate result.
Do not promise that an index, partition, or rewrite will always help. For example, BigQuery’s partitioning guidance ties pruning benefits to filters on the partitioning column and also warns about overhead from many small partitions.
20. How do you validate an aggregation?
Write down the expected grain and measure definition first. Then validate:
- Row count at the grouped grain.
- Sum and count against a trusted source or independent calculation.
- Null and duplicate behavior.
- Date and timezone boundaries.
- Filters and join conditions.
- Whether the metric is additive, semi-additive, or non-additive.
A revenue total can be additive across products but not necessarily across snapshots of account balance. The answer should show that you understand the business meaning behind the SQL.
SQL accuracy starts with grain and semantics. Syntax comes second.
ETL testing interview questions

21. What is ETL testing?
ETL testing verifies that data moves from source to target with the expected structure, transformations, completeness, accuracy, freshness, and failure behavior.
It is broader than checking whether a job finished. A successful process can still publish duplicates, omit deletes, shift dates, truncate strings, or apply the wrong business rule.
22. What types of ETL testing do you use?
A useful testing portfolio includes:
- Source-to-target mapping tests.
- Schema and metadata checks.
- Unit tests for transformation logic.
- Integration tests across real boundaries.
- Reconciliation tests for counts and values.
- Data-quality tests for nulls, uniqueness, domains, and relationships.
- Regression tests for known business cases.
- Freshness, volume, and anomaly checks.
- Failure and recovery tests.
- Performance tests at representative scale.
No single framework provides all of these automatically. For example, dbt’s data-test documentation describes generic tests such as unique, not_null, accepted_values, and relationships; those are useful controls, not a complete ETL testing program.
| Layer | Example question | Failure it catches | Typical action |
|---|---|---|---|
| Schema / contract | Did the field type, key, or required status change? | Breaking producer change | Quarantine or block publication |
| Transformation | Does this input produce the expected output? | Mapping or business-rule regression | Fail the test and preserve the fixture |
| Reconciliation | Do counts, keys, and control totals agree? | Missing, duplicated, or filtered records | Stop or flag according to policy |
| Freshness / volume | Is the new partition present and plausible? | Stale, empty, or partial source delivery | Alert owner and hold dependent jobs |
| Recovery | Can the same batch be replayed safely? | Non-idempotent retry or bad checkpoint | Replay in an isolated window and reconcile |
| Test-case field | What to record |
|---|---|
| Test ID | A stable identifier linked to the requirement or mapping |
| Source condition | Input state, batch, partition, event, or fixture |
| Expected transformation | Business rule, mapping, type conversion, or filter |
| Expected target result | Output, grain, keys, and accepted state |
| Edge case | NULL, duplicate, late, invalid, update, or delete condition |
| Severity and owner | Blocking or warning status and the responsible team |
| Evidence | Query result, run ID, log, reconciliation record, or screenshot |
Use this template in a take-home assignment or when explaining your testing strategy. It forces you to define the expected result before looking at the observed result.
23. What is source-to-target reconciliation?
Reconciliation compares agreed measures between the source and target for the same batch or business boundary. Measures may include row counts, sums, key sets, status distributions, and control totals.
A good reconciliation record includes source identifier, target identifier, batch or partition, expected result, observed result, tolerance, status, and diagnostic details.
Do not reconcile datasets at different filters or grains. That creates false failures and false confidence.
24. How do you test an ETL mapping document?
For every source field, record its target field, transformation, data type, null rule, default, lookup, and exception behavior. Then turn the mapping into test cases.
Include ordinary values, nulls, boundary values, invalid values, duplicate keys, unexpected codes, long strings, timezone edges, and records that should be rejected. If a field is intentionally dropped, document why.
The mapping should be executable knowledge, not a spreadsheet that nobody checks after implementation.
25. How do you test incremental loads?
Use a controlled sequence:
- Load an initial baseline.
- Add a new record.
- Update an existing record.
- Delete a record if deletes are supported.
- Insert a late record with an old event time.
- Re-run the same window.
- Simulate a failed write and restart.
- Compare the target with an independently rebuilt result.
This exposes the problems hidden by a happy-path test: duplicate appends, missed updates, incorrect watermarks, delete gaps, and unsafe retries.
26. How do you test data quality in production?
Separate blocking checks from monitoring checks. A broken primary key or incompatible schema may stop publication. A small volume change may create an alert for investigation without blocking every downstream consumer.
Track quality results with the dataset version, run ID, rule, observed value, threshold, owner, and action. Quality without ownership becomes a dashboard full of ignored warnings.
27. What would you do when an ETL test fails?
Start by classifying the failure:
- Test defect.
- Source-data change.
- Transformation regression.
- Target-write problem.
- Timing or freshness issue.
- Environment or dependency failure.
Preserve the failing input and run metadata. Compare the last known good version, inspect the first stage where values diverge, and avoid simply loosening the assertion. A weaker test can hide the original defect.
28. How do you test an ETL pipeline with no stable production data?
Use layered test data:
- Small deterministic fixtures for transformation logic.
- Representative distributions for performance and anomaly behavior.
- Masked production-like samples for integration.
- Synthetic edge cases for nulls, duplicates, late records, and schema changes.
- Contract tests between producers and consumers.
Be explicit about what the tests cannot prove. A tiny fixture can validate logic but not production throughput or skew.
29. What is a data-quality test that row counts cannot catch?
A row count will not catch a currency conversion error, swapped customer IDs, a shifted timezone, duplicated revenue with a compensating missing row, or a transformation that maps every status to “unknown.”
Use content-level assertions: key-set comparison, aggregate reconciliation, domain checks, distribution checks, referential integrity, and targeted business examples.
30. How would you test a migration from one warehouse to another?
Define equivalence before moving data. Compare schemas, row counts, keys, aggregates, null behavior, timezones, decimal precision, partition boundaries, and representative query results.
Run old and new pipelines in parallel for a bounded period where feasible. Record differences rather than relying on visual spot checks. Validate performance and cost separately; logical equivalence does not guarantee operational equivalence.
A pipeline is not tested because it passed once. It is tested when correctness, freshness, failure, and recovery have explicit evidence.
Incremental loading, CDC, and reliability questions

31. What is idempotency in ETL?
An operation is idempotent when repeating it produces the same intended final state rather than adding unintended side effects. AWS guidance on safe retries emphasizes stable identities and atomic handling of retry information.
In ETL, idempotency may use a batch ID, event ID, natural key, target constraint, merge/upsert, or deduplication table. The choice depends on the target’s concurrency, delete behavior, null rules, and transaction boundary.
Do not say “we use MERGE, so it is idempotent.” A merge can still duplicate data if the source key is not unique or concurrent writers race.
32. How do you make a pipeline safe to retry?
Use this sequence:
- Give every run and logical batch a stable identity.
- Preserve the input or a reproducible reference to it.
- Make writes atomic where the target supports it.
- Deduplicate or upsert using a documented key.
- Separate temporary output from published output.
- Commit checkpoints only after the corresponding output is durable.
- Test a crash between each major step.
Retries should be bounded and classified. A bad schema should not be retried indefinitely as if it were a network timeout.
- What happens if two workers process the same key at the same time?
- How long do you retain deduplication state?
- How are deletes handled?
- What happens if the merge succeeds but the checkpoint fails?
- Can you rebuild the target from raw input?
33. What is a watermark?
A watermark is a progress signal used to reason about event time or incremental processing. It can tell a system that it has probably advanced far enough to close or finalize part of a window.
It is not proof that future late data cannot arrive. Your answer should state the allowed lateness, correction policy, and what happens to records that arrive after the reporting boundary.
34. What is CDC?
Change data capture records changes made in a source system, such as inserts, updates, and deletes, and makes them available downstream. A connector may perform an initial snapshot and then continue from a transaction log or other source mechanism.
Debezium’s documentation describes snapshot and log-based change-event behavior for supported connectors. AWS DMS documentation also shows why CDC behavior depends on the source engine and configuration.
An excellent interview answer asks about snapshot handoff, ordering, delete representation, offsets, source-log retention, duplicate replay, sink application, and latency. CDC does not automatically mean zero-latency or duplicate-free data.
- How do you prove the snapshot and change stream did not overlap or leave a gap?
- What is the source position, and where is it stored?
- How are deletes and tombstones represented at the sink?
- What happens when the source log is pruned before recovery?
- Which guarantees belong to the connector, and which belong to the sink?
35. CDC versus timestamp-based incremental extraction: which is better?
Neither is universally better.
Timestamp extraction is often simpler to operate, but it can miss updates when timestamps are unreliable, handle deletes poorly, and require an overlap window. CDC can capture row changes more precisely, but it introduces connector, log-retention, ordering, snapshot, schema, and replay concerns.
Choose using source capabilities, acceptable latency, delete requirements, operational maturity, and the target’s ability to apply changes safely.
36. What does exactly-once processing mean?
Exactly-once is a scoped delivery or processing guarantee, not a magic property of an entire architecture. Kafka’s design documentation distinguishes delivery semantics and explains the limits at external-system boundaries.
For a Kafka-native read-process-write path, transactions and committed offsets may provide a defined exactly-once boundary. For an external database or object store, verify the connector’s transaction and checkpoint behavior. Otherwise, say “at-least-once delivery with idempotent or deduplicating writes.”
That answer is more credible than claiming exactly-once across a broker, API, object store, warehouse, and dashboard without naming the coordination mechanism.
37. How do you handle duplicates in a CDC pipeline?
First identify why duplicates occur: replay after a timeout, connector restart, snapshot overlap, at-least-once delivery, parallel consumers, or a non-unique source key.
Then define the target policy. Keep the latest version by event sequence, use a stable event ID, apply an upsert, retain tombstones for deletes, or quarantine ambiguous records. The correct choice depends on ordering guarantees and the sink’s behavior.
Our guide Postgres CDC production guide and its article on handling CDC duplicates in ClickHouse provide useful concrete follow-up reading for these trade-offs.
38. How do you handle schema evolution?
Treat schema evolution as a compatibility contract and rollout process. Ask:
- Is the change additive, breaking, or semantic?
- Which serialization format and registry policy apply?
- Can old readers consume new data?
- Can new readers consume old data during rollout?
- Does the table format preserve field identity?
- How are backfills and downstream contracts handled?
Confluent’s compatibility documentation distinguishes backward, forward, and full compatibility. Apache Iceberg’s evolution guide describes metadata-based schema and partition evolution. These are different boundaries and should not be blended into one universal rule.
39. How do you design backfills?
Make the date or entity range explicit. Backfills should be isolated from normal runs, observable, restartable, and safe to run beside current ingestion.
Decide whether the backfill replaces, merges, or appends to existing data. Protect downstream consumers from seeing a partially corrected range if the business requires atomic publication. Reconcile the repaired interval against an independent expectation.
A backfill is not “run the job with an old date.” It is a controlled change to historical truth.
40. How do you monitor an ETL pipeline?
Monitor more than job status. Useful signals include:
- Run duration and failure rate.
- Source-to-target freshness and lag.
- Input and output volume.
- Rejected and quarantined records.
- Duplicate rate and reconciliation differences.
- Schema changes.
- Checkpoint or offset progress.
- Warehouse cost or resource pressure.
- Data-quality rule results.
- Lineage and downstream impact.
OpenLineage’s object model provides a vocabulary for job, dataset, run, schema, quality, and error metadata. It is a protocol, not a guarantee that every connector emits every useful facet.
Scenario-based ETL interview questions

41. A nightly load failed after writing half the target. What do you do?
First stop downstream publication if consumers could see partial data. Identify the run, input boundary, and last durable checkpoint. Determine whether the target supports transactional rollback, partition replacement, staging-then-swap, or a compensating cleanup.
Then restore the intended state using the pipeline’s retry or replay path. Do not blindly rerun if the first attempt may have committed some records. Reconcile the target and record the incident.
Prevent recurrence with atomic publication, batch IDs, idempotent writes, and a test that kills the process between extraction and publication.
42. The source count matches the target count, but users report wrong totals. What do you check?
Check grain first. Then inspect joins, filters, currency or unit conversions, timezone boundaries, duplicate keys, null handling, and aggregation logic.
Compare a small set of business keys from source to target. Recalculate the metric independently. Review whether the source total and target total use identical inclusion rules.
A matching count only proves that two sets have the same number of rows. It does not prove that the rows mean the same thing.
43. A source API returns pages and occasionally repeats a page. How do you ingest it safely?
Use the API’s documented pagination or cursor semantics, persist the request state, and assign a stable identity to each source record. Store raw responses or a reproducible request reference when policy permits.
Deduplicate at the raw-to-curated boundary, not by silently discarding every repeated response. A repeated page may contain legitimate updates. Use source version, updated timestamp, event ID, or another documented rule.
Apply bounded retries with backoff for transient failures and stop on authentication, schema, or permanent validation errors.
44. Design an ETL pipeline for orders from an operational database to an analytics warehouse.
A concise senior answer could look like this:
- Clarify requirements: order grain, freshness target, expected daily change volume, delete policy, late updates, PII, and consumers.
- Extract: use a source-supported incremental method, such as CDC or an overlap-window timestamp strategy.
- Land: preserve raw changes with source position, ingestion time, schema version, and batch/run ID.
- Validate: check schema, required keys, duplicate event IDs, and source-log or cursor continuity.
- Transform: build orders and order-line models at explicit grains; apply currency, timezone, and status rules.
- Publish: write to a temporary or versioned target and publish only after reconciliation passes.
- Observe: track freshness, lag, counts, rejected rows, duplicates, and downstream impact.
- Recover: replay a bounded range, deduplicate by stable identity, and reconcile after repair.
Mention that the exact CDC connector, warehouse merge behavior, transaction boundary, and delete semantics must be named before claiming an end-to-end guarantee.
When answering a failure scenario, use: Impact → Containment → Evidence → Recovery → Reconciliation → Prevention. This keeps the answer operational without turning it into a vague story.
- Source: What changes, how are deletes represented, and what is the source limit?
- Transport: What is the cursor, offset, event ID, or watermark?
- Storage: Where can I replay the raw input?
- Transform: What is the output grain and business rule?
- Quality: Which checks block publication?
- Publication: How do readers avoid partial data?
- Recovery: What happens after a timeout, duplicate, or late record?
Scenario questions are testing your failure model. Explain how the system behaves when the happy path stops.
Senior ETL and behavioral interview questions

45. How do you choose between tools?
Start with constraints, not brand names. Compare tools on source support, transformation location, latency, replay, testing, observability, schema handling, security, team skills, operating cost, and failure recovery.
For example, a managed connector may reduce operational work but provide less control over unusual source behavior. A custom service may handle a special protocol but create long-term maintenance and on-call responsibility.
For platform trade-offs, our guide Debezium versus Estuary Flow versus Materialize/PostgreSQL CDC comparison is a useful example of evaluating capabilities instead of repeating tool popularity.
46. Tell me about a pipeline failure you handled.
Use a specific structure:
- What was the customer or data impact?
- How did you detect and contain it?
- What evidence did you inspect?
- What was the root cause?
- How did you restore correct data?
- What test, alert, contract, or design change prevented repetition?
Do not turn the answer into a heroic story. Interviewers usually learn more from whether you can explain uncertainty, communicate risk, and leave the system safer.
47. How do you balance data quality with delivery speed?
Classify checks by risk. A primary-key violation, incompatible schema, or broken reconciliation may block publication. A small distribution change may alert an owner while allowing delivery, depending on the use case.
Make the policy visible: which rules are blocking, who owns an exception, how long an exception can remain open, and how the issue is corrected later.
The mature answer is not “always block” or “never block.” It is a risk-based publication policy.
48. How do you explain a technical trade-off to a nontechnical stakeholder?
Translate implementation choices into freshness, correctness, cost, risk, and operational ownership. For example: “We can deliver updates every five minutes, but that requires a change stream, replay storage, and monitoring. A nightly batch is simpler and cheaper, but it delays the dashboard until morning.”
Use a decision record. State what was chosen, why, what was rejected, and what signal would cause the team to revisit the decision.
49. What makes an ETL pipeline production-ready?
Production readiness is a combination of:
- Clear data ownership and contracts.
- Tested transformations and reconciliation.
- Safe retry and replay behavior.
- Bounded resource use and timeouts.
- Alerting with actionable owners.
- Access control and sensitive-data handling.
- Documented backfills and rollback or correction paths.
- Run-level metadata and lineage.
- A supportable operating model.
A pipeline is not production-ready merely because it ran successfully in development.
50. How do you handle PII in an ETL pipeline?
Start by classifying the data and mapping where it is collected, stored, transformed, logged, and exposed. Minimize collection and retention, separate raw and curated permissions, restrict access by role, and avoid placing sensitive values in ordinary logs.
Then name the controls that fit the deployment: encryption, auditing, masking, tokenization, redaction, or de-identification. NIST’s PII guidance frames protection around inappropriate access, use, and disclosure, while Google Sensitive Data Protection documents capabilities such as masking, redaction, bucketing, date shifting, and tokenization.
Do not say that a pipeline is “secure by default” or legally compliant without naming the provider, configuration, jurisdiction, retention policy, and threat model. A strong interview answer also explains what happens when a sensitive field appears where it should not: quarantine, alert, revoke exposure, and document the incident.
A before-and-after interview answer
Weak answer: “I would use Kafka, Spark, and Snowflake. Kafka handles streaming, Spark transforms the data, and Snowflake stores it.”
Stronger answer: “I would first clarify the freshness target, order grain, expected change volume, delete behavior, and whether the source can expose a durable change log. I would land replayable events with source position and schema version, validate keys and ordering assumptions, transform at an explicit grain, and publish only after reconciliation. If the warehouse sink cannot participate in the same transaction boundary as the stream, I would describe the design as at-least-once with idempotent writes rather than promise end-to-end exactly-once. I would monitor lag, duplicates, freshness, rejected records, and recovery time.”
The second answer uses fewer tool names but gives the interviewer more evidence of engineering judgment.
| Weak answer pattern | Stronger answer pattern |
|---|---|
| “I would use Kafka and Spark.” | “I would clarify freshness, source guarantees, grain, replay, and sink behavior before choosing tools.” |
| “I would compare row counts.” | “I would compare counts, keys, aggregates, freshness, and business-rule results.” |
| “Retries make the job reliable.” | “Retries help only when side effects are idempotent and failures are classified.” |
| “CDC gives real-time data.” | “CDC captures changes, but latency, replay, deletes, and sink semantics need explicit verification.” |
Common ETL interview mistakes

Mistake 1: Starting with a tool
A tool is not an architecture. Start with the source, grain, freshness, failure model, and target contract.
Mistake 2: Treating row counts as proof
Counts are one control. Add content checks, business totals, key comparisons, and freshness checks.
Mistake 3: Calling every retry safe
Retries can duplicate writes, repeat API side effects, or publish partial results. Explain identity, atomicity, and deduplication.
Mistake 4: Saying “real time” without a latency target
Give a measurable or at least explicit freshness objective, then name the mechanisms and limitations that affect it.
Mistake 5: Promising exactly-once everywhere
State the boundary. For an external sink, explain the connector’s transaction behavior or use the more defensible at-least-once-plus-idempotency model.
Mistake 6: Ignoring deletes
Incremental designs often discuss inserts and updates while leaving deletes undefined. Ask how deletion is captured, transported, applied, audited, and replayed.
Mistake 7: Giving SQL without naming the grain
A query can be syntactically correct and logically wrong. Say what one row represents before explaining joins or aggregations.
Mistake 8: Treating the take-home project like a production launch
Clarify the timebox and acceptance criteria. A prototype should show sound decisions and documentation; it should not pretend to deliver every production control in a few hours.
Three documented implementation lessons to mention in interviews
Interview answers become more credible when you can connect a principle to a documented system behavior. These are not claims that one product solves every ETL problem. They are compact examples you can use to show how you reason about boundaries.

Case lesson 1: CDC needs a snapshot and a durable position
Debezium’s connector documentation describes an initial snapshot followed by change events read from a source log or equivalent position. The practical lesson is that a CDC design must explain the handoff between the initial state and ongoing changes. It must also say what happens when the connector restarts, when offsets are lost, or when the source log no longer contains the required history.
In an interview, turn that into a checklist: snapshot consistency, source position, delete events, offset storage, replay behavior, and downstream deduplication. The lesson is not “use Debezium.” The lesson is that a change stream is only useful when its recovery boundary is explicit.
Case lesson 2: Exactly-once stops at a system boundary
The Apache Kafka delivery-guarantees documentation distinguishes at-most-once, at-least-once, and exactly-once behavior, while also explaining why coordination with an external system is a separate problem. That gives you a precise way to answer a common interview trap.
If records are read from Kafka and written back to Kafka inside a supported transactional boundary, you can discuss that boundary. If the destination is an external warehouse or API, you must verify the sink’s transaction, checkpoint, or deduplication contract. Otherwise, describe the design as at-least-once with idempotent application rather than promising an end-to-end guarantee you cannot prove.
Case lesson 3: Schema and partition evolution are migration policies
Apache Iceberg documents schema and partition-spec evolution as metadata changes that allow old and new layouts to coexist under defined rules. The interview lesson is that evolution is not simply “add a column and move on.” You need a compatibility policy, reader and writer rollout plan, field-identity rules, backfill approach, and a way to validate old queries against the new layout.
That answer is stronger than saying “Iceberg handles schema evolution.” It shows that you understand the difference between a table-format capability and the organization’s migration process.
Guides for technical round preparation
General concepts help you pass the screening call; hands-on architectural nuances help you pass the system design round. If you want to dive deeper into the specific failure modes discussed above, explore these focused guides:
1. Ingestion runtime & API design
- Python memory bottlenecks: When processing raw flat files or high-throughput extracts, understand memory trade-offs in Why Pandas Is So Slow and evaluate modern columnar alternatives in Choosing Python Data Libraries.
- Source API extraction: For robust cursor-based extraction and rate-limit handling, review production patterns in How to Build a REST API with Python and FastAPI.
2. CDC pipelines & sink-side deduplication
- Production CDC patterns: Learn transaction-log replication and failover handling with Postgres CDC in Production and MySQL CDC to Apache Doris.
- Analytical deduplication: Explore how to handle out-of-order changelogs and duplicates at scale in Handling CDC Duplicates in ClickHouse and ClickHouse ReplacingMergeTree Deduplication.
3. Lakehouse storage & metadata formats
- Table formats & pruning: Understand how hidden partitioning, file pruning, and metadata evolution work under the hood in Apache Iceberg Partitioning and compare trade-offs in Iceberg vs. Raw Parquet.
Printable ETL interview checklist
Final checklist before your ETL interview questions
Before the interview, practice saying these points without notes:
- The grain of the source and target.
- The freshness target and acceptable lateness.
- The incremental key, cursor, watermark, or CDC position.
- The handling of inserts, updates, deletes, and duplicates.
- The checks that block publication.
- The retry and replay strategy.
- The observability signals and alert owner.
- The main trade-off and what would change your decision.
If you can explain those eight points clearly, you can handle far more than a memorized list of ETL interview questions.
FAQs : ETL interview questions
What are the most common ETL interview questions?
How should I answer ETL testing interview questions?
Is ETL or ELT better?
What is the best answer to an idempotency question?
Does CDC guarantee real-time, duplicate-free data?
How many ETL questions should I practice?
What changes for senior ETL interviews?
📋 Article Timeline & History
Successfully updated on October 16, 2026 with the latest details.
This article was originally published on October 14, 2026.
Was this article helpful?









[…] For interview-style framing of ETL pipeline decisions like this, incremental loading, retries, and pipeline reliability, see our 50-question ETL Interview Questions guide. […]
[…] deeper pipeline preparation, pair this guide with VertexFrontier’s ETL interview questions for data engineers and its broader data engineering interview questions and […]