Data Engineering Challenges

Practice by Skill (2026)

Data engineering challenges are bounded tasks that pair a brief and some data with a hidden check, and they come as a SQL query, a Python transform, a table design or a pipeline plan. The useful ones hide duplicates and nulls and punish a rerun. This page covers what each kind tests and how to work one.

Last updated: Proudly published by: Jeff Wahl7 min read

What is a data engineering challenge?

A data engineering challenge is a bounded task with a brief and some data, plus a check that decides whether your answer is right: a query that reconciles 2 tables, a function that cleans a feed, a model for a business, a pipeline that survives a retry. It's the unit of data engineering practice, small enough to finish in 1 sitting and strict enough that a wrong answer shows.

The phrase has another meaning, the problems data engineers hit at work: late data, schema drift, duplicates, backfills, cost. Both meanings describe 1 list, because every production failure has a small version you can practice. A useful challenge differs from a trivia drill because it hides something, so solving it means finding out what the brief didn't say.

SQL challenges: deduplication, ties and windows

SQL challenges reward the habit of asking what 1 row means before writing a line. Hidden failures mostly come from duplicates that inflate a count, NULLs that silently drop rows from a filter or a NOT IN, and ties that make a ranking ambiguous.

Ties are the cleanest example. Take scores of 90, 90, 80. ROW_NUMBER() returns 1, 2, 3, because it numbers rows and breaks the tie arbitrarily. RANK() returns 1, 1, 3 and skips a value after the tie. DENSE_RANK() returns 1, 1, 2. "The top 2 scores" has a different answer under each, so the first move is to ask which one the brief means.

Double Vision

> Ahead of a CRM migration, the data quality team is hunting for email addresses that were entered against more than one account. For each email tied to multiple accounts, return the address, how many accounts carry it, and the earliest and most recent signup dates, with the most-repeated addresses first.

Work more of these in the SQL practice problems, and the SQL interview questions show how the same patterns are asked out loud.

Prepare for the interview
01 / Open invite
02min.

Know Data Engineering Challenges the way the interviewer who asks it knows it.

a Data Engineering Challenges query, the same shape a screen would give you.
The diff against expected. Where ties broke. What you missed.
sandbox
1SELECT user_id,
2 COUNT(*) AS sessions
3FROM events
4WHERE ts >= NOW() - INTERVAL '7 day'
5
Execute your solution0.4s avg.

Python challenges: parse, group and clean records

A data engineering Python challenge is rarely an algorithm puzzle. It hands you a log, a list of events or a half-broken feed and asks for counts, with the duplicates removed or the gaps filled. The tools are plain: dictionaries, sets, sorting and string methods.

The traps are the same each time. An empty input should return an empty result, not raise. Counting by id needs a decision about ids that differ only in case or whitespace. When you deduplicate events and must keep the first, order matters. A dict keeps insertion order, which the language has guaranteed since Python 3.7, so writing an id only when it's absent preserves the original timeline.

Solve them against real inputs in the Python practice problems, and see how interviewers phrase them in the Python interview questions.

Data modeling challenges: declare the grain first

A modeling challenge gives you a business and asks for tables. Every other decision depends on the grain. Kimball's technique page on declaring the grain says it establishes exactly what a single fact table row represents.

The cost of skipping it is arithmetic. Suppose 3 orders carry a $5 shipping fee each, spread over 3, 2, 2 order lines, 7 lines in all. At order grain the fee totals $15. Put the fee on the line-grain table and sum it, and every line repeats it: $35, which is $20 too much. Hidden data catches this because the sample often has 1 line per order.

History is the other recurring test. When a customer moves, a type 2 slowly changing dimension keeps 1 row per period, with validity dates, so old facts still point at where the customer lived then. The data modeling practice problems include both, and the data modeling interview questions cover how to defend a grain choice.

Pipeline challenges: the retry decides the design

Pipeline challenges ask you to plan a flow from source to consumer, and the question under every one is what happens on a second run. Airflow's best-practices guide states the rule: tasks should produce the same outcome on every re-run, and an INSERT during a re-run might lead to duplicate rows.

The arithmetic is short. A daily load writes 1,200 orders worth $48,000. The job fails after the write and the scheduler retries it. If it appends, the table now holds 2,400 rows and reports $96,000, 1,200 rows too many. If it overwrites that day's partition, or upserts on the order id, the retry leaves 1,200 rows.

Row counts after a daily load runs and is retried: an append load holds 1200 rows after run 1 and 2400 after the retry, a duplicate state; an overwrite of the day's partition holds 1200 rows after both runsRow counts after a daily load runs and is retried: an append load holds 1200 rows after run 1 and 2400 after the retry, a duplicate state; an overwrite of the day's partition holds 1200 rows after both runs

The same idea answers backfills, which are reruns of many days at once, and late data, which is a rerun of a day you thought was closed. Design for the second run and the others follow. Try it on the problem below, then work the data pipeline practice problems and compare notes with the data pipeline interview questions.

Disappearing Ink

> An analytics lead keeps fielding the same complaint: a dozen teams need data shapes that the ingest already threw away, while about 10 billion engagement events a day (opens, replays, story views, ad views) keep arriving. Design the pipeline that builds the curated tables those teams query every morning.

Source
Transform
Storage
Quality
Consumer
Queue
Zone
Pipeline Architecture
Sketch the architecture

Add a node from the toolbar or right-click the canvas

Drag from a right port to a left port to wire data flow

Metric Range by Department

