Databricks Certified Data Engineer Associate Cheat Sheet

Cheat sheet: exam-prep reference for Databricks Certified Data Engineer Associate candidates: Delta Lake, Spark SQL, ingestion, governance, jobs, and troubleshooting.

This Cheat Sheet is an independent study aid for candidates preparing for the Databricks Certified Data Engineer Associate exam, code Databricks DEA. It focuses on practical distinctions, commands, and design choices that commonly appear in data engineering scenarios on Databricks.

Use the tables for a quick pre-exam check. Expand a topic’s notes for explanations, examples, and additional distinctions.

Scope and study context
  1. Start with topic drills on Delta Lake, ingestion, streaming, jobs, and governance.
  2. For each missed question, identify whether the issue was concept confusion, command recognition, or scenario judgment.
  3. Read the detailed explanations, then rewrite the decision rule in your own words.
  4. Take mixed question bank sets after you can consistently handle single-topic drills.
  5. Use mock exams only after your weak areas are specific enough to review efficiently.

Practical next step: begin with a short set of original practice questions on Delta Lake and ingestion, then review every explanation before moving to mixed Databricks DEA practice.

High-Yield Exam Map

AreaKnow how to answer
Lakehouse architectureBronze/silver/gold design, Delta Lake as the table format, batch vs streaming, data quality layers
Delta LakeACID transactions, transaction log, time travel, schema enforcement/evolution, MERGE, OPTIMIZE, VACUUM
Spark SQL and DataFramesTransformations vs actions, joins, aggregations, windows, null handling, deduplication, file/table reads
IngestionCOPY INTO, Auto Loader, batch reads, streaming reads, schema inference, checkpoints
OrchestrationDatabricks Workflows, jobs, tasks, dependencies, job clusters, scheduling, retries
GovernanceUnity Catalog object hierarchy, catalogs, schemas, tables, views, volumes, privileges, managed vs external data
Performance and troubleshootingPartitioning, file sizes, data skipping, caching, broadcast joins, shuffle, skew, query plans
Production behaviorIdempotency, incremental loads, checkpointing, permissions, alerts, parameterization

Lakehouse Object Model

ConceptExam-ready meaningCommon trap
WorkspaceUser-facing Databricks environment for notebooks, jobs, clusters, repos, SQL assetsWorkspace is not the same as the Unity Catalog metastore
MetastoreGovernance container for Unity Catalog metadataA workspace can be attached to a metastore; permissions are still object-level
CatalogTop-level namespace in Unity CatalogCatalogs contain schemas, not directly arbitrary notebooks
SchemaNamespace inside a catalog; similar to a databaseIn SQL, USE SCHEMA or fully qualify names to avoid wrong object references
TableStructured data object, commonly DeltaA table may be managed or external
ViewSaved query over tables/viewsStandard views do not store data; permissions and lineage matter
Materialized viewStores query results and can be refreshedNot the same as a regular view
VolumeUnity Catalog object for non-tabular filesUse volumes for governed file access, not table queries
External locationGoverned reference to cloud storageRequires appropriate storage credential and privileges
Storage credentialIdentity/credential Databricks uses to access cloud storageDo not confuse with a user secret or personal access token
Notes and examples

Naming Pattern

Prefer fully qualified object names in exam scenarios involving governance or multiple environments:

SELECT *
FROM catalog_name.schema_name.table_name;

Managed vs External Tables

DecisionManaged tableExternal table
Data locationDatabricks-managed storage locationUser-specified external path
LifecycleDropping the table can remove both metadata and managed dataDropping the table removes metadata, not necessarily underlying files
GovernanceGoverned through Unity CatalogGoverned through Unity Catalog plus external location controls
Best forDefault lakehouse tables, simplified lifecycleShared storage, existing data lakes, cross-system data ownership
Exam signal“Let Databricks manage storage”“Data already exists in cloud storage” or “retain files after dropping table”

Example DDL:

-- Managed Delta table
CREATE TABLE main.sales.orders (
  order_id STRING,
  order_ts TIMESTAMP,
  amount DECIMAL(10,2)
);

-- External Delta table
CREATE TABLE main.sales.orders_ext
LOCATION 's3://example-bucket/path/orders';

Delta Lake Essentials

FeatureWhat it doesExam use
ACID transactionsReliable concurrent reads/writesAvoid corrupt partial writes
Transaction log_delta_log records table versionsEnables time travel, rollback-style reads, metadata tracking
Schema enforcementRejects incompatible writesProtects table quality
Schema evolutionAllows approved schema changesUseful for evolving source data, but should be explicit in production
Time travelQuery older table versions or timestampsAudit, reproduce, recover from bad writes
MERGEUpsert/delete based on match conditionIncremental CDC-style loads
OPTIMIZECompacts small filesImprove scan performance
Z-ordering / clustering conceptsCo-locates related data for skippingUseful for common filter columns; do not use blindly
VACUUMRemoves old unused data filesCan limit time travel and rollback options
Change Data FeedExposes row-level changes when enabledIncremental downstream processing
Notes and examples

Delta Time Travel

SELECT *
FROM main.sales.orders VERSION AS OF 12;

SELECT *
FROM main.sales.orders TIMESTAMP AS OF '2026-06-01T00:00:00Z';

High-yield distinction:

NeedChoose
Query previous table stateTime travel
Undo bad write manuallyRead old version, then overwrite/restore using approved pattern
Free old file storageVACUUM
Track row-level inserts/updates/deletesChange Data Feed

Delta Lake Essentials

Delta Lake is one of the most important topics for the Databricks Certified Data Engineer Associate exam. Focus on what Delta adds beyond ordinary Parquet files.

