All dbt Labs exams
Free dbt Architect Certification Exam practice test: 30 questions with answers
30 original questions for dbt Architect Certification Exam, drawn from every topic area. Answer each one to see whether you got it right and why. No sign-up.
- Free questions
- 30
- Full bank
- 112 questions
- Real exam
- 65 questions, 120 min
- Passing score
- 65%
dbt Architect Certification Exam exam guide: topics, cost and format
All 30 dbt Architect Certification Exam questions with answers
The same questions as the test above, grouped by exam topic. Open any question to see the answer and explanation.
Configuring dbt data warehouse connections (4 questions)
Question 1
A security team has enabled a network policy on the Snowflake account that only admits connections from approved address ranges. After the dbt Cloud project is set up, every scheduled run fails while opening the warehouse connection. What is the most appropriate fix?
- ATurn off the network policy for the whole account so the scheduled runs can connect
- BMove the Snowflake account to a different cloud region so the connection path changes
- CGrant the dbt service user the account administrator role so it bypasses network checks
- DAdd the egress IP addresses that dbt Cloud publishes to the policy's approved list
Show answer and explanationHide answer
Correct answer: DWarehouses that restrict inbound addresses must allow the egress IPs dbt Cloud uses, so adding them keeps the restriction in place while letting dbt connect. Turning the policy off removes a security control, a role grant does not get around network-level checks, and a region change does not alter the source addresses dbt Cloud uses.
Question 2
Which statement best describes OAuth authentication for a warehouse connection in dbt Cloud?
- AEach user signs in through the warehouse's identity provider so queries run under their own grants
- BA token generated by dbt Cloud is pasted into a profiles file that lives in the repository
- CA shared technical password is stored once in the project and used by every developer and every scheduled job run
- DThe warehouse accepts any request that arrives from one of dbt Cloud's published IP addresses
Show answer and explanationHide answer
Correct answer: AOAuth delegates sign-in to the warehouse's identity provider, so each user's queries run under their own grants and appear in the warehouse audit trail. A shared password, a token committed to a repository, or trusting an IP address does not tie access to an individual identity.
Question 3
An engineer has just entered the warehouse details for a new connection in dbt Cloud and wants to confirm that the credentials and network path work before attaching the connection to any environment. What should they do?
- ASchedule a full production job and check the next morning whether it succeeded
- BUse the connection test in the project setup to validate the credentials and network path
- CAsk the warehouse administrator to confirm the password by email before doing anything else
- DCreate a deployment environment and trigger it manually with every model selected
Show answer and explanationHide answer
Correct answer: BThe connection test checks credentials and reachability directly, which is the quickest and safest check. A scheduled production run delays the answer and can touch live data, an email confirmation does not test the network path, and a full build is far heavier than a connection check.
Question 4
A team wants each developer's interactive development runs to use that developer's own warehouse credentials, while scheduled production jobs run as one shared service identity. Which setup matches this requirement?
- APersonal development credentials for each developer, and a shared deployment credential for scheduled jobs
- BThe same shared password is used in every environment, including the development one
- CProduction jobs use a credential stored under each developer's personal profile
- DOne developer's credential is stored on the project and reused by every environment, including production
Show answer and explanationHide answer
Correct answer: Adbt Cloud keeps development credentials, which each user supplies for their own sessions, separate from the deployment credentials that scheduled jobs use. The other options either share one identity everywhere or make production depend on personal accounts, which weakens auditing and access control.
Configuring dbt git connections (4 questions)
Question 5
Which two benefits come from connecting a repository through a native git provider integration instead of a generic git URL with a deploy key? (Choose two.)
- APull request events can trigger CI jobs automatically
- BJob status can be reported back to the pull request on the git provider
- CCompiled model SQL is stored on the git provider's servers for review
- DThe repository's git history is copied into the warehouse as a table
Show answer and explanationHide answer
Correct answer: A, BNative integrations let the git provider notify dbt Cloud of pull request events, which enables automatic CI, and let job status be reported back to the pull request. The other two statements describe things dbt Cloud does not do with the git provider or the warehouse.
Question 6
A team wants dbt Cloud to clone a private repository hosted on a git server that has no native integration. Which access method is the most appropriate?
- AA shared username and password stored in a plain environment variable
- BThe personal SSH key of the administrator who created the project
- CA deploy key that grants read access to that one repository
- DMaking the repository public for the duration of the setup
Show answer and explanationHide answer
Correct answer: CA deploy key is scoped to a single repository and can be limited to read access, which is enough for cloning. A personal key ties the connection to one person, a shared password is an unnecessary exposure, and a public repository exposes source code to everyone.
Question 7
A developer pushes a new commit to a feature branch while a CI job that builds that branch is already running. Which code does the running job use?
- AThe newest commit, because dbt Cloud re-reads the branch before building each model
- BThe commit that was checked out when the run started, not any later push
- CThe version from the last successful run of the same job, which is reused automatically
- DThe version currently on the default branch of the repository
Show answer and explanationHide answer
Correct answer: Bdbt Cloud checks out the code when a run starts and builds from that snapshot, so a later push does not change the run in progress. The other options describe re-reading the branch mid-run, reusing an earlier run's code, or switching to the default branch, none of which happen.
Question 8
Which two practices support a safe pull request workflow in which CI validates changes before they merge? (Choose two.)
- ARun CI that builds only the changed models against production state
- BAllow merges to the main branch while CI checks are still running
- CBuild pull requests in the production schema so results match the final state
- DRequire CI to pass before a pull request can be merged
Show answer and explanationHide answer
Correct answer: A, DBuilding only the changed models against production state validates a change cheaply, and requiring passing CI as a merge condition stops broken models from reaching main. Merging before checks finish and building in the production schema both undermine that safety.
Creating and maintaining dbt environments (4 questions)
Question 9
A security team wants to rotate the RSA private key that dbt Cloud uses to authenticate to Snowflake, with no interruption to scheduled jobs. Which sequence is the safest?
- AStop all jobs, replace the key pair, and restart the jobs once the change is complete
- BAdd the new public key next to the old one, update dbt Cloud, then remove the old key
- CEmail the new private key to every developer and let each person update their own copy
- DCommit the new private key to the repository so every environment picks it up automatically
Show answer and explanationHide answer
Correct answer: BRegistering the new public key before switching lets both keys work during the overlap, so jobs keep authenticating while the credential in dbt Cloud is updated and the old key is removed afterward. Stopping jobs causes avoidable downtime, while emailing or committing a private key exposes the credential.
Question 10
A repository's default branch is named main, but the production environment should build from a long-lived branch named release. What should the team change?
- ARename the release branch to main so that the default branch matches production
- BSet a custom branch on the production environment that points at release
- CEdit the dbt_project.yml file so that it names the release branch as its source
- DCreate a second dbt project that is hardwired to the release branch
Show answer and explanationHide answer
Correct answer: BEnvironments can be configured with a custom branch, which tells dbt Cloud which branch that environment builds from without changing the repository layout. Renaming the release branch to main would disrupt the team's workflow, a second project is unnecessary, and dbt_project.yml does not choose which git branch an environment checks out.
Question 11
A model's source database name differs between the development environment and production. The team wants the same code to read the right value in each environment. Which approach fits?
- AHardcode separate database names in two copies of each model file
- BKeep one git branch per environment and merge the values in during each deployment
- CDefine an environment variable on each environment and read it with env_var()
- DDuplicate the whole project and maintain both copies by hand
Show answer and explanationHide answer
Correct answer: CEnvironment variables are set per environment in dbt Cloud and read with the env_var() function, so one codebase adapts to each environment. Hardcoded copies, per-environment branches, and duplicated projects all create drift and extra maintenance.
Question 12
A CI job should build only the models changed in a pull request and read unchanged upstream models from the production environment. Which dbt Cloud capability provides this?
- ADeferral to the production environment, which resolves unbuilt upstream models there
- BA nightly copy of the production schema into a CI schema before each pull request run
- CA full build of every model on each CI run, so nothing depends on production state
- DHardcoded production table names inside the changed models so they bypass ref()
Show answer and explanationHide answer
Correct answer: ADeferral tells dbt to resolve references to unbuilt models against the production environment, so CI builds only what changed. A full build repeats work unnecessarily, copying the production schema is slow and costly, and hardcoding table names bypasses ref() and breaks lineage.
Creating and maintaining job definitions (4 questions)
Question 13
A job runs three commands in order: dbt seed, then dbt run, then dbt test. The dbt run command fails. What happens to the dbt test command?
- AIt runs anyway, because the test command does not depend on the build command
- BIt runs in parallel with the next scheduled job in the same account
- CIt is skipped, because commands run in sequence and a failure ends the run
- DIt is queued and retried automatically at the next scheduled trigger
Show answer and explanationHide answer
Correct answer: CCommands in a job run one after another, and a failed command ends the run, so the later test command does not execute. The other options describe independent execution, parallel runs, or an automatic retry, none of which happen within a single job run.
Question 14
A marts job should start only after the staging job finishes successfully, with no fixed clock time between them. Which feature fits this requirement?
- ASchedule the marts job 30 minutes after the staging job's scheduled start time
- BRun both jobs manually each morning in the correct order
- CTrigger the marts job when the staging job completes successfully
- DSet the marts job to run every minute so it always catches up with staging
Show answer and explanationHide answer
Correct answer: CJob chaining starts a downstream job when an upstream job completes, so the dependency follows actual completion rather than a guessed clock time. A fixed offset can start too early or too late, manual runs depend on someone remembering, and polling every minute wastes runs.
Question 15
What is the main purpose of enabling documentation generation on a production deployment job?
- ATo store every test result and its failing rows in the warehouse for later analysis by the team
- BTo lock the production schema so that no other job can write to it during the run
- CTo refresh the catalog metadata so descriptions and lineage match the latest successful build
- DTo compress the target directory before its artifacts are uploaded to storage
Show answer and explanationHide answer
Correct answer: CGenerating docs during a run produces the catalog artifacts that dbt Cloud uses to show descriptions, columns, and lineage, so they reflect the latest build. The other options describe results storage, schema locking, or file compression, none of which this setting does.
Question 16
A CI job runs on every push to a pull request. The team wants unchanged models to resolve to the output of the most recent successful run of that same CI job, not to production. Which feature provides this?
- ADeferral to the production environment, which uses production as the baseline
- BA full build of every model on each push, which ignores any earlier baseline
- CA copy of the CI schema taken manually before each push so the baseline is preserved
- DSelf-deferral, which points unchanged references at this job's last successful run
Show answer and explanationHide answer
Correct answer: DSelf-deferral points unchanged references at the last successful run of the same job, which suits a CI loop that keeps its own baseline. Deferral to production uses a different baseline, a full build ignores the baseline entirely, and a manual schema copy is slow and error-prone.
Configuring dbt security and licenses (4 questions)
Question 17
Which two practices reduce the risk from long-lived credentials used by automation that calls the dbt Cloud API? (Choose two.)
- AScope each service token to only the permission sets the automation needs
- BKeep the token in a shared team document so it can be recovered easily
- CRotate tokens on a regular schedule and revoke any that are no longer in use
- DGenerate the token from an administrator's personal login and reuse it everywhere
Show answer and explanationHide answer
Correct answer: A, CService tokens carry only the permission sets assigned to them, and regular rotation with revocation limits the damage from a leaked credential. A shared document and reuse of an administrator's personal token both widen exposure and tie automation to one person.
Question 18
A contractor needs to read Catalog documentation for one project but must not edit models or trigger jobs. Which configuration is most appropriate?
- AAssign the contractor a permission set that allows only read access
- BShare the login of a developer who already has access to the project
- CGive the contractor the administrator permission set for the length of the engagement
- DCreate a service token with write permissions and hand it to the contractor
Show answer and explanationHide answer
Correct answer: APermission sets define what a user can do, so a read-only set matches the need without granting edit or run rights. Administrator access exceeds the requirement, a shared login removes individual accountability, and a write-enabled service token gives more power than the contractor needs.
Question 19
An identity provider administrator wants every user in the data-analysts group to receive the Analyst license automatically when they sign in through SSO. Which feature handles this?
- AAn outbound webhook that updates the license whenever the identity provider sends an event
- BManually changing each user's license in the account settings after sign-up
- CA service token that carries the Analyst license for all newly created users
- DLicense mappings that link identity provider group values to dbt licenses
Show answer and explanationHide answer
Correct answer: DLicense mappings take the group information the identity provider sends during SSO and assign the matching dbt license, so assignments follow group membership. Manual changes do not scale, service tokens do not act as user licenses, and outbound webhooks send notifications rather than change account settings.
Question 20
Which statement best describes how SSO and role-based access control work together in an enterprise dbt Cloud account?
- AThe identity provider authenticates users, and group membership maps to roles that follow the directory
- BEvery user must be added to each project by hand, and SSO only controls the login screen
- CRole assignments are stored in the warehouse and read again at each sign-in
- DUsers keep separate local passwords for each project, and SSO only changes the appearance of the sign-in page
Show answer and explanationHide answer
Correct answer: ASSO hands authentication to the identity provider, and group-based role mapping lets access follow directory membership, which keeps onboarding and offboarding in one place. The other options keep local passwords, require manual per-project grants, or store role data in the warehouse, which is not how dbt Cloud access works.
Setting up monitoring and alerting for jobs (4 questions)
Question 21
A nightly production job fails at 2 a.m., and the data team learns about it at 9 a.m. only when a dashboard shows stale numbers. Which change best shortens the time to detection?
- ARun the production job twice as often overnight so that one of the runs is more likely to succeed
- BAsk analysts to check the job history each morning before opening their dashboards
- CRemove the tests from the job so that it finishes without reporting a failure
- DConfigure email alerts for production job run failures, sent to the on-call group
Show answer and explanationHide answer
Correct answer: DFailure notifications on the production job push the event to the people who must act as soon as the run fails. Running more often does not make the failure visible, a morning check is manual and late, and removing tests hides the problem instead of detecting it.
Question 22
A platform team wants each failed run to open a ticket in its incident tool, with the event payload delivered to an endpoint the team hosts. Which dbt Cloud feature fits this requirement?
- AA scheduled dbt test that writes failure rows into a table the incident tool reads
- BAn inbound webhook that dbt Cloud polls every few minutes for new tickets from the incident tool
- CAn outbound webhook subscribed to job run events and pointed at the team's endpoint
- DA deployment environment whose target schema is the incident tool's database
Show answer and explanationHide answer
Correct answer: COutbound webhooks send event payloads from dbt Cloud to a URL the team controls, which lets the incident tool react to run events. dbt Cloud does not poll external endpoints for tickets, a test table is an indirect and fragile route, and an environment only defines where models are built.
Question 23
An on-call engineer receives alerts for every development run and every production run, and has started ignoring them all. Which change best restores useful alerting?
- ATurn off all alerts and have the engineer review job history once a week
- BSend every alert to one shared channel that all teams mute by default, so the signal is lost entirely
- CDelay every alert by a day so that the team can decide whether it matters
- DLimit failure alerts to production jobs that need action, and keep development results in the UI
Show answer and explanationHide answer
Correct answer: DScoping failure alerts to production jobs that need action cuts the noise and keeps each alert meaningful, while development results stay visible in the UI. A weekly review, muted shared channels, and day-long delays all let production problems go unnoticed for too long.
Question 24
A revenue report depends on a nightly job, and its owners want a message when the job completes successfully, not only when it fails. What should the team do?
- ATurn off failure notifications so that only success messages arrive
- BAdd a success email step to every model in the project
- CCheck the job logs manually once the report is already due
- DSubscribe the report owners to success notifications on that job
Show answer and explanationHide answer
Correct answer: DJob notifications can be set for success as well as failure, so the owners hear when the report's inputs are ready. Adding email steps to every model is unnecessary, manual log checks arrive too late, and turning off failure alerts removes the signal that matters most.
Setting up a dbt mesh and cross-project references (3 questions)
Question 25
Which three statements about dbt model access levels are correct? (Choose three.)
- AA private model can be referenced only by models in the same group
- BA model with no access level set uses protected, which is the default
- CA public model can be referenced by models in other dbt projects
- DA private model can be referenced by any project that shares the same account
- EA public model is hidden from the dbt Catalog so that it cannot be discovered
Show answer and explanationHide answer
Correct answer: A, B, CPrivate models are limited to their own group, protected is the default and allows references within the project, and public models are the ones other projects can reference. Private models are not open to other projects and public models are meant to be discoverable, so the last two statements are false.
Question 26
A finance dbt project needs a model named customer_orders that is published as a public model by a separate dbt project called core. Which reference syntax should the finance model use?
- A{{ source('core', 'customer_orders') }}, which reads the upstream table directly
- B{{ ref('core', 'customer_orders') }}, which names the project and the model
- C{{ ref('customer_orders') }} with the core project name added to dbt_project.yml
- D{{ this('core.customer_orders') }}, which points at the current model's relation
Show answer and explanationHide answer
Correct answer: BA two-argument ref names the project and the model, which is how dbt resolves a public model from another project. A source reference points at raw tables rather than dbt models, a one-argument ref searches only the current project, and this refers to the current model's own relation.
Question 27
A downstream team loads a mart into a reporting tool that expects fixed column names and data types. The mart owner wants the build to fail whenever the output schema drifts. Which feature should be enabled?
- AAn exposure that describes the reporting tool and its dependency on the mart
- BA model contract on the mart that declares the expected columns and types
- CA singular test that counts the rows in the mart on every run
- DA snapshot of the mart taken before each run so changes can be reviewed
Show answer and explanationHide answer
Correct answer: BA model contract declares the expected column names and data types, and dbt checks the model against that definition at build time so drift causes a failure. An exposure documents a downstream use without enforcing anything, a singular test checks data rather than schema shape, and a snapshot records history.
Configuring and using dbt Catalog (3 questions)
Question 28
A data engineer plans to change the logic of a staging model and wants to know which downstream models and exposures would be affected. Where in dbt Catalog should they look?
- AThe job run history, which lists every model that executed in the last run and how long it took
- BThe warehouse query history for the staging schema, filtered by table name
- CThe environment variable list, which records the values each job receives
- DThe lineage graph, which shows the downstream dependencies of the selected model
Show answer and explanationHide answer
Correct answer: DLineage in dbt Catalog traces the dependency graph from a node to its downstream models and exposures, which is what impact analysis requires. Run history records what executed, query history shows warehouse activity rather than model dependencies, and environment variables do not describe relationships between models.
Question 29
In dbt Catalog, a mart shows a failed status after last night's run. The team needs to find out why it failed. Which information is most useful first?
- AThe run logs and the compiled SQL for that model from the failed run
- BThe model's description, its column-level documentation, and the tags the team applied to it
- CThe name of the person who last edited the model's YAML file
- DThe row count of the mart from the previous week
Show answer and explanationHide answer
Correct answer: AThe logs and compiled SQL from the failed run show the error message and the exact statement the warehouse rejected, which is the starting point for a fix. Descriptions, edit history, and old row counts do not explain why the most recent execution failed.
Question 30
A large event table takes hours to rebuild each night, and most rows never change after they land. Which materialization is most appropriate to reduce warehouse cost?
- AA view, so nothing is stored and the query runs only when someone reads it
- BAn ephemeral model, so the logic is inlined into each downstream model that uses it
- CA table rebuilt from scratch each night with the full history of events
- DAn incremental model, so each run processes only the new or changed rows
Show answer and explanationHide answer
Correct answer: DIncremental models process only new or changed rows on each run, which suits append-heavy data that rarely changes. A view pushes the cost to every read, an ephemeral model only inlines SQL without reducing the work, and a full nightly rebuild repeats the same work.