Study guideFree sample of Pro
Databricks Data Engineer Associate
Every domain of the Databricks Data Engineer Associate exam explained, with decision tables, runnable SQL and PySpark, diagrams and the traps the questions set, following the May 2026 exam guide.
Aligned to the May 2026 exam guide · checked against the Databricks docs on 31 October 2026 · certlake.com/exam/data-engineer-associate/study-guide
New to this exam? Read the overview.
Exam at a glance
| Questions | 45 scored, multiple choice (plus up to 10 unscored) |
| Time | 90 minutes |
| Pass mark | Not published by Databricks; practise to 70% or better |
| Languages | Python (PySpark) and SQL |
| Exam guide | May 2026 (exam version effective 4 May 2026) |
| Domain | Weight | ≈ Questions |
|---|---|---|
| Data Transformation and Modeling | 22% | 10 questions |
| Data Ingestion and Loading | 21% | 9 |
| Working with Lakeflow Jobs | 16% | 7 |
| Governance and Security | 15% | 7 |
| Implementing CI/CD | 10% | 4–5 |
| Troubleshooting, Monitoring, and Optimization | 10% | 4–5 |
| Databricks Intelligence Platform | 6% | 3 |
1. Databricks Intelligence Platform6% of the exam
Delta Lake gives tables ACID transactions, time travel (VERSION AS OF, TIMESTAMP AS OF), schema enforcement and an audit history (DESCRIBE HISTORY). Unity Catalog governs data and AI assets with one three-level namespace: catalog..
How the pieces fit
Pick the compute
| Compute | Use it for | Watch out for |
|---|---|---|
| Serverless (notebooks, jobs, pipelines) | Most new work: starts in seconds, no cluster to configure | Less control over Spark configuration and libraries |
| Jobs compute | Scheduled production jobs on classic compute | Created for the run and terminated after it |
| All-purpose compute | Interactive development and ad hoc analysis | Higher DBU rate than jobs compute; don't run production jobs on it |
| SQL warehouse (serverless, pro, classic) | SQL queries, dashboards and BI tools | SQL only; serverless starts fastest and scales for many concurrent users |
Classic compute has two access modes: standard (formerly shared: many users, Unity Catalog isolation) and dedicated (formerly single user: needed for ML runtimes, GPUs, R and RDD APIs). Older questions may say high concurrency for a multi-user cluster.
Cost: compute is billed in DBUs (Databricks Units) per hour. Serverless charges only while it runs, with no idle cost; classic compute charges for as long as it's up, so use autoscaling and auto-termination. Jobs compute has a lower DBU rate than all-purpose compute.
2. Data Ingestion and Loading21% of the exam
Pick the ingestion method
| Situation | Use |
|---|---|
| Files landing in cloud storage, thousands over time, SQL users | COPY INTO |
| Files landing in cloud storage, millions over time, or schema drift | Auto Loader (cloud) |
| SaaS apps (Salesforce, Workday, …) or databases (SQL Server, MySQL, PostgreSQL) with CDC | Lakeflow Connect managed connectors |
| A source with no managed connector | SQL and Spark APIs, partner connectors, or JDBC/ODBC/REST from a notebook, scheduled with Lakeflow Jobs |
| A one-off local file | The Add data UI, uploading to a Unity Catalog volume or table |
Managed connectors run as Unity Catalog–governed pipelines on serverless compute, and handle authentication, CDC, retries and schema evolution for you.
COPY INTO
COPY INTO main.sales.orders_bronze
FROM 's3://landing/orders/'
FILEFORMAT = JSON
FORMAT_OPTIONS ('inferSchema' = 'true')
COPY_OPTIONS ('mergeSchema' = 'true');
- Idempotent: files already loaded are skipped on the next run, so it's safe to schedule.
COPY_reloads files that were already loaded.OPTIONS ( 'force' = 'true')
Auto Loader
chk = "/Volumes/main/sales/raw/_chk/orders"
(spark.readStream
.format("cloudFiles")
.option("cloudFiles.format", "json")
.option("cloudFiles.schemaLocation", chk)
.load("s3://landing/orders/")
.writeStream
.option("checkpointLocation", chk)
.trigger(availableNow=True) # all new files, then stop
.toTable("main.sales.orders_bronze"))
- File detection: directory listing (default, no extra setup) or file notification (recommended; use it with file events on the external location). Both give exactly-once processing.
- Schema inference: JSON, CSV and XML columns are inferred as strings unless you set
cloudor addFiles. infer Column Types cloud. The inferred schema is stored atFiles. schema Hints cloud.Files. schema Location _collects values that don't fit the schema instead of dropping them.rescued_ data
cloud | On a new column |
|---|---|
add (default without a schema) | Adds it, then fails the stream; a restart picks it up |
rescue | Never changes the schema; new columns go to _ |
fail | Fails until you update the schema or remove the file |
none (default when you give a schema) | Ignores new columns |
Semi-structured data
-- Path into a JSON string column
SELECT payload:customer.id AS customer_id
FROM main.sales.orders_bronze;
-- Parse a JSON array, then one row per element
SELECT explode(
from_json(items, 'ARRAY<STRUCT<sku STRING, qty INT>>')
) AS item
FROM main.sales.orders_bronze;
3. Data Transformation and Modeling22% of the exam
Bronze to silver cleaning
from pyspark.sql import functions as F
silver = (spark.read.table("main.sales.orders_bronze")
.dropna(subset=["order_id"])
.fillna({"country": "unknown"})
.withColumn("amount", F.col("amount").cast("double"))
.withColumn("order_date", F.to_date("order_ts"))
.withColumnRenamed("cust", "customer_id")
.dropDuplicates(["order_id"]))
(silver.write.mode("overwrite")
.saveAsTable("main.sales.orders_silver"))
Other row and column moves: filter/where, drop, split, explode (one row per array element).
Joins and unions
| Operation | Behaviour |
|---|---|
df. | Rows with a match on both sides |
"left" | Every left row; nulls where the right side has no match |
df. | Join on several keys |
F. | Ships the small table to every executor, so the large side isn't shuffled |
cross | Every combination: rows × rows |
df. / union | Appends rows by position and keeps duplicates (SQL UNION ALL) |
df. | Appends rows by column name |
SQL UNION | Removes duplicates; UNION ALL keeps them |
Aggregations
group. approx_ is faster on large data and accepts a small error. df. gives count, mean, stddev, min and max; df. adds the 25/50/75% percentiles.
Tuning parameters
| Setting | Default | What it controls |
|---|---|---|
spark. | 200 | Partitions after a shuffle (joins, aggregations) |
spark. | 10 MB | Tables below this size are broadcast automatically |
spark. | 30 MB | The same, decided at runtime by adaptive query execution on Databricks |
spark. | Total cores | Default partitions for RDD operations |
spark. / spark. | Node-type dependent | Memory per executor and for the driver |
Adaptive query execution (on by default) coalesces small shuffle partitions and splits skewed ones at runtime. Change one setting at a time and re-measure.
Gold objects
| Object | Stores data? | Best for |
|---|---|---|
| View | No: query runs each time | Light logic; hiding rows or columns |
| Materialized view | Yes: precomputed, refreshed (incrementally if possible) | Aggregates for BI |
| Streaming table | Yes: each new source row processed once | Append-only sources (bronze, silver) |
| Table | Yes: you control the writes | Anything you MERGE or overwrite |
Data quality
Expectations in Lakeflow pipelines:
CREATE OR REFRESH STREAMING TABLE orders_silver (
CONSTRAINT valid_id EXPECT (order_id IS NOT NULL)
ON VIOLATION DROP ROW,
CONSTRAINT valid_amount EXPECT (amount >= 0)
ON VIOLATION FAIL UPDATE,
CONSTRAINT recent EXPECT (order_date >= '2020-01-01')
) AS SELECT * FROM STREAM(orders_bronze);
| Action | Python | Bad rows |
|---|---|---|
| Warn (default) | @dp. | Kept and counted in metrics |
DROP ROW | @dp. | Removed before writing |
FAIL UPDATE | @dp. | Stop the update |
Outside pipelines, Delta CHECK constraints (ALTER TABLE … ADD CONSTRAINT … CHECK () reject bad writes.
4. Working with Lakeflow Jobs16% of the exam
A job is a DAG of tasks: notebook, Python script, SQL query, dashboard, pipeline, Run Job and more. Each task can set retries, a timeout and notifications.
A job with branching and Run if
Control-flow features
| Feature | Does |
|---|---|
| Depends on + Run if | Run a task based on its upstream tasks' results |
| If/else condition task | Branch on a boolean expression, e.g. only transform when ingestion added rows |
| For each task | Loop a nested task over an array, optionally in parallel (default concurrency 1) |
| Run Job task | Trigger another job |
| Repair run | Re-run the failed tasks plus the tasks that depend on them; you can choose which |
Run if conditions
| Run if | Runs when |
|---|---|
| All succeeded (default) | Every dependency succeeded |
| At least one succeeded | Any dependency succeeded |
| None failed | No dependency failed and at least one ran |
| All done | Every dependency finished, whatever the result |
| At least one failed | Any dependency failed |
| All failed | Every dependency failed |
Triggers
| Trigger | Starts a run when |
|---|---|
| Scheduled | A cron-style time arrives |
| File arrival | New files land in a Unity Catalog volume or external location |
| Table update | Source tables are updated |
| Continuous | The previous run ends (always running) |
| Manual / API | Someone or something calls Run now |
Use a time-based trigger when data arrives on a fixed timetable or consumers expect a set refresh time. Use a data-driven trigger (file arrival, table update) when arrival is irregular, to avoid empty runs and cut latency.
5. Implementing CI/CD10% of the exam
Git Folders
Git Folders clone a remote repo into the workspace: create and switch branches, pull, commit and push from the UI. Pull requests are opened, reviewed and merged in your Git provider.
Bundle configuration
Declarative Automation Bundles describe jobs, pipelines and other resources as YAML (databricks.) alongside the code, so one codebase deploys to dev, test and prod.
bundle:
name: orders
variables:
catalog:
default: dev_catalog
targets:
dev:
mode: development # "[dev you]" prefix, paused schedules
default: true
prod:
mode: production
variables:
catalog: prod_catalog # per-target override
Reference a variable as ${var.. Set it per target (as above), with --var="catalog=…", or with a BUNDLE_ environment variable.
Promote dev → test → prod
| CLI command | Does |
|---|---|
databricks bundle validate | Checks the configuration |
databricks bundle deploy -t prod | Deploys to a target |
databricks bundle run -t prod orders_ | Runs a deployed job or pipeline by its resource key |
databricks bundle destroy -t dev | Removes what the bundle deployed |
In CI/CD, run these commands authenticated as a service principal, not a user, so deployments don't depend on one person's account.
6. Troubleshooting, Monitoring, and Optimization10% of the exam
Spark UI bottlenecks
Open the slowest stage and read its task summary (min, median, max).
| Symptom in the stage | Problem | Fix |
|---|---|---|
| Max task time or shuffle read far above the median | Data skew | Adaptive query execution skew join handling; salting as a fallback |
| Large shuffle read and write | Wide transformations | Broadcast small tables, filter early, cluster on join keys |
| Spill (memory/disk) above zero | Partitions too big for memory | Smaller partitions (more shuffle partitions), or more memory per executor |
Monitor jobs
The job's runs view compares durations and outcomes over time, so a run that is suddenly twice as slow stands out. A run's task graph shows which upstream task blocked or failed, and repair re-runs just the failed part.
Data layout
- Liquid clustering (
CLUSTER BY (orcol, …) CLUSTER BY AUTO) replaces partitioning andZORDER. You can change keys without rewriting data, andOPTIMIZEclusters new data incrementally. It isn't compatible with partitioning orZORDERon the same table. - Predictive optimization runs
OPTIMIZE,VACUUMandANALYZEautomatically on Unity Catalog managed tables.
Cluster problems
| Symptom | Usual cause |
|---|---|
| Cluster won't start | Cloud quota or capacity, a failing init script or library install (see the event log) |
| Import errors, version clashes | Conflicting libraries: pin versions as compute-scoped libraries |
| Driver out of memory | collect( or to on large data |
| Executor out of memory | Skew, or partitions too large: repartition or add memory |
7. Governance and Security15% of the exam
Managed vs external tables
| Managed | External | |
|---|---|---|
| Storage | Unity Catalog's managed location | A path you own (LOCATION 's3:/) |
DROP TABLE | Data deleted after 7 days (UNDROP until then) | Metadata only; files stay |
| Predictive optimization | Yes | No |
Convert external to managed with ALTER TABLE t SET MANAGED. It keeps the table's history and permissions, and UNSET MANAGED rolls it back within 14 days. Managed to external has no single command: copy the data into a new external table.
Privileges
GRANT USE CATALOG ON CATALOG main TO `analysts`;
GRANT USE SCHEMA, SELECT ON SCHEMA main.sales TO `analysts`;
GRANT MODIFY ON TABLE main.sales.orders TO `etl-sp`;
REVOKE SELECT ON SCHEMA main.sales FROM `analysts`;
- To read a table you need
USE CATALOGon its catalog,USE SCHEMAon its schema, andSELECTon the table (or on the schema or catalog, which is inherited downwards). - Principals are users, groups and service principals. Grant to groups, and run production jobs as a service principal.
Row filters and column masks
-- Row filter: admins see everything, others only US rows
CREATE FUNCTION main.sec.us_only(region STRING)
RETURN is_account_group_member('admins') OR region = 'US';
ALTER TABLE main.sales.orders
SET ROW FILTER main.sec.us_only ON (region);
-- Column mask: only support sees real emails
CREATE FUNCTION main.sec.mask_email(email STRING)
RETURN CASE WHEN is_account_group_member('support')
THEN email ELSE '***' END;
ALTER TABLE main.sales.customers
ALTER COLUMN email SET MASK main.sec.mask_email;
A table's own row filters and column masks are set by its owner. ABAC policies apply row filters and column masks centrally: you tag data with governed tags (e.g. pii = email), and a policy on a catalog, schema or table applies its UDF to every matching table or column, now and in future. Use ABAC when the same rule must cover many tables.
Know it, or just recognise it?
The free diagnostic shows which domains you'd lose marks on, in about 10 minutes and without signing up.
Take the free diagnosticCheat sheet
The two-page cheat sheet: rules, defaults and traps for the last week before the exam.
Open the cheat sheetSpotted something out of date? Email support@certlake.com. CertLake is not affiliated with Databricks, Inc.