Delta Lake Features to Know

FeatureWhy it mattersTypical command or concept
ACID transactionsReliable concurrent reads/writesDelta transaction log
Schema enforcementPrevents incompatible writesWrite fails unless schema is compatible
Schema evolutionAllows controlled schema changesmergeSchema or ALTER TABLE patterns
Time travelQuery older table versions or timestampsVERSION AS OF / TIMESTAMP AS OF
UpsertsInsert/update records from source into targetMERGE INTO
Deletes and updatesModify existing table rowsDELETE, UPDATE
CompactionImprove file sizes and query performanceOPTIMIZE
Data skippingAvoid scanning irrelevant filesStatistics, ZORDER where appropriate
Audit historyReview table operationsDESCRIBE HISTORY

Delta Table Types and Storage

ObjectWhat it meansReview point
Managed tableDatabricks manages table metadata and data locationDropping may remove underlying data depending on configuration
External tableMetadata points to data in an external locationData lifecycle is managed outside the table definition
ViewSaved query definitionDoes not store data like a table
Temporary viewSession-scoped viewNot available outside the session
Global temporary viewShared across sessions in a special global temp databaseStill temporary, not a permanent table

Delta Commands Worth Recognizing

TaskSQL pattern
Create a Delta table from queryCREATE TABLE target AS SELECT …
Insert rowsINSERT INTO table SELECT …
Overwrite table dataINSERT OVERWRITE or write mode overwrite
Update matched recordsMERGE INTO target USING source ON … WHEN MATCHED THEN UPDATE
Insert new records during mergeWHEN NOT MATCHED THEN INSERT
Delete rowsDELETE FROM table WHERE …
Query historyDESCRIBE HISTORY table
Query prior versionSELECT … FROM table VERSION AS OF n
Optimize filesOPTIMIZE table
Z-order selected columnsOPTIMIZE table ZORDER BY (col1, col2)

Common Delta Lake Traps

  • Parquet alone is not Delta Lake. Delta typically stores data as Parquet files plus a Delta transaction log.
  • Schema enforcement and schema evolution are different. Enforcement blocks incompatible data; evolution allows approved changes.
  • MERGE is for upserts. Do not choose a full overwrite when the scenario needs record-level updates and inserts.
  • Time travel depends on retained history. Avoid assuming unlimited access to all previous versions.
  • OPTIMIZE is not a fix for bad logic. It can improve file layout, but it does not correct incorrect joins, filters, or partition design.
  • Partitioning is not always better. High-cardinality partition columns can create many small partitions and hurt performance.

Medallion Architecture

LayerPurposeTypical operationsQuality expectation
BronzeRaw or lightly processed landing dataIngest, append, capture metadata, preserve source fidelityLow; keep source as received
SilverCleaned, conformed, deduplicated dataParse, cast, validate, standardize, deduplicate, mergeMedium to high
GoldBusiness-ready aggregates or martsAggregate, join dimensions, serve BI/ML use casesHigh; curated and query-optimized

Common exam pattern:

  1. Land source files into bronze.
  2. Apply schema, validation, deduplication into silver.
  3. Build aggregated or dimensional outputs in gold.
  4. Orchestrate dependencies with a Databricks job or declarative pipeline.
  5. Govern access by catalog/schema/table privileges.
Notes and examples

Lakehouse and Medallion Architecture

A Databricks data engineer should understand the lakehouse as a unified architecture that combines low-cost object storage with database-style reliability, governance, and analytics performance.

Core Lakehouse Ideas

ConceptQuick meaningExam trap
Data lakeStores raw data in open formats on object storageDoes not automatically provide ACID reliability by itself
Data warehouseOptimized for structured analytics and BIOften less flexible for raw/semi-structured data
LakehouseCombines open storage, Delta Lake reliability, and analytics/ML accessNot just “a data lake with dashboards”
Delta LakeStorage layer providing reliability and performance featuresIt is not a separate database engine; it works on files plus a transaction log
Medallion architectureBronze, Silver, Gold data refinement patternThe layers are logical design patterns, not mandatory product objects

Medallion Layer Decision Rules

LayerTypical contentsCommon operationsCandidate mistake
BronzeRaw or lightly processed ingested dataAppend, capture source metadata, preserve original recordsCleaning too aggressively and losing auditability
SilverCleaned, validated, conformed dataDeduplication, joins, type casting, data quality rulesLeaving source-specific inconsistencies unresolved
GoldBusiness-ready aggregates or serving tablesAggregations, dimensional models, BI-ready tablesPutting raw data directly into dashboards

A good exam habit: when a scenario mentions raw source preservation, think Bronze. When it mentions cleaned reusable entity tables, think Silver. When it mentions business metrics, dashboards, or serving use cases, think Gold.

Ingestion Selection Matrix

RequirementBest fitWhy
Load files once or periodically with SQLCOPY INTOSimple incremental file ingestion into Delta
Continuously ingest new files from cloud storageAuto LoaderScalable file discovery, schema handling, checkpointing
Read static files for ad hoc transformationSpark batch readDirect, flexible, not automatically incremental
Process event streams incrementallyStructured StreamingStateful streaming engine with checkpoints
Build managed declarative ETL with quality rulesDatabricks declarative pipeline conceptsPipeline orchestration, dependencies, expectations
Ingest small manual datasetsUI upload or simple table creationConvenience, not production-scale ingestion
Notes and examples

COPY INTO

Use when the source is file-based and the target is a Delta table.

COPY INTO main.bronze.orders_raw
FROM 's3://example-bucket/incoming/orders/'
FILEFORMAT = CSV
FORMAT_OPTIONS ('header' = 'true', 'inferSchema' = 'true');

