dbt Analytics Engineering Certification · 14% practice allocation

dbt Analytics Engineering Certification: Leveraging the dbt State Practice Questions

5 free sample questions from the Leveraging the dbt State domain, with answers and explanations. The full dbt Analytics Engineering Certification bank has 327 questions across 7 domains. Questions are scenario-based and written from the official dbt Labs exam guide.

1.

A team runs nightly production dbt jobs and wants to use state-based selection in CI to test only what has changed. After setting up the workflow, they realize that the CI job is selecting every model in the project instead of just modified ones. Which of the following is the MOST likely root cause?

  • A. The CI environment is using a different dbt version than production, causing all node hashes to differ
  • B. The --defer flag was not included alongside --select state:modified+
  • C. The --state flag is pointing to a directory that does not contain a valid manifest.json from a previous run✓ Correct
  • D. The manifest.json file was generated with dbt compile instead of dbt run, making it incompatible with state comparison
Explanation

State comparison requires a baseline manifest.json in the directory specified by --state. If that directory is empty or contains a stale/missing manifest, dbt cannot compare state and defaults to selecting all models. A dbt version mismatch can cause hash differences but typically surfaces as mismatches rather than full selection. --defer is separate from state selection and its absence does not cause all models to be selected. dbt compile does produce a valid manifest.json that can be used for state comparison — the artifact format is the same.

2.

A dbt developer runs dbt run --select +fct_orders from the command line. Which of the following best describes what dbt will build?

  • A. fct_orders and all models in the same directory
  • B. fct_orders and all of its downstream models (descendants)
  • C. Only fct_orders itself, ignoring all parents and children
  • D. fct_orders and all of its upstream models (ancestors)✓ Correct
Explanation

The + prefix on a model selector means 'include all upstream ancestors.' Running +fct_orders selects fct_orders plus every model it depends on, traversing up the DAG. A suffix + (e.g., fct_orders+) selects downstream descendants. Selecting only fct_orders would use no + at all. The --select flag does not filter by directory location by default.

3.

A team is using model versions to manage a breaking change to dim_product. They define dim_product_v1 and dim_product_v2 in their project. Which THREE statements are TRUE about dbt model versioning?

  • A. A model contract can be applied independently to each version, allowing different schemas per version.
  • B. The deprecation_date property can be set on older versions to signal to consumers that they should migrate.✓ Correct
  • C. Model versions are only supported for models with a table or incremental materialization.
  • D. Downstream models using ref('dim_product') will automatically resolve to the latest version unless a specific version is pinned.✓ Correct
  • E. Each version is compiled and run as a separate node in the DAG.✓ Correct
  • F. Model versions must share the same materialization type.
Explanation

TRUE — ref('dim_product') resolves to the latest version by default; consumers can pin a specific version with ref('dim_product', version=1). TRUE — deprecation_date is a first-class property on versioned models that communicates to downstream consumers when a version will be removed, surfaced in dbt docs and logs. TRUE — each model version is an independent node in the DAG with its own compiled SQL, tests, and run results. FALSE — model versions can have different materializations; there is no such constraint. FALSE — contracts are attached at the versioned model level and can differ, but versions are expected to share the contract defined on the parent model config; they do not arbitrarily have completely independent schemas by default (though advanced setups allow variation). FALSE about versions being restricted to table/incremental — all materializations are supported.

4.

An analytics engineer inspects manifest.json and run_results.json together to implement a custom data observability script. They want to find, for each model: (1) which nodes it depends on, and (2) whether it succeeded in the last run. Which fields from each artifact should they join on? (Select TWO — one from each artifact) (Select TWO)

  • A. run_results.json → results[].unique_id to match results back to manifest nodes✓ Correct
  • B. manifest.json → nodes.<unique_id>.path as the primary identifier for joining
  • C. manifest.json → nodes.<unique_id>.depends_on.nodes for upstream dependency lists✓ Correct
  • D. manifest.json → nodes.<unique_id>.compiled_sql to identify which models ran
  • E. run_results.json → results[].execution_time as the join key between artifacts
Explanation

The correct approach is to use manifest.json → nodes.<unique_id>.depends_on.nodes to get the list of upstream dependencies for each model, and run_results.json → results[].unique_id as the matching key to look up each node's execution status. unique_id is the stable identifier shared across both artifacts, making it the correct join key. compiled_sql is query text, not an identifier. execution_time is a metric, not a join key. path is a file path that is not guaranteed to be unique across packages and is not the standard join key.

5.

After a production dbt run, an engineer wants to identify which models took longest to execute in order to optimize the project. Which artifact and field combination provides this information?

  • A. manifest.json → nodes.<node_id>.compiled_sql
  • B. manifest.json → nodes.<node_id>.config.materialized
  • C. run_results.json → results[].execution_time✓ Correct
  • D. run_results.json → results[].adapter_response.rows_affected
Explanation

run_results.json captures runtime telemetry for each executed node. The execution_time field (in seconds) under each result object records how long that model took to run — exactly what is needed for performance analysis. materialized describes the materialization strategy, not runtime. rows_affected is a database response count, not execution duration. compiled_sql is the rendered SQL query, not a timing metric.

Test yourself across every dbt Analytics Engineering Certification domain

The free dbt Analytics Engineering Certification practice test mixes about 20 questions weighted like the exam. The full 327-question bank adds instant grading, flashcards and a timed mock exam.

Study this domain

Leveraging the dbt State study guide (dbt Analytics Engineering Certification) →

Other dbt Analytics Engineering Certification domains

← All dbt Analytics Engineering Certification study resources