Databricks Data Engineer Associate · 21% practice allocation

Databricks Data Engineer Associate: Data Ingestion and Loading Practice Questions

5 free sample questions from the Data Ingestion and Loading domain, with answers and explanations. The full Data Engineer Associate bank has 300 questions across 7 domains. Questions are scenario-based and written from the official Databricks exam guide.

1.

Which file format, being columnar and compressed, is typically the most efficient source for analytical loads among these options?

  • A. Parquet✓ Correct
  • B. Uncompressed CSV
  • C. A fixed-width flat file
  • D. A plain text log
Explanation

Parquet is columnar and compressed, efficient for analytics. CSV, plain text, and fixed-width files (B, C, D) are row-oriented/uncompressed and less efficient.

2.

A data engineer sets up a Structured Streaming job that reads from a Delta table and writes aggregated results to another Delta table. The engineer wants each micro-batch to be triggered manually and only once, then the stream should terminate automatically. Which trigger setting should the engineer use?

  • A. Trigger(processingTime='0 seconds')
  • B. Trigger(continuous='1 second')
  • C. Trigger(once=True)
  • D. Trigger(availableNow=True)✓ Correct
Explanation

Trigger(availableNow=True) is the modern recommended approach that processes all available data in multiple micro-batches and then terminates — it combines the 'process all then stop' behavior of Trigger(once=True) but does so more efficiently by splitting work across multiple micro-batches. Trigger(once=True) is the older equivalent that processes everything in a single micro-batch, which can be very slow or cause memory pressure on large datasets and is now considered legacy. Trigger(processingTime='0 seconds') runs micro-batches as fast as possible continuously and never terminates on its own. Trigger(continuous='1 second') enables experimental continuous processing mode with approximately 1-second checkpoint intervals, which does not terminate automatically.

3.

A data engineering team is building a multi-hop DLT pipeline. A junior engineer proposes the following architecture for the Silver layer:

  • Read raw events from the Bronze Streaming Table using dlt.read() (batch read)
  • Apply deduplication and filtering
  • Write to the Silver table

A senior engineer objects, saying the Silver table should use dlt.read_stream() instead. Which of the following statements best explains the senior engineer's concern and which TWO statements correctly describe the difference between dlt.read() and dlt.read_stream() in DLT? (Select TWO.)

  • A. dlt.read_stream() is only valid for reading from external Kafka or Kinesis sources, not from other DLT tables.
  • B. dlt.read_stream() processes only new records added since the last pipeline run, enabling efficient incremental processing.✓ Correct
  • C. dlt.read() and dlt.read_stream() produce identical results in DLT; the choice only affects scheduling frequency.
  • D. dlt.read_stream() requires a watermark to be defined and cannot be used without one.
  • E. dlt.read() performs a full recomputation of the source table on every pipeline run, which becomes increasingly expensive as the Bronze table grows.✓ Correct
  • F. dlt.read() automatically applies schema evolution from the source, whereas dlt.read_stream() requires manual schema hints.
Explanation

Option E is correct: dlt.read() is a batch/static read that re-reads the entire source table on every pipeline refresh. As the Bronze table accumulates data over time, this full scan becomes increasingly costly in compute and time. Option B is also correct: dlt.read_stream() creates an incremental stream from the source DLT table, reading only records added since the last checkpoint — this is the efficient, scalable approach for Silver tables that process new data continuously. Option C is false — they are fundamentally different in both execution semantics and performance characteristics. Option D is false — dlt.read_stream() does not require a watermark; watermarks are optional and only needed for late-data handling in windowed aggregations. Option F is false — schema evolution behavior in DLT is not differentiated between read() and read_stream(). Option A is false — dlt.read_stream() is the standard way to incrementally read from upstream DLT Streaming Tables, not just external sources.

4.

A data engineer is building a Silver layer DLT pipeline that reads from a Bronze streaming table. They want the Silver table to support incremental processing — only consuming new records appended to Bronze — rather than reprocessing the entire Bronze table on every pipeline update. How should the Silver table be declared?

  • A. As a Streaming Table using dlt.create_streaming_table() or @dlt.table with spark.readStream✓ Correct
  • B. As a Materialized View using @dlt.table with a batch spark.read source
  • C. As a standard Delta table created with CREATE TABLE AS SELECT outside the DLT pipeline
  • D. As a Streaming Table, but only if the Bronze source is a Kafka topic; Delta table sources must use Materialized Views
Explanation

A Streaming Table in DLT consumes data incrementally using Structured Streaming semantics. By reading from the Bronze source with spark.readStream, the Silver table only processes new records since the last pipeline run, which is the incremental processing behavior required. Option B is incorrect: a Materialized View always re-executes its defining query against the full source on each pipeline update — it does not maintain streaming offsets and therefore cannot do incremental processing in the same sense. Option C is incorrect: creating a table outside DLT with CTAS loses all DLT pipeline management, lineage, and incremental processing capabilities. Option D is a fabrication — DLT Streaming Tables work perfectly well with Delta table sources via spark.readStream; there is no restriction that limits Streaming Tables to Kafka sources.

5.

A data engineer is configuring an Auto Loader stream to ingest files from a cloud storage location. The source data schema changes frequently — new columns are added by upstream teams without prior notice. Which Auto Loader configuration option should the engineer enable so that new columns are automatically detected and merged into the target Delta table without failing the stream?

  • A. Set cloudFiles.schemaEvolutionMode to rescue
  • B. Set cloudFiles.schemaEvolutionMode to addNewColumns✓ Correct
  • C. Set cloudFiles.inferColumnTypes to true
  • D. Set cloudFiles.schemaEvolutionMode to none and manually update the schema after each change
Explanation

Setting cloudFiles.schemaEvolutionMode to addNewColumns instructs Auto Loader to automatically detect newly added columns in incoming files and merge them into the target table's schema, allowing the stream to continue without interruption. Option A (rescue) routes unexpected columns to a special _rescued_data column rather than merging them into the schema, which is useful for capturing unexpected data but does not evolve the schema. Option C (inferColumnTypes) controls type inference during initial schema detection, not ongoing schema evolution for new columns. Option D disables automatic evolution entirely and requires manual intervention, which defeats the requirement for automatic handling.

Test yourself across every Data Engineer Associate domain

The free Data Engineer Associate practice test mixes about 20 questions weighted like the exam. The full 300-question bank adds instant grading, flashcards and a timed mock exam.

Study this domain

Data Ingestion and Loading study guide (Data Engineer Associate) →

Other Data Engineer Associate domains

← All Databricks Data Engineer Associate study resources