Exam reminders:

PointRemember
Incremental behaviorCOPY INTO tracks previously loaded files for the target table
Best useSimple file ingestion without custom streaming logic
TargetTypically a Delta table
TrapIt is not the same as INSERT INTO SELECT from an already registered table

Auto Loader

Use Auto Loader for scalable incremental file ingestion.

df = (
    spark.readStream
    .format("cloudFiles")
    .option("cloudFiles.format", "json")
    .option("cloudFiles.schemaLocation", "/Volumes/main/ops/checkpoints/orders_schema")
    .load("/Volumes/main/landing/orders")
)

(
    df.writeStream
    .format("delta")
    .option("checkpointLocation", "/Volumes/main/ops/checkpoints/orders_stream")
    .toTable("main.bronze.orders_raw")
)
Auto Loader conceptExam meaning
cloudFilesFormat used by Auto Loader
Schema locationStores inferred/evolving schema metadata
Checkpoint locationTracks streaming progress and state
Rescue dataCaptures unexpected columns or malformed fields depending on configuration
Incremental discoveryProcesses new files without re-reading all old files

Batch vs Streaming

Scenario clueUse batchUse streaming
Files arrive once per day and can be loaded as a batchYesOptional
Data must be processed continuously as it arrivesNoYes
Query needs watermarking for late eventsNoYes
Need exact same transformation logic on bounded dataYesSometimes with available-now style trigger
Job should terminate after processing available dataYesUse a bounded/available trigger if streaming ingestion is still desired
Stateful deduplication over timeLimitedYes, with watermark/checkpoint

Structured Streaming Checkpoints

RuleWhy it matters
Each streaming query needs its own checkpointPrevents state/progress conflicts
Do not casually delete checkpointsCan cause reprocessing or state loss
Use stable storage for checkpointsRequired for reliable recovery
Changing query logic may require checkpoint planningState schema and output behavior can be incompatible
Notes and examples

Structured Streaming Review

Structured Streaming treats streaming data as an unbounded table. The same DataFrame-style transformations often apply, but reliability depends on checkpointing, output mode, and trigger configuration.

Streaming Concepts

ConceptMeaningExam trap
CheckpointStores streaming progress and stateWithout it, recovery and exactly-once-style behavior are at risk
TriggerControls when micro-batches are processedContinuous arrival does not always mean continuous execution
Output modeDefines what gets writtenAppend/update/complete depend on query type
WatermarkBounds how long late data is consideredNot the same as filtering by event time
StateMaintained data for aggregations/deduplicationCan grow if not bounded
SinkDestination for streaming outputDelta is common for reliable lakehouse pipelines

Output Mode Cheat Sheet

Output modeWhat it writesCommon use
AppendOnly newly completed rowsAppend-only streams, finalized aggregations with watermark
UpdateRows changed since last triggerUpdating aggregation results
CompleteEntire result table each triggerFull aggregate outputs, usually smaller result sets

Watermark Decision Rule

Use a watermark when:

  1. The stream uses event-time logic.
  2. Late-arriving data is expected.
  3. The engine needs a boundary for state cleanup.
  4. Some late data can be excluded after the threshold.

Do not treat a watermark as a guarantee that all late data is preserved. It is a practical tradeoff between correctness window and state size.

Spark SQL and DataFrame Core

Transformations vs Actions

TypeExamplesBehavior
Transformationselect, filter, withColumn, join, groupBy, orderByLazy; builds logical plan
Actioncount, collect, show, write, displayTriggers execution
Wide transformationgroupBy, join, distinct, orderByOften causes shuffle
Narrow transformationselect, simple filter, many column expressionsUsually no shuffle
Notes and examples

Common trap: caching a DataFrame is lazy. It is materialized only after an action.

df_cached = df.filter("amount > 0").cache()
df_cached.count()  # materializes cache

SQL Operations to Know

OperationPatternExam note
FilterWHERE amount > 0Applied before aggregation
Aggregate filterHAVING count(*) > 1Applied after GROUP BY
Null comparisonIS NULL, IS NOT NULLDo not use = NULL
Conditional logicCASE WHEN ... THEN ... ENDUseful for derived fields
JoinINNER, LEFT, RIGHT, FULL, CROSS, ANTI, SEMIKnow output semantics
DedupDISTINCT, dropDuplicates, window row_numberWindow pattern gives deterministic survivor
Explodeexplode(array_col)Converts array elements to rows
WindowOVER (PARTITION BY ... ORDER BY ...)Ranking, running totals, latest record selection

Join Types

JoinReturns
InnerMatching rows from both sides
Left outerAll left rows plus matching right rows
Right outerAll right rows plus matching left rows
Full outerAll rows from both sides, matched where possible
Left semiLeft rows that have a match; only left columns
Left antiLeft rows with no match; only left columns
CrossCartesian product; usually avoid unless intentional

Example anti join for new records:

new_customers = incoming.join(existing, on="customer_id", how="left_anti")

Deduplication Patterns

NeedPatternNotes
Remove exact duplicate rowsSELECT DISTINCT *Simple but may shuffle heavily
Deduplicate by key, arbitrary survivordropDuplicates(["id"])Survivor may not be deterministic
Keep latest record per keyWindow with row_number()Most exam-safe when order column exists
Streaming deduplicationdropDuplicates with watermarkControls state growth and late data handling
Upsert latest changes into targetMERGE INTOBest for incremental table maintenance

Latest record per key:

WITH ranked AS (
  SELECT
    *,
    ROW_NUMBER() OVER (
      PARTITION BY customer_id
      ORDER BY updated_at DESC
    ) AS rn
  FROM main.bronze.customers_raw
)
SELECT *
FROM ranked
WHERE rn = 1;