> An HR analyst wants to see how the values recorded in `employee_metrics` spread out within each department: the average, the lowest and the highest. Show the departments with the highest average first.

A weekly challenge scored on hidden data

DataDriven runs a Weekly, 1 community data engineering challenge a week. Each comes with a brief, a small sample dataset and a starter file, and is scored blind on hidden data.

Blind scoring changes how you work. The sample is small, so it can only show the shape of the data, never every case in it. A solution tuned to the sample passes the sample and nothing else, so the habit that pays is building your own cases: a duplicate, a null, a tie, an empty day. The discussion forum is where members talk through approaches.

How to work a challenge in 6 steps

  1. 01

    Read the brief for what it leaves out

    List every term the brief does not define, such as what counts as a duplicate or which time zone applies, and whether ties both count. Pick an answer for each before you code.

  2. 02

    State the grain of the input and the output

    Write what 1 row of the input means and what 1 row of the result must mean. Most wrong answers differ from the right one in grain.

  3. 03

    Solve the sample by hand

    Work out the expected output for the sample on paper. If your code gives a different answer, one of the two is wrong, and you find out which early.

  4. 04

    Write the plain version

    Build the simplest correct solution before any optimisation, and keep each step small enough to check on its own.

  5. 05

    Attack it with your own edge cases

    Add rows that break it: a duplicate, a NULL, a tie, empty input, a late row. Fix what fails.

  6. 06

    Run it twice and say what changes at 100 times the volume

    A second run must give the same result, and you should be able to name which step becomes the bottleneck when the data grows.

Data engineering challenges at work and the practice behind each

Duplicates come from a retried load or a doubled event, and the practice is idempotent writes and deduplication with a window function. Late data arrives after the day was reported, and the practice is reprocessing a closed partition without double counting. Schema drift is an upstream team renaming or dropping a column, and the practice is defensive parsing plus a check on the shape of each load.

A wrong grain shows up as a fee or a total that repeats after a join, and the practice is declaring grain before you model or join. Slow jobs usually mean 1 value holds most of the data or thousands of tiny files slow the reads, and the practice is reading a Spark plan and fixing skew by salting or by compacting files. Each of these has a challenge that trains it, so the problems of the field and the exercises are the same list.

What hidden data usually plants

Defects a challenge dataset hides
Duplicate keys
Inflate counts and sums when a join repeats a row
NULLs
Drop rows from filters and break NOT IN
Ties
Make rankings and top N answers ambiguous
Mixed formats
Dates and strings that parse 2 ways or not at all
Empty input
A day or a group with no rows at all
Late or repeated rows
Records that arrive after the day closed or arrive twice

Challenges vs projects vs take-homes

A challenge has a check, so you know in minutes whether you're right. A project has no check and runs for days, but it teaches how a stack fits together. A take-home sits between them: a fixed brief like a challenge, with the scope of a small project and a reviewer who reads your reasoning as well as your output. The sensible order is challenges first for precision, then a project for breadth.

To choose a project, see the data engineering projects list. For more problems to work now, the data engineer practice problems page groups them by domain, and the full practice problems catalogue lets you filter by skill and difficulty.

Data engineering challenges FAQ

What is a data engineering challenge?+
A data engineering challenge is a bounded task with a brief and some data, plus a check that decides whether your answer is right. It can be code, like a SQL query or a Python transform, or a design, like a table layout or a pipeline plan. Good ones hide the cases a careless solution misses: duplicate rows, nulls and rows that arrive late.
Where can I find data engineering practice challenges?+
Look for challenges that run your answer against data you cannot see, since passing a sample proves little. DataDriven runs a Weekly, 1 community data engineering challenge a week with a brief, a small sample dataset and a starter file, scored blind on hidden data, and its practice problems cover SQL and Python as well as data modeling and pipeline design.
How long should a data engineering challenge take?+
A single query or function is 5 to 20 minutes once the pattern is familiar. A design or an end to end pipeline takes longer, and the time goes into reading the brief, listing what it leaves unstated and testing edge cases. If a take-home doesn't state its expected time, ask the recruiter for an estimate.
What is the difference between a challenge and a project?+
A challenge has a fixed brief and a check, so it tells you whether the answer is right in minutes or hours. A project has no check and runs for days, so it teaches how pieces fit together. Challenges build the precision, projects build the breadth, and a strong portfolio has both.
Should I solve challenges in SQL or Python first?+
SQL first for most data engineering roles, because nearly every loop has a SQL round and its patterns (joins, window functions, deduplication) show up again inside Python and Spark work. Add Python once you can write a correct query without looking anything up.
What do hidden test cases usually check?+
Duplicate keys, nulls where a value is expected, ties, empty input, inconsistent formats, and rows that arrive late or twice. A solution that only reads the sample data tends to fail on them, so build your own edge cases before you submit.
02 / Why practice

The candidate who gets the offer

  1. 01

    Reading a solution is not the same as writing one

    Every engineer who has frozen on a query they had read a dozen times knows the gap. The only preparation that closes it is producing the answer yourself, under time, before the interview does it for you

  2. 02

    76% of hiring managers reject on the coding task, not the resume

    From HackerRank's 2024 Developer Skills Report. Candidates who look strong on paper still fail the live screen if they haven't done timed, executable practice

  3. 03

    5 problem shapes cover 80% of data engineer loops

    Dedup, sessionization, top-N-per-group, slowly-changing dimensions, partition tricks. Writing the shapes by hand turns the unfamiliar into pattern recognition

Related guides