dbt Analytics Engineering Certification · 17% of the exam

Deployment and orchestration: free practice questions

5 sample questions from our 43-question bank for this domain — answers and explanations included. These are the same scenario-based style as the real dbt Labs exam.

1. In dbt Cloud, what is the PRIMARY functional difference between a **Development** environment and a **Deployment** (production) environment?

  • A. Development environments support custom branches and per-developer credentials, while Deployment environments run scheduled jobs against a fixed branch and shared credentials✓ Correct
  • B. Development environments can only run `dbt compile`, while Deployment environments can execute `dbt run` and `dbt test`
  • C. Development environments write to a separate database schema automatically; Deployment environments always write to the default schema defined in the adapter connection
  • D. Development environments use dbt Core under the hood, while Deployment environments use a proprietary dbt Cloud execution engine
Explanation

In dbt Cloud, Development environments are tied to individual developers who can work on custom branches and override credentials (e.g., personal schemas), while Deployment environments are used for scheduled jobs that run against a canonical branch (often `main`) with service-account credentials. Option B is wrong — both environment types support all dbt commands. Option C is partially true (schemas can differ) but misrepresents how it works; schema separation is a profiles/environment variable setting, not a hard platform restriction. Option D is false — both use dbt Core execution under the hood in dbt Cloud.

2. A dbt Core project is orchestrated via Apache Airflow. A senior engineer proposes splitting the daily job into two Airflow tasks: one that runs `dbt run` for all models and a second that runs `dbt test`. They argue this is equivalent to `dbt build`. Which of the following are valid reasons to PREFER `dbt build` over the split approach? (Select TWO)

  • A. `dbt build` prevents downstream models from being materialized when their upstream tests fail, whereas the split approach materializes all models before any tests run✓ Correct
  • B. `dbt build` also executes seeds and snapshots in the correct dependency order, whereas the split approach only covers models and tests✓ Correct
  • C. `dbt build` automatically sends Slack notifications on test failure, which the split approach does not support
  • D. `dbt build` compiles all SQL before execution, while `dbt run` only compiles each model just-in-time
  • E. `dbt build` uses fewer database connections than two separate `dbt run` and `dbt test` invocations
Explanation

Option A is correct: `dbt build` runs tests on each node before building its downstream dependents, preventing bad data from propagating — the split approach does not offer this guarantee. Option B is correct: `dbt build` handles seeds, snapshots, models, and tests in a unified dependency-aware execution, whereas separate `dbt run` + `dbt test` commands would not naturally interleave snapshot and seed execution in the right order. Option C is incorrect — Slack notifications are not a built-in feature of `dbt build`; they require external integrations. Option D is incorrect — both `dbt run` and `dbt build` compile SQL before executing each model. Option E is a misconception; connection usage depends on thread settings and model count, not the specific command used.

3. An analytics engineer needs to re-run only the models that failed in the previous dbt Cloud job run, without re-running models that already succeeded. Which command achieves this?

  • A. `dbt run --select state:modified`
  • B. `dbt retry`
  • C. `dbt run --select result:error --state ./last-run-artifacts`✓ Correct
  • D. `dbt run --fail-fast --select last_run:failed`
Explanation

`result:error` is a dbt node selection method that selects models whose previous run resulted in an error, using the `run_results.json` from that prior run (pointed to by `--state`). This allows targeted re-execution of only failed models. Option A uses `state:modified`, which compares the current project code against a prior manifest — it selects models whose code changed, not models that failed. Option B (`dbt retry`) is a valid dbt Cloud UI feature and a CLI command (added in dbt v1.6), but it is less precise than `result:error` for scripted use and not always available in all dbt Core workflows — however, note that `dbt retry` IS a correct modern answer; if the exam context is dbt Cloud specifically, both B and C could be considered correct, but the most universally applicable and explicit command is C. Option D uses `last_run:failed`, which is not a valid dbt selection syntax.

4. Your team wants to implement a Slim CI check in dbt Cloud. The goal is to run tests only on models that have changed in a pull request, while deferring the builds of unchanged upstream models to the production environment. Which command correctly implements this pattern?

  • A. `dbt test --select state:modified+ --defer --state ./prod-artifacts`
  • B. `dbt build --select state:modified+ --defer --state ./prod-artifacts`✓ Correct
  • C. `dbt run --select state:modified --no-defer --state ./prod-artifacts`
  • D. `dbt test --select path:modified --defer --state ./prod-artifacts`
Explanation

`dbt build` is the preferred command for Slim CI because it runs models, tests, seeds, and snapshots together. `state:modified+` selects all modified models AND their downstream dependents (ensuring nothing downstream of a change is missed). `--defer` tells dbt to resolve references to unmodified upstream nodes from the production manifest rather than rebuilding them. `--state` points to the directory containing the production `manifest.json`. Option A uses `dbt test` alone, which skips the model build step — changed models would not be rebuilt before testing. Option C omits `--defer`, meaning dbt would try to build all upstream models rather than reusing production artifacts, and `state:modified` (without `+`) misses downstream impacts. Option D uses `path:modified`, which is not a valid dbt selection method — `state:modified` is the correct selector.

5. A dbt developer runs the following command: `dbt run --select +orders`. What does the `+` prefix operator specify in this context?

  • A. Run the `orders` model and all models that `orders` depends on (its ancestors)✓ Correct
  • B. Run the `orders` model and all models that depend on `orders` (its descendants)
  • C. Run only the direct parent models of `orders`, excluding `orders` itself
  • D. Run all models in the same directory as `orders` plus `orders` itself
Explanation

The `+` prefix operator selects a model and all of its upstream ancestors (parents, grandparents, etc.). This ensures all dependencies of `orders` are also run. Option B describes the `orders+` syntax (suffix `+`), which selects descendants. Option C is wrong — `+orders` includes all ancestors at all depths, not just direct parents, and it does include `orders` itself. Option D is wrong — the `+` operator is a graph traversal operator, not a directory-scoped selector.

38 more questions in this domain

Practice the full bank with instant grading, flashcards, and a timed mock exam.

Start practicing free
Deployment and orchestration — Free dbt Analytics Engineering Certification Practice Questions | DataCertPrep — Certification Prep