MERGE for Upserts

Use MERGE when records may be new, changed, or deleted.

MERGE INTO main.silver.customers AS target
USING main.bronze.customers_updates AS source
ON target.customer_id = source.customer_id
WHEN MATCHED THEN
  UPDATE SET *
WHEN NOT MATCHED THEN
  INSERT *;
ClauseMeaning
WHEN MATCHED THEN UPDATEExisting target row is changed
WHEN MATCHED THEN DELETEExisting target row is removed
WHEN NOT MATCHED THEN INSERTNew target row is inserted
ON conditionDefines business key match
Source duplicatesCan cause ambiguous matches; deduplicate source first

Exam-safe CDC flow:

  1. Read source changes.
  2. Cast and validate fields.
  3. Deduplicate changes by business key and sequence/timestamp.
  4. MERGE into silver table.
  5. Write audit metrics or job status.

Schema Handling

FeaturePurposeTrap
Schema inferenceDetects schema from source dataConvenient but risky for production consistency
Explicit schemaDefines expected columns and typesPreferred for stable pipelines
Schema enforcementPrevents invalid writes to DeltaDoes not automatically fix bad data
Schema evolutionAdds or changes schema when allowedShould be controlled; avoid accidental drift
CastsConvert strings to dates, timestamps, decimalsBad casts may produce nulls or errors depending on mode
ConstraintsEnforce table-level data rulesUse for quality guarantees where supported

Example explicit schema:

from pyspark.sql.types import StructType, StructField, StringType, TimestampType, DecimalType

schema = StructType([
    StructField("order_id", StringType(), False),
    StructField("order_ts", TimestampType(), True),
    StructField("amount", DecimalType(10, 2), True)
])

Data Quality Patterns

RequirementPattern
Reject records with missing primary keyFilter invalid rows or use expectations/constraints
Quarantine malformed dataWrite invalid records to separate error table
Track ingestion lineageAdd source file name, ingestion timestamp, batch ID
Prevent duplicate business keysDeduplicate before merge; enforce uniqueness through pipeline logic
Validate referential qualityJoin to dimension/reference tables and isolate non-matches
Monitor row countsCompare source, accepted, rejected, inserted, updated counts

Useful metadata columns:

SELECT
  *,
  current_timestamp() AS ingestion_ts,
  _metadata.file_name AS source_file
FROM read_files('/Volumes/main/landing/orders', format => 'json');
Notes and examples

Reliability and Data Quality

Data engineering exam scenarios often ask how to make pipelines reliable, repeatable, and testable.

NeedGood practice
Recover failed streaming jobUse checkpoints
Avoid duplicate file ingestionUse incremental ingestion features such as COPY INTO or Auto Loader
Preserve raw source dataStore in Bronze before destructive transformations
Enforce valid recordsUse constraints, expectations, or validation logic
Handle late dataUse event-time processing and watermarks where appropriate
Apply updates to targetUse MERGE instead of append-only writes
Audit changesUse Delta history and pipeline/job run history
Reduce manual errorSchedule jobs and parameterize tasks

Unity Catalog Security Cheat Sheet

ObjectTypical privilege ideaExam use
MetastoreAdministrative governance boundaryUsually not granted broadly
CatalogAccess top-level namespaceNeed catalog access before schema/table work
SchemaUse namespace and create objectsRequired for table/view creation in that schema
TableSelect, modify, manage depending on roleGrant least privilege
ViewProvide restricted access to query resultsUse to hide columns/rows or simplify access
VolumeRead/write governed filesFor non-tabular data access
External locationAccess cloud storage pathNeeded for external tables/volumes
Storage credentialCloud identity abstractionSecured tightly; not for general users
Notes and examples

Governance Decision Table

RequirementPrefer
Govern tabular data with SQL permissionsUnity Catalog tables/views
Govern raw files that are not tablesUnity Catalog volumes
Share a subset of columns or rowsViews with appropriate grants
Isolate dev/test/prod namespacesSeparate catalogs or schemas
Avoid hard-coded cloud credentialsStorage credentials, external locations, secrets
Grant only read accessSELECT on table/view, plus required namespace usage
Let analysts query without modifying dataRead-only grants on curated gold tables/views

Example grants:

GRANT USE CATALOG ON CATALOG main TO `data_analysts`;
GRANT USE SCHEMA ON SCHEMA main.gold TO `data_analysts`;
GRANT SELECT ON TABLE main.gold.sales_summary TO `data_analysts`;

Unity Catalog and Governance

Governance topics often test conceptual clarity: object hierarchy, permissions, data discovery, and lineage.

Unity Catalog Object Hierarchy

LevelExample role in organization
MetastoreTop-level governance container for a workspace/account setup
CatalogBroad domain or environment grouping
SchemaDatabase-like namespace within a catalog
Table/View/FunctionData and logic objects accessed by users

A common three-level name pattern is:

catalog.schema.table

Governance Review Table

TopicWhat to know
Catalogs and schemasOrganize data assets and permissions
GrantsControl who can access or modify objects
External locationsGovern access to cloud storage paths
LineageHelps understand upstream/downstream data relationships
Data discoveryUsers find governed assets through cataloging
Least privilegeGrant only the access needed for the job

Common Governance Traps

  • Workspace access is not the same as table access.
  • Cloud storage access and table permissions are related but not identical concepts.
  • A user may be able to run compute but still lack permission to query a table.
  • Object names may need catalog and schema qualification in governed environments.
  • Governance is not only security; it also supports discovery, lineage, and operational trust.

Compute Selection

