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.
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.
6 kinds of data engineering challenge
Joins, window functions, deduplication and NULL handling on messy tables
Parsing and grouping records, then cleaning them with plain data structures
Grain and keys, and facts and dimensions with their history
Idempotency, late data, backfills and failure handling
Shuffles and skew, small files, and reading the plan
A brief with sample data, and a hidden check, as in the Weekly
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.
Know Data Engineering Challenges the way the interviewer who asks it knows it.
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.


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.
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
- 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.
- 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.
- 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.
- 04
Write the plain version
Build the simplest correct solution before any optimisation, and keep each step small enough to check on its own.
- 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.
- 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.
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?+
Where can I find data engineering practice challenges?+
How long should a data engineering challenge take?+
What is the difference between a challenge and a project?+
Should I solve challenges in SQL or Python first?+
What do hidden test cases usually check?+
The candidate who gets the offer
- 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
- 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
- 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
SQL practice problems
SQL problems for data engineers, run against hidden data
Data pipeline practice problems
Design flows that survive reruns and late data
Data engineer practice problems
Problems grouped by domain
Data engineering projects
Real repositories to build once the challenges are easy
Data engineering hackathon
Build a working pipeline against a clock with a team
The weekly data challenge
Dirty, production-shaped data, scored blind each week.