NeedChooseWhy
Interactive notebook developmentAll-purpose computeSupports iterative exploration
Scheduled production taskJob computeCreated for job run, easier lifecycle control
SQL dashboards and BI queriesSQL warehouseOptimized SQL serving experience
Isolate workloads and reduce idle costJob clusters / task-specific computeRuns only when needed
Enforce standardized settingsCluster policiesGovernance and cost control
Faster SQL/DataFrame execution where availablePhoton-enabled computeVectorized execution engine for supported workloads
Avoid installing libraries manually each runJob/task library configurationReproducible production setup
Notes and examples

Common traps:

TrapCorrection
Using all-purpose clusters for every scheduled workloadPrefer job compute for production jobs
Assuming driver memory solves all performance issuesLarge shuffles/skew need query/data design fixes
Installing libraries interactively onlyConfigure libraries on job/cluster for repeatability
Giving broad cluster permissionsUse least privilege and cluster policies

Databricks Workflows and Jobs

ConceptWhat to know
JobProduction unit for scheduled or triggered work
TaskStep inside a job, such as notebook, Python script, SQL task, pipeline, or JAR
DependencyDefines task order; downstream tasks wait for upstream success
Job clusterCompute created for a job/task run
ParametersPass runtime values into notebooks/scripts/SQL
RetryAutomatically rerun failed tasks based on configuration
Alert/notificationInform operators on failure, success, or duration conditions
Repair runRerun failed/skipped tasks without rerunning everything where supported
Task valuesPass small values between tasks in multi-task jobs
Notes and examples

Workflow design pattern:

    flowchart LR
	    A[Ingest bronze] --> B[Validate and clean silver]
	    B --> C[MERGE dimensions]
	    B --> D[Build facts]
	    C --> E[Refresh gold marts]
	    D --> E
	    E --> F[Run quality checks]

Exam decision points:

RequirementAnswer pattern
Run notebook A before notebook BMulti-task job with dependency
Reuse same pipeline with different datesJob parameters
Use isolated compute for productionJob cluster
Notify on failureJob notification/alert
Avoid rerunning successful upstream tasks after partial failureRepair failed tasks where appropriate
Control who can edit/run jobJob permissions

Jobs, Workflows, and Compute

Production data engineering requires orchestration. Review how jobs, tasks, dependencies, parameters, and compute choices work together.

Jobs and Workflow Concepts

ConceptMeaningExam angle
JobScheduled or triggered unit of workUsed for production automation
TaskIndividual step in a jobCan run notebooks, scripts, SQL, pipelines, etc.
DependencyControls task orderDownstream tasks wait for upstream success when configured
RetryReruns failed tasks according to policyHelps with transient failures
ParameterRuntime value passed into a taskSupports reusable jobs
Job clusterCluster created for a job runGood for isolated automated workloads
All-purpose clusterInteractive shared computeCommon for development, less ideal for scheduled production jobs
SQL warehouseCompute for Databricks SQLUsed for SQL queries, BI, dashboards, and alerts

Compute Choice Decision Table

ScenarioLikely compute choice
Interactive notebook developmentAll-purpose cluster
Scheduled production ETL jobJob cluster or configured job compute
SQL dashboard for analystsSQL warehouse
Databricks SQL query or alertSQL warehouse
Managed declarative pipelinePipeline-managed compute
Cost-sensitive repeated production workloadJob-specific compute with right-sized resources

Workflow Design Traps

  • Do not run every production job manually from a notebook.
  • Do not use a single large shared cluster as the default answer for all workloads.
  • Use task dependencies when order matters.
  • Use retries for transient failures, but fix deterministic data or code errors.
  • Pass parameters instead of copying nearly identical notebooks for each environment or date.

SQL Warehouse vs Cluster

FeatureSQL warehouseInteractive/job cluster
Primary useSQL queries, dashboards, BINotebooks, Spark jobs, ML/data engineering code
InterfaceDatabricks SQL editor, BI integrationsNotebooks, jobs, Spark APIs
Language focusSQLSQL, Python, Scala, R depending on context
Production servingGood for SQL analyticsGood for ETL and programmatic pipelines
Exam clue“Dashboard,” “analyst,” “BI query”“Notebook ETL,” “PySpark,” “library,” “job task”

Performance Reference

SymptomLikely causePractical fix
Many tiny filesFrequent small writes, streaming micro-batchesOPTIMIZE, tune write patterns, compact periodically
Query scans too much dataPoor filters, no useful layout, unselective partitionsFilter early, select needed columns, optimize layout
Slow joinLarge shuffle, missing broadcast opportunity, skewBroadcast small dimension, handle skew, filter before join
Out-of-memory on drivercollect() or large result to driverAvoid collect; write/query distributed results
Slow aggregationHigh-cardinality shufflePre-filter, aggregate in stages, review partitioning
Repeated computationNo caching/materializationCache selectively, materialize intermediate Delta table
Stale or inefficient plansMissing stats or poor query designAnalyze/explain query, optimize tables
Streaming state growsNo watermark or unbounded keysAdd watermark, deduplicate carefully, manage state
Notes and examples

Partitioning, OPTIMIZE, and Data Skipping

TechniqueUse whenAvoid when
Table partitioningLow/moderate-cardinality column commonly used for filtersHigh-cardinality columns like unique IDs
OPTIMIZETable has many small files or frequent incremental writesTiny tables with no performance issue
Z-ordering / clustering-style layoutQueries repeatedly filter on certain columnsColumns are not used in filters or are too random
CachingSame data reused repeatedly in active session/jobData is huge, rarely reused, or memory pressure is high
Materialized gold tableMany users need same transformed resultSource changes constantly and freshness requirements conflict

Performance and Optimization

The exam may test whether you can pick reasonable optimizations. Avoid extreme answers. Start with correct data layout, efficient transformations, and Delta features.

Optimization Decision Table

SymptomPossible actionTrap
Many small filesOPTIMIZE / compactionRepartitioning randomly without understanding output
Queries filter often by specific columnsZORDER on selected filter columnsZORDERing every column
Slow query scanning too much dataPartition pruning, data skipping, filtersPartitioning on high-cardinality columns
Repeated expensive intermediate useCache selectively or materializeCaching everything
Skewed join performanceReview join keys, salting/broadcast strategies where appropriateAssuming more workers always fixes skew
Overly expensive scheduled jobRight-size compute, optimize logic, incremental processingFull refresh when incremental processing is possible

Partitioning Review

Partitioning can help when queries frequently filter by a low-to-moderate cardinality column such as date. It can hurt when the partition column has too many unique values, creating excessive small directories and files.

Good partition clues:

  • Date-based filtering is common.
  • Partition cardinality is controlled.
  • Data volume per partition is meaningful.
  • Queries can prune partitions.

Bad partition clues:

  • User ID, transaction ID, UUID, or other high-cardinality values.
  • Tiny files per partition.
  • Queries rarely filter on the partition column.

Troubleshooting Checklist

ProblemCheck first
Permission deniedUnity Catalog grants, catalog/schema/table privileges, external location privileges
Table not foundCurrent catalog/schema, object name, workspace/metastore attachment
Stream reprocessed dataCheckpoint path changed/deleted, source semantics, output mode
Schema mismatchSource schema drift, table schema, explicit schema, evolution settings
Duplicate rows after loadNon-idempotent append, missing merge key, source duplicates
Slow job after data growthFile count, skew, shuffle stages, join order, filters, OPTIMIZE need
Notebook works manually but job failsJob parameters, cluster libraries, permissions, secrets, current working context
collect() crashes driverToo much data returned to driver; use distributed write or limited sample
VACUUM removed needed filesRetention/time travel expectations were not considered before cleanup

Common Exam Traps

TrapCorrect understanding
“Delta Lake is just Parquet files”Delta uses Parquet data files plus a transaction log for reliability and metadata
“Views store data”Standard views store query definitions; materialized views store results
“A DataFrame transformation immediately runs”Spark transformations are lazy until an action
“count() is harmless”It is an action and can scan large data
“Streaming means real-time only”Structured Streaming can also process available data incrementally with bounded-style triggers
“Append is safe for all incremental loads”Updates/deletes require merge or CDC-aware logic
“Partition by unique ID for faster lookup”High-cardinality partitioning often creates too many small partitions/files
“Delete checkpoint to fix stream”This can cause data duplication or state loss
“External table means ungoverned”External tables can still be governed through Unity Catalog
“VACUUM improves query speed directly”It removes obsolete files; compaction/layout are separate performance concerns
“Cache guarantees faster queries”Cache helps only if reused and materialized; it can also create memory pressure
“Job success means data quality is correct”Jobs can succeed while loading bad data unless quality checks are implemented

Compact Snippet Bank

Create and Use Namespaces

CREATE CATALOG IF NOT EXISTS main;
CREATE SCHEMA IF NOT EXISTS main.silver;

USE CATALOG main;
USE SCHEMA silver;

Create Table from Query

CREATE OR REPLACE TABLE main.gold.daily_sales AS
SELECT
  date(order_ts) AS order_date,
  sum(amount) AS total_amount,
  count(*) AS order_count
FROM main.silver.orders
GROUP BY date(order_ts);

Append Cleaned Data

clean_df = (
    raw_df
    .filter("order_id IS NOT NULL")
    .withColumn("ingestion_ts", current_timestamp())
)

clean_df.write.mode("append").format("delta").saveAsTable("main.silver.orders")

Overwrite Safely for Rebuildable Gold Table

CREATE OR REPLACE TABLE main.gold.customer_metrics AS
SELECT
  customer_id,
  count(*) AS order_count,
  sum(amount) AS lifetime_value
FROM main.silver.orders
GROUP BY customer_id;

Watermarked Streaming Deduplication

deduped = (
    stream_df
    .withWatermark("event_ts", "1 day")
    .dropDuplicates(["event_id"])
)

Explain a Query Plan

EXPLAIN
SELECT customer_id, sum(amount)
FROM main.silver.orders
WHERE order_ts >= current_date() - INTERVAL 30 DAYS
GROUP BY customer_id;

Decision Trees

Ingestion Choice

    flowchart TD
	    A[Need to ingest data?] --> B{Source is files?}
	    B -- No --> C{Source is continuous events?}
	    C -- Yes --> D[Structured Streaming connector]
	    C -- No --> E[Batch read or connector-specific load]
	    B -- Yes --> F{Need scalable continuous file discovery?}
	    F -- Yes --> G[Auto Loader]
	    F -- No --> H{Prefer SQL incremental load?}
	    H -- Yes --> I[COPY INTO]
	    H -- No --> J[Spark batch read]

Table Maintenance Choice

    flowchart TD
	    A[Need to update target table?] --> B{Only new rows?}
	    B -- Yes --> C[Append]
	    B -- No --> D{Need inserts and updates?}
	    D -- Yes --> E[MERGE INTO]
	    D -- No --> F{Rebuild full result?}
	    F -- Yes --> G[CREATE OR REPLACE TABLE]
	    F -- No --> H[Use DELETE/UPDATE with clear predicate]

Final Review Checklist

Before exam day, make sure you can:

  • Explain Delta Lake transaction log, time travel, schema enforcement, and VACUUM.
  • Choose between COPY INTO, Auto Loader, batch reads, and Structured Streaming.
  • Write or recognize MERGE INTO for upserts.
  • Distinguish managed tables, external tables, views, materialized views, and volumes.
  • Apply Unity Catalog hierarchy and least-privilege grants.
  • Identify when a Spark operation is lazy, an action, narrow, or wide.
  • Use SQL windows for latest-record deduplication.
  • Choose job compute, all-purpose compute, or SQL warehouses based on workload.
  • Diagnose common failures involving checkpoints, permissions, schema drift, small files, and driver collection.
  • Recognize production patterns: idempotency, parameterization, retries, alerts, and quality checks.

For the next step, practice with scenario questions that force you to choose the right Databricks service, SQL command, Delta Lake operation, or production troubleshooting action under exam-style constraints.

Notes and examples

Fast Final Review Checklist

Before starting original practice questions, make sure you can answer these without notes:

  • What does Delta Lake add beyond Parquet?
  • When should you use MERGE instead of INSERT?
  • What is the purpose of the Delta transaction log?
  • How do Bronze, Silver, and Gold layers differ?
  • When is COPY INTO a better fit than Auto Loader?
  • Why do streaming jobs need checkpoints?
  • What problem does a watermark solve?
  • What is the difference between a managed table, external table, view, and temporary view?
  • When should you use a SQL warehouse instead of an all-purpose cluster?
  • What does OPTIMIZE do, and when might ZORDER help?
  • Why can high-cardinality partitioning be harmful?
  • How do job tasks and dependencies support production workflows?
  • What is the Unity Catalog hierarchy?
  • How do expectations support data quality in pipelines?

Cheat Sheet for Databricks DEA Candidates

This Cheat Sheet is for candidates preparing for the Databricks Certified Data Engineer Associate exam, official exam code Databricks DEA, from Databricks. Use it as a focused refresh before moving into IT Mastery practice, topic drills, mock exams, and detailed explanations.

The exam rewards practical understanding of how data engineering work is done on the Databricks Lakehouse Platform: ingesting data, transforming it reliably, using Delta Lake correctly, building production pipelines, scheduling jobs, and applying basic governance and performance practices.

High-Yield Exam Map

AreaWhat to reviewCommon exam angle
Lakehouse conceptsLakehouse architecture, data lake vs warehouse, medallion layersIdentify the best architecture or data layer for a scenario
Delta LakeACID transactions, transaction log, schema enforcement, time travel, MERGEChoose the right Delta feature or SQL command
Data ingestionCOPY INTO, Auto Loader, file formats, incremental loadingSelect ingestion method based on scale and arrival pattern
TransformationsSpark SQL, DataFrames, views, temp views, CTAS, filtering, joinsPredict results or choose efficient transformation logic
StreamingStructured Streaming, checkpoints, triggers, watermarks, append/update modesDistinguish streaming from batch and avoid duplicate processing
PipelinesDelta Live Tables concepts, expectations, declarative pipelinesUnderstand managed pipeline behavior and data quality checks
Jobs and orchestrationTasks, dependencies, retries, parameters, clustersBuild or troubleshoot scheduled workflows
Databricks SQLWarehouses, queries, dashboards, alerts, SQL endpoints/warehousesKnow when SQL warehouse vs all-purpose/job compute fits
GovernanceUnity Catalog concepts, catalogs/schemas/tables, permissions, lineageApply access control and object hierarchy correctly
Performance and reliabilityPartitioning, OPTIMIZE, ZORDER, caching, file sizingPick practical tuning options without overengineering

Ingestion: Batch, Incremental, and Streaming

The exam often tests whether you can select the correct ingestion approach.

Ingestion Method Decision Table

ScenarioStrong optionWhy
Periodic batch load from a stable file locationCOPY INTOSimple, idempotent-style incremental file ingestion for batch use cases
Many files arriving continuously in cloud storageAuto LoaderScales file discovery and supports incremental processing
Low-latency continuously processed dataStructured StreamingProcesses new data as it arrives with checkpoints
One-time historical backfillBatch read/writeSimpler than streaming when data is static
CDC-style source with inserts/updates/deletesMERGE into Delta or CDC-aware pipelineHandles changing records instead of append-only assumptions
Notes and examples

COPY INTO vs Auto Loader

FeatureCOPY INTOAuto Loader
Best forSimple incremental batch file loadsScalable cloud file ingestion
Processing styleBatch commandStructured Streaming source
File discoveryTracks loaded files for a target tableDesigned for efficient incremental file discovery
Typical use“Load new files from this directory into this Delta table”“Continuously ingest new cloud files into Bronze”
Exam trapChoosing streaming when scheduled batch is enoughChoosing manual directory listing at scale

File Format Review

FormatKey characteristicsExam clue
CSVText, simple, needs schema/header handlingWatch delimiter, header, inferSchema issues
JSONSemi-structured, nested data possibleMay require parsing/exploding nested fields
ParquetColumnar, efficient analytics formatCommon underlying format for Delta data files
DeltaTransactional table format built on data files plus logNeeded for ACID, MERGE, time travel

Spark SQL and Data Transformations

A data engineer on Databricks should be comfortable reading and reasoning about SQL transformations.

SQL Transformation Patterns

NeedCommon approachTrap
Create a reusable transformed datasetCREATE TABLE AS SELECTConfusing a table with a view
Create a logical query layerCREATE VIEWExpecting a view to store transformed data
Remove duplicatesROW_NUMBER with window function, dropDuplicates, distinctUsing distinct and accidentally losing meaningful columns
Keep latest record per keyWindow function ordered by timestampForgetting deterministic tie-breakers
Aggregate metricsGROUP BY with aggregate functionsSelecting non-grouped, non-aggregated columns
Join reference dataINNER/LEFT joinsChoosing INNER join when unmatched records must be preserved
Parse nested dataexplode, from_json, struct/array functionsTreating nested data like flat columns
Notes and examples

Join Decision Review

Join typeKeeps rows fromUse when
INNER JOINMatching rows onlyYou only want records with matches on both sides
LEFT JOINAll left rows plus matches from rightYou must preserve the primary dataset
RIGHT JOINAll right rows plus matches from leftLess common; usually can rewrite as LEFT JOIN
FULL OUTER JOINAll rows from both sidesReconciliation or comparison scenarios
CROSS JOINEvery combinationRare; often a mistake unless explicitly required
SEMI JOINLeft rows that have a matchFiltering to existing keys
ANTI JOINLeft rows that do not have a matchFinding missing or unmatched records

Window Function Pattern

A common exam pattern is “select the latest record per business key.”

SELECT *
FROM (
  SELECT
    *,
    ROW_NUMBER() OVER (
      PARTITION BY customer_id
      ORDER BY updated_at DESC
    ) AS rn
  FROM source_table
)
WHERE rn = 1;

Review the difference between:

  • ROW_NUMBER() — assigns a unique sequence, useful for one winner per group.
  • RANK() — ties share rank and can skip numbers.
  • DENSE_RANK() — ties share rank without gaps.

Delta Live Tables and Declarative Pipelines

If a scenario involves declarative pipelines, data quality checks, managed dependencies, or simplified batch/streaming pipeline operations, review Delta Live Tables concepts.

ConceptReview point
PipelineManaged execution of one or more dataset definitions
Live table / streaming tableDataset maintained by the pipeline
ViewIntermediate logic that may not materialize as a final table
ExpectationsData quality rules applied to records
Pipeline dependenciesDerived from table/view definitions
Batch vs streaming pipeline logicDepends on source and table type

Expectations: What to Remember

Expectation behaviorMeaning
Track invalid recordsRecords are monitored for quality but may still flow
Drop invalid recordsBad records are excluded
Fail on invalid recordsPipeline stops when invalid data violates the rule

Candidate trap: expectations are not just documentation. Depending on configuration, they can track, drop, or fail records.

Databricks SQL Review

Databricks SQL supports analytics, dashboards, visualizations, and alerts using SQL warehouses.

FeatureQuick review
SQL warehouseCompute resource for SQL queries
QuerySaved SQL statement
DashboardVisual collection of query results
AlertCondition-based notification from query results
Query historyUseful for reviewing executed SQL and performance
PermissionsControl who can run, edit, or view assets

Databricks SQL Candidate Traps

  • A SQL warehouse is not the same as a general-purpose interactive cluster.
  • Dashboards show query results; they do not replace upstream data modeling.
  • Alerts depend on query results and refresh behavior.
  • Slow dashboard performance may require improving the underlying query, table layout, or warehouse sizing.

Scenario Decision Flow

    flowchart TD
	    A[New data engineering scenario] --> B{Is the source continuously arriving?}
	    B -- No, periodic files --> C{Need simple incremental batch load?}
	    C -- Yes --> D[COPY INTO]
	    C -- No --> E[Batch read and write]
	    B -- Yes --> F{Cloud files at scale?}
	    F -- Yes --> G[Auto Loader with checkpointing]
	    F -- No --> H[Structured Streaming source]
	    D --> I[Write Bronze Delta]
	    E --> I
	    G --> I
	    H --> I
	    I --> J{Need cleaned reusable data?}
	    J -- Yes --> K[Transform to Silver]
	    J -- No --> L[Keep raw/audit layer]
	    K --> M{Need BI or business metrics?}
	    M -- Yes --> N[Gold tables or views]
	    M -- No --> O[Reusable Silver tables]

Use this flow as a quick mental model. The real exam may phrase the scenario differently, but the decision points are usually about arrival pattern, reliability, transformation need, and serving layer.

Frequently Tested Command Intent

If the question says…Think…
“Insert new rows and update existing rows”MERGE INTO
“Load only new files from a directory”COPY INTO or Auto Loader depending on scale/streaming
“Recover stream after failure”Checkpoint location
“Handle late-arriving event-time records”Watermark
“View previous table version”Delta time travel
“Improve many-small-files performance”OPTIMIZE
“Co-locate data for filter columns”ZORDER
“Create business-level aggregates for dashboards”Gold layer
“Keep raw source history”Bronze layer
“Apply data quality rule in managed pipeline”Expectations
“Run production notebook on a schedule”Databricks job/workflow
“Analysts need dashboards and alerts”Databricks SQL warehouse

Common Candidate Mistakes

Conceptual Mistakes

  • Treating Delta Lake as just another file format.
  • Assuming all ingestion should be streaming.
  • Confusing Bronze/Silver/Gold with security levels.
  • Choosing overwrite when the scenario requires upsert.
  • Ignoring checkpointing in streaming recovery scenarios.
  • Assuming a view stores physical data.
  • Using inner joins when unmatched source rows must be retained.
  • Treating watermarks as late-data guarantees rather than state boundaries.

Practical Design Mistakes

  • Full-refreshing a large table when incremental processing is appropriate.
  • Partitioning by a high-cardinality column.
  • Running BI dashboards directly on messy Bronze tables.
  • Using development clusters for all production automation.
  • Skipping data quality checks until the Gold layer.
  • Not preserving raw data before cleaning.
  • Granting broad access instead of using least privilege.

Put the review into practice