CertSafari

    Free DBT Architect Sample Questions

    35 free sample questions from our bank of 349+, covering every exam domain, with answers and detailed explanations. Updated September 2026.

    Domain 1: Configuring dbt data warehouse connections

    Subdomain 1.2: Configuring IP whitelist

    1.An admin is reviewing the IP Restrictions rule table before enabling the feature: Rule name | Type | CIDR range | Status Office network | Allow | 198.51.100.0/24 | enabled Corporate VPN | Allow | 203.0.113.0/24 | enabled Flagged contractor | Deny | 203.0.113.128/28 | enabled Legacy office | Allow | 192.0.2.0/24 | disabled A contractor connects from 203.0.113.130, an address inside both the Corporate VPN Allow range and the Flagged contractor Deny range. Based on this table, which rule determines the outcome for that connection?

    1. A.The Flagged contractor Deny rule, because a narrower Deny range nested inside a broader Allow range takes precedence for the addresses it covers.
    2. B.The Corporate VPN Allow rule, because Allow rules are always evaluated ahead of Deny rules regardless of how the ranges compare in size.
    3. C.The Legacy office rule, because a disabled rule still applies to any address that would otherwise be denied by an active Deny rule.
    4. D.Neither rule applies, because dbt Cloud requires an exact single-address match rather than accepting CIDR ranges for enforcement.
    Show answer & explanation

    Correct answer: A — The Flagged contractor Deny rule, because a narrower Deny range nested inside a broader Allow range takes precedence for the addresses it covers.

    • A. This is correct: the contractor's address falls inside the narrower Flagged contractor Deny range nested within the broader Corporate VPN Allow range, and the narrower Deny rule wins for that address.
    • B. This is incorrect because rule priority is based on range specificity, not rule type; a nested, more specific Deny range overrides the broader Allow range containing it.
    • C. This is incorrect because a rule marked disabled in the table plays no role in evaluating the connection at all, regardless of what its CIDR range would otherwise cover.
    • D. This is incorrect because dbt Cloud's IP restriction rules are defined and enforced using CIDR ranges, not single-address matching.

    Subdomain 1.1: Understanding how to connect the warehouse

    2.A dbt Cloud connection's edit screen shows the following fields under 'Optional settings' for a Databricks connection: `Auth Method: OAuth`, `OAuth Client ID: [blank]`, `OAuth Client Secret: [blank]`, `Catalog: main`, `HTTP Path: /sql/1.0/warehouses/abc123`. An admin reports the connection test fails with an OAuth authentication error. Which field on this screen is the most likely cause of the failure?

    1. A.The empty `OAuth Client ID` and `OAuth Client Secret` fields, since Databricks OAuth requires both values from the registered OAuth app before authentication can succeed.
    2. B.The `Catalog: main` value, since Databricks OAuth connections must reference a catalog named exactly `oauth_catalog` rather than the default catalog.
    3. C.The `HTTP Path` value, since OAuth authentication requires a SQL warehouse path formatted with a numeric prefix instead of the `/sql/1.0/` segment shown.
    4. D.The `Auth Method: OAuth` selection itself, since Databricks connections must use `Personal Access Token` as the auth method for any automated testing.
    Show answer & explanation

    Correct answer: A — The empty `OAuth Client ID` and `OAuth Client Secret` fields, since Databricks OAuth requires both values from the registered OAuth app before authentication can succeed.

    • A. Databricks OAuth cannot authenticate without both the Client ID and Client Secret from the registered OAuth app; leaving those fields blank is the direct, visible cause of an OAuth authentication failure on this screen.
    • B. There is no requirement that OAuth connections reference a catalog named `oauth_catalog`; the catalog field selects which Databricks catalog queries target and has no bearing on OAuth authentication.
    • C. The `/sql/1.0/warehouses/...` format is the standard HTTP Path for a Databricks SQL warehouse and is unrelated to how OAuth credentials are validated.
    • D. OAuth is a supported and documented authentication method for Databricks connections; a personal access token is an alternative, not a requirement for testing a connection.

    Subdomain 1.4: Authenticating through OAuth to access the data in dbt

    3.Which statement correctly distinguishes how a dbt Cloud Enterprise account uses Databricks OAuth versus token-based credentials?

    1. A.OAuth authenticates individual developers in the Studio IDE, while scheduled deployment jobs continue to run under separate service principal token credentials rather than OAuth.
    2. B.OAuth is used exclusively for scheduled deployment jobs, while developers authenticate to the Studio IDE with personal access tokens generated in the Databricks account console.
    3. C.OAuth replaces both developer and deployment authentication entirely, so once configured, no service principal tokens are needed anywhere in the project's environments.
    4. D.OAuth applies only to BigQuery and Snowflake connections, so Databricks projects must always use personal access tokens for both development and deployment.
    Show answer & explanation

    Correct answer: A — OAuth authenticates individual developers in the Studio IDE, while scheduled deployment jobs continue to run under separate service principal token credentials rather than OAuth.

    • A. This is correct. Databricks OAuth covers user-to-machine authentication for interactive Studio IDE sessions, while deployment environments keep using separate service principal token credentials for scheduled jobs.
    • B. This is incorrect. It reverses the actual split — OAuth is the developer-facing authentication method for the Studio IDE, and it is deployment jobs that rely on separate token-based service principal credentials.
    • C. This is incorrect. Configuring OAuth does not eliminate the need for service principal tokens; deployment environments are deliberately kept on token-based credentials independent of the developer OAuth flow.
    • D. This is incorrect. Databricks connections do support OAuth as a warehouse authentication method for developers, alongside Snowflake and BigQuery, so Databricks projects are not limited to personal access tokens.

    Subdomain 1.5: Adding Client ID and Secret for OAuth

    4.A dbt Cloud administrator runs the following statement in Snowflake to prepare for issuing OAuth credentials, then later sees a `USE ROLE not allowed` error for developers relying on secondary roles: ```sql CREATE OR REPLACE SECURITY INTEGRATION DBT_CLOUD TYPE = OAUTH ENABLED = TRUE OAUTH_CLIENT = CUSTOM OAUTH_CLIENT_TYPE = 'CONFIDENTIAL' OAUTH_REDIRECT_URI = 'https://cloud.getdbt.com/complete/snowflake' OAUTH_ISSUE_REFRESH_TOKENS = TRUE OAUTH_REFRESH_TOKEN_VALIDITY = 7776000; ``` Which parameter is missing from this statement and needs to be added to resolve the error?

    1. A.`OAUTH_USE_SECONDARY_ROLES = 'IMPLICIT'`
    2. B.`OAUTH_ISSUE_REFRESH_TOKENS = 'IMPLICIT'`
    3. C.`OAUTH_CLIENT_TYPE = 'IMPLICIT'`
    4. D.`OAUTH_REDIRECT_URI = 'IMPLICIT'`
    Show answer & explanation

    Correct answer: A — `OAUTH_USE_SECONDARY_ROLES = 'IMPLICIT'`

    • A. This parameter is required specifically to allow secondary roles to be used through the OAuth session, and its absence is what produces the `USE ROLE not allowed` error described.
    • B. This parameter already appears in the statement set to `TRUE` and controls refresh token issuance, not secondary role usage, so changing it would not address the error.
    • C. `OAUTH_CLIENT_TYPE` is already present and correctly set to `'CONFIDENTIAL'` for a custom OAuth client; it has no relationship to secondary role permissions.
    • D. `OAUTH_REDIRECT_URI` is already present and set to the dbt callback address; it controls where the OAuth flow returns the user, not role elevation behavior.

    Subdomain 1.3: Creating and testing a connection for the project

    5.A dbt Cloud admin is configuring a new Databricks connection for a project and wants developers to authenticate via OAuth instead of personal access tokens. After creating the account-level Databricks connection, where must the OAuth Client ID and Client Secret be entered so the connection test can use OAuth?

    1. A.Under the connection's Optional settings, where OAuth application credentials are attached directly to that specific Databricks connection object.
    2. B.Under Account Settings → Notifications, since OAuth callback confirmations are routed through the account's alerting configuration.
    3. C.Under each developer's personal profile page, because OAuth credentials for Databricks are scoped per user rather than per connection.
    4. D.Under the project's Environment Variables, since OAuth secrets are treated the same as any other environment-scoped configuration value.
    Show answer & explanation

    Correct answer: A — Under the connection's Optional settings, where OAuth application credentials are attached directly to that specific Databricks connection object.

    • A. This is correct because Databricks OAuth Client ID and Client Secret are entered under the Optional settings of the connection itself, tying the OAuth application to that one warehouse connection rather than to a user or project.
    • B. This is incorrect because the Notifications area configures job alerting channels like email, Slack, or Teams; it has no field for OAuth application credentials and plays no role in warehouse authentication.
    • C. This is incorrect because the OAuth Client ID and Secret belong to the connection object, not to any individual developer's profile; profiles only hold each developer's own personal credentials once the connection is already configured.
    • D. This is incorrect because Environment Variables store project-level configuration values referenced in code and job settings, not the OAuth application credentials that authorize a specific warehouse connection.

    Domain 2: Configuring dbt git connections

    Subdomain 2.1: Connecting the git repo to dbt

    6.A team connects a GitHub repository named `MyRepo` to a dbt Cloud project, but enters the repository name as `myrepo` during setup and the clone fails. What is the root cause of this failure?

    1. A.Repository names entered during GitHub App setup must exactly match the case used in the repository's GitHub URL, and a mismatched case causes cloning to fail.
    2. B.GitHub repository names are case-insensitive at the API level, so the failure instead indicates the dbt application was never installed for that organization.
    3. C.dbt Cloud caches repository metadata for twenty-four hours after creation, so any repository accessed within that window will report a clone failure.
    4. D.The organization owner limited the GitHub App's repository access list to exclude the newly created repository, which always surfaces as a generic clone error.
    Show answer & explanation

    Correct answer: A — Repository names entered during GitHub App setup must exactly match the case used in the repository's GitHub URL, and a mismatched case causes cloning to fail.

    • A. dbt Cloud requires the repository name to exactly match the case shown in the GitHub URL, so entering `myrepo` instead of `MyRepo` produces a mismatch that causes cloning or job runs to fail. Correcting the casing to match the URL resolves the failure.
    • B. Case sensitivity in the repository name field is a known dbt Cloud behavior independent of whether the app is installed; if the app were not installed, the repository would not be selectable at all rather than failing at clone time with this specific symptom. This misdiagnoses an installation issue instead of a naming mismatch.
    • C. There is no twenty-four hour metadata caching window that causes clone failures for newly created repositories; this describes a timing mechanism that does not exist in the documented behavior. The failure is deterministic and tied to the name string, not to elapsed time.
    • D. A restricted repository access list would prevent the repository from appearing as selectable during setup at all, rather than allowing setup to complete and then failing specifically at clone time due to a name string mismatch. This points to a different, unrelated failure mode.

    Subdomain 2.2: Setting up integrations with git providers

    7.When an Enterprise dbt Cloud project is connected to a GitLab repository through the native OAuth integration, what does dbt Cloud automatically configure on the GitLab side once the repository is selected?

    1. A.A webhook that triggers CI/CD jobs on push and merge-request events, plus a project access token that dbt uses to post job run statuses back to GitLab.
    2. B.A branch protection rule enforced on the repository's default branch, plus a scheduled GitLab CI pipeline configured to mirror the dbt Cloud job's build schedule.
    3. C.A group-level OAuth application registered against the GitLab group, plus a secret rotation policy that regenerates the Application ID and secret every ninety days.
    4. D.A read-only deploy key registered under the repository's SSH keys, plus a webhook configured in GitLab that fires only on tag creation events pushed to the default branch.
    Show answer & explanation

    Correct answer: A — A webhook that triggers CI/CD jobs on push and merge-request events, plus a project access token that dbt uses to post job run statuses back to GitLab.

    • A. Selecting the repository causes dbt Cloud to auto-register a webhook for push and merge-request events and to create a project access token so job statuses can be posted back into GitLab.
    • B. Branch protection rules and scheduled GitLab CI pipelines are not artifacts dbt Cloud creates during repository selection; the integration relies on its own webhook rather than GitLab CI scheduling.
    • C. The group-level OAuth application and its Application ID/Secret pair are configured once, earlier, by an admin during account setup, not automatically per repository during selection, and there is no automatic Secret rotation policy.
    • D. The native OAuth integration does not rely on an SSH deploy key at all, and its webhook fires on push and merge-request events rather than being limited to tag creation.

    Domain 3: Creating and maintaining dbt environments

    Subdomain 3.2: Determining when to use a service account

    8.During a security review, an architect finds a dbt Cloud service token that was created before July 18, 2023 and is still actively used by a legacy reporting job. What is the recommended action based on dbt's rotation guidance?

    1. A.Rotate the token now, since tokens created before that date benefit from reduced-latency handling after rotation
    2. B.Leave the token as-is indefinitely, since token age has no bearing on API performance or security
    3. C.Downgrade the token's permission set to Read-Only immediately, without issuing any replacement token at all
    4. D.Disable IP allowlisting for that token so the legacy job stops returning intermittent errors
    Show answer & explanation

    Correct answer: A — Rotate the token now, since tokens created before that date benefit from reduced-latency handling after rotation

    • A. Tokens created before that cutoff date are specifically called out as candidates for rotation to gain reduced latency on high-frequency API calls, which matches this token's age and active use.
    • B. This ignores the documented guidance that pre-cutoff tokens carry a latency-related reason to rotate, so treating age as irrelevant contradicts the specific recommendation for tokens of this vintage.
    • C. Changing the permission set addresses authorization scope, not the latency characteristic tied to when the token was created, so it does not resolve the reason this particular token was flagged.
    • D. Removing IP allowlisting would weaken a network-level security control and is unrelated to the age-based rotation guidance the review actually surfaced for this token.

    Subdomain 3.1: Understanding access control to different environments

    9.Which two statements accurately describe how dbt Cloud separates access control between the development environment and deployment environments within a single project? (Select two.)(Select 2)

    1. A.Every project has exactly one development environment, and each developer authenticates to it using their own individually configured warehouse credentials.
    2. B.A project can contain multiple deployment environments such as Staging and Production, sharing connection and credential settings configured at the environment level.
    3. C.Deployment environments inherit whichever personal credentials the project creator entered when the development environment was first configured, so no separate setup is needed.
    4. D.A project may define multiple development environments, one for each developer, so individual IDE sessions never share environment-level settings.
    Show answer & explanation

    Correct answers: A, B — Every project has exactly one development environment, and each developer authenticates to it using their own individually configured warehouse credentials.; A project can contain multiple deployment environments such as Staging and Production, sharing connection and credential settings configured at the environment level.

    • A. Correct: dbt Cloud allows exactly one development environment per project, and each developer sets their own personal credentials under their profile so that IDE sessions use individually scoped warehouse access.
    • B. Correct: unlike the single development environment, a project can have any number of deployment environments, and their connection and credential settings are configured once at the environment level rather than per person.
    • C. Incorrect: deployment environments do not inherit a developer's personal credentials from the development environment; they are configured with their own environment-level connection settings independent of any individual's setup.
    • D. Incorrect: dbt Cloud caps every project at a single development environment regardless of team size, so multiple developers share that one environment while each still uses their own personal credentials within it.

    Subdomain 3.3: Rotating key pair authentication via the API

    10.Which statement accurately distinguishes a dbt Cloud service token from a personal access token (PAT)?

    1. A.A service token's permissions are assigned directly when it is created, while a PAT inherits the permissions of the user who generated it.
    2. B.A PAT can be scoped to any permission set on any plan, while a service token is restricted to Semantic Layer access on every plan tier.
    3. C.A service token executes API requests on behalf of the individual user who created it, while a PAT represents the dbt Cloud account itself.
    4. D.A PAT can be used to create additional service tokens through the Administrative API, while a service token cannot create other tokens.
    Show answer & explanation

    Correct answer: A — A service token's permissions are assigned directly when it is created, while a PAT inherits the permissions of the user who generated it.

    • A. Service tokens belong to the account and get their own explicitly assigned permission set, while a personal access token simply carries whatever roles and license the creating user already has.
    • B. This reverses the actual constraint: on Developer and Starter plans it is the service token that is limited to Semantic Layer access, while PAT scope follows the user's own permissions rather than being universally unrestricted.
    • C. This swaps the two roles: a personal access token is the one that acts on behalf of the creating user, while a service token represents the account itself rather than any individual.
    • D. A personal access token cannot be used to create a service token through the API and returns a client error when attempted, so this capability does not exist in either direction.

    Subdomain 3.5: Creating a new dbt deployment environment

    11.In dbt Cloud, when the same environment variable key has a value defined at the project level, a different value at the environment level, and an override for one individual job, which value does dbt use when that job runs?

    1. A.The job-level override
    2. B.The environment-level value
    3. C.The project-level default
    4. D.The default value hardcoded in the `env_var()` Jinja call
    Show answer & explanation

    Correct answer: A — The job-level override

    • A. This is correct because job-level overrides sit at the top of dbt's environment variable precedence order, above environment and project defaults.
    • B. This is incorrect because environment-level values are overridden by a job-level override when one is set for that specific job.
    • C. This is incorrect because the project-level value is only used when no environment-level or job-level value overrides it.
    • D. This is incorrect because the in-code default in `env_var()` is the lowest-precedence fallback, used only when no other value is defined anywhere.

    Subdomain 3.4: Understanding environment variables

    12.A data engineer needs to pass a private repository access token into a dbt Cloud job so dbt can pull a private package, and the token must never appear in run logs, error messages, or the dbt Cloud UI. How should the engineer define this environment variable?

    1. A.Name it with the `DBT_ENV_SECRET_` prefix, for example `DBT_ENV_SECRET_GIT_TOKEN`, so dbt Cloud encrypts the value at rest and scrubs it from logs and artifacts.
    2. B.Name it with the plain `DBT_` prefix, for example `DBT_GIT_TOKEN`, since dbt Cloud encrypts every stored environment variable value regardless of its prefix.
    3. C.Name it with the `DBT_ENV_CUSTOM_ENV_` prefix, for example `DBT_ENV_CUSTOM_ENV_GIT_TOKEN`, since custom variables receive the same log-scrubbing as secret variables.
    4. D.Write the token directly as the default argument in the model's `env_var()` call, since Jinja default values are never written to run logs or artifacts.
    Show answer & explanation

    Correct answer: A — Name it with the `DBT_ENV_SECRET_` prefix, for example `DBT_ENV_SECRET_GIT_TOKEN`, so dbt Cloud encrypts the value at rest and scrubs it from logs and artifacts.

    • A. The `DBT_ENV_SECRET_` prefix is the mechanism dbt Cloud uses to recognize a variable as sensitive, triggering encryption at rest and automatic scrubbing of its resolved value from logs, the UI, and artifacts.
    • B. A plain `DBT_` prefix marks a standard variable, not a secret; its resolved value is stored and displayed like any ordinary setting and is not scrubbed from logs the way a secret-prefixed value is.
    • C. The custom-environment prefix identifies a different category of variable and does not trigger the encryption or log-scrubbing behavior that only the secret prefix provides.
    • D. A default argument written into Jinja code is stored in the project's source files and would appear in compiled output and version control, which is the opposite of keeping a credential hidden.

    Subdomain 3.6: Setting a default schema/dataset for environments

    13.A team wants Production runs to build custom-schema models into the literal schema name (for example `finance`) without the environment's default schema prefixed in front of it, while keeping the safer concatenated behavior in every other environment. What should they do?

    1. A.Override the `generate_schema_name` macro to check `target.name == 'prod'`, returning the custom schema unmodified for that target and concatenating elsewhere.
    2. B.Set the Production environment's default schema field to an empty value, which forces the macro to use only the model's custom schema in every environment.
    3. C.Add `schema: finance` directly to the connection credentials on the Production deployment environment instead of configuring it on the model itself.
    4. D.Rename the custom schema config key from `schema` to `database` so the macro treats it as a top-level object instead of a suffix value.
    Show answer & explanation

    Correct answer: A — Override the `generate_schema_name` macro to check `target.name == 'prod'`, returning the custom schema unmodified for that target and concatenating elsewhere.

    • A. This is correct: this is the recommended pattern for schema/alias customization, replacing the default macro so it special-cases the Production target and keeps concatenation everywhere else.
    • B. This is incorrect because blanking the Production environment's default schema field affects only that one environment's default value, it does not change how the macro concatenates custom schemas anywhere.
    • C. This is incorrect because setting a schema value on connection credentials changes the environment's own default, it does not alter how a model's custom schema config is combined with that default.
    • D. This is incorrect because `schema` and `database` are distinct configuration keys with different meanings to dbt, and renaming one to the other does not change the macro's concatenation logic.

    Subdomain 3.8: Configuring dbt to allow deferral to other environments

    14.A CI job is configured to defer to 'This job (self)' instead of a specific production environment. After several pull requests are opened and merged in quick succession, engineers start seeing schema-not-found errors referencing tables from an already-merged and torn-down pull request. What is the most likely cause?

    1. A.Self-deferral compares against the CI job's own most recent successful run, which can be a prior pull request's now-deleted schema rather than a stable production build.
    2. B.The Production environment was never marked with the Production checkbox, so dbt silently falls back to comparing schema state against the developer's local machine instead of a deployed build.
    3. C.The `state:modified+` selector was omitted from the run command in the CI pipeline, causing dbt to rebuild the entire DAG from scratch and recreate tables from earlier pull requests on every run.
    4. D.The git provider webhook trigger fired twice for the same commit, causing two competing CI runs to write conflicting manifests to the same schema and leave one run's tables orphaned post-merge.
    Show answer & explanation

    Correct answer: A — Self-deferral compares against the CI job's own most recent successful run, which can be a prior pull request's now-deleted schema rather than a stable production build.

    • A. This is correct. Self-deferral points the CI job at its own most recent successful run rather than a stable production job, so it can pick up ephemeral schemas from a previous, already-torn-down pull request and reference tables that no longer exist.
    • B. This is incorrect. dbt does not silently fall back to a local machine when no Production environment is marked; the described symptom of referencing a prior pull request's schema is a known self-deferral pitfall, not a missing Production flag.
    • C. This is incorrect. Omitting `state:modified+` would cause the entire DAG to rebuild rather than produce schema-not-found errors tied to a specific prior pull request's dropped schema.
    • D. This is incorrect. A duplicate webhook trigger could cause redundant runs, but it would not specifically produce errors referencing a torn-down schema from an already-merged pull request.

    Subdomain 3.7: Understanding custom branches and how to configure them to environments

    15.A dbt Cloud administrator sets the development environment's custom branch to `feature/warehouse-migration` and enables "Only run on a custom branch." A developer opens the Studio IDE and tries to commit changes directly to `feature/warehouse-migration`. What happens, and why?

    1. A.dbt blocks the direct commit and prompts the developer to create a new branch, because `feature/warehouse-migration` is now the protected branch in Studio IDE instead of the repository's default branch.
    2. B.The commit succeeds without any prompt, because the custom branch field on a development environment only changes which branch deployment jobs clone, not Studio IDE's commit-time branch protection rules.
    3. C.Studio IDE blocks the commit, then silently clears the environment's custom branch field back to blank, so the next Cloud CLI run in that environment falls back to the repository's default branch instead of `feature/warehouse-migration`.
    4. D.The commit is allowed, but dbt emails the account admin a warning, since Studio IDE's branch protection only evaluates deployment-type environments defined in Job settings, not development environments like this one.
    Show answer & explanation

    Correct answer: A — dbt blocks the direct commit and prompts the developer to create a new branch, because `feature/warehouse-migration` is now the protected branch in Studio IDE instead of the repository's default branch.

    • A. Once a custom branch is set on a development environment, that branch becomes the one protected by Studio IDE, so direct commits are blocked and the developer is prompted to branch off instead. This matches how protection follows whichever branch is designated as the environment's custom branch.
    • B. This is incorrect because custom branch settings on a development environment govern which branch Studio IDE treats as protected for editing and committing, not just which branch deployment jobs clone.
    • C. This is incorrect because setting a custom branch does not get silently cleared after a blocked commit; the configuration persists until an administrator changes it.
    • D. This is incorrect because branch protection in Studio IDE applies to development environments specifically, since that is where the IDE itself operates, not to deployment-type environments.

    Domain 4: Creating and maintaining job definitions

    Subdomain 4.1: Set up a CI job with deferral

    16.A team wants dbt Cloud to run `dbt build --select state:modified+` against a staging database whenever a pull request is opened, and separately wants a different job to apply those same changes to a shared branch once the PR is merged. How should the architect configure these two jobs?

    1. A.Configure a CI job triggered by pull requests for the staging validation step, and configure a separate merge job triggered on merge to the target branch to apply changes after the PR closes.
    2. B.Configure a single CI job with both the pull-request trigger and the on-merge trigger enabled simultaneously, since CI jobs support multiple trigger types running side by side.
    3. C.Configure a deploy job with a cron schedule that polls the branch every few minutes for merged pull requests, since scheduled jobs are the only way to react to a merge event.
    4. D.Configure a CI job with self-deferral enabled so the same job first validates the PR and then automatically re-runs itself on merge without needing a second job definition.
    Show answer & explanation

    Correct answer: A — Configure a CI job triggered by pull requests for the staging validation step, and configure a separate merge job triggered on merge to the target branch to apply changes after the PR closes.

    • A. Correct: a CI job triggered by pull requests validates changes against staging before merge, while a separate merge job triggered on merge to the target branch applies those changes afterward, matching dbt Cloud's distinct job types for each stage.
    • B. CI jobs use one primary automated trigger at a time; combining pull-request and on-merge triggers on a single job is not how dbt Cloud's mutually exclusive trigger options work.
    • C. A cron schedule reacts on a timer, not on a merge event, so polling for merged PRs is an unreliable substitute for the dedicated on-merge trigger that merge jobs already provide.
    • D. Self-deferral only changes what manifest a job compares against; it does not make a single job automatically trigger itself again after a merge event, so it cannot replace a second merge job.

    Subdomain 4.4: Implementing run commands in the correct order

    17.A CI job has SQL linting enabled along with the default `dbt build --select state:modified+` command. A pull request contains a linting violation. Which outcome is possible depending on the job's linting configuration?

    1. A.Linting runs as the first step before the build command, and depending on configuration it can either halt the job on the violation or log it and continue on to `dbt build`.
    2. B.Linting always runs after `dbt build` completes successfully, so a linting violation can only be surfaced once the modified models have already been built and tested.
    3. C.Linting violations are reported only in a separate CI summary panel and never affect whether the job's remaining configured commands execute at all.
    4. D.Linting is evaluated per-model during `dbt build` itself, so a violation in one model only skips that model's tests while leaving the rest of the command list unaffected.
    Show answer & explanation

    Correct answer: A — Linting runs as the first step before the build command, and depending on configuration it can either halt the job on the violation or log it and continue on to `dbt build`.

    • A. This is correct because linting executes as the first step ahead of the build command, and it can be configured to either stop the job on a violation or continue on to the next step.
    • B. This is incorrect because linting runs before the build command, not after, so a violation would be caught prior to any modified models being built.
    • C. This is incorrect because, depending on configuration, a linting violation can halt the run entirely, so it is not limited to a passive reporting panel with no effect on later steps.
    • D. This is incorrect because linting is a distinct run step evaluated separately from `dbt build`'s model execution, not something interleaved into build's per-model DAG traversal.

    Subdomain 4.5: Creating a new dbt job

    18.A dbt Cloud job's Execution Settings show the Generate docs on run checkbox enabled, and the run steps list contains, in order: (1) `dbt build`, (2) `dbt test --select tag:critical`, (3) `dbt docs generate`. Which single change removes the redundant documentation build without disabling docs generation for the job?

    1. A.Remove run step 3, dbt docs generate, since the enabled checkbox already appends a docs generation step after the listed commands finish.
    2. B.Remove run step 1, dbt build, since dbt docs generate requires no prior build step to produce accurate model documentation.
    3. C.Disable the Generate docs on run checkbox, since keeping both the checkbox and the manual step is required for the Catalog to refresh.
    4. D.Reorder the steps so dbt docs generate runs first, since documentation must be generated before dbt build populates the warehouse.
    Show answer & explanation

    Correct answer: A — Remove run step 3, dbt docs generate, since the enabled checkbox already appends a docs generation step after the listed commands finish.

    • A. This is correct. Because the checkbox already runs dbt docs generate after the listed commands complete, keeping an identical manual step at the end just duplicates that work.
    • B. This is incorrect because removing the build step would stop the models from being materialized, which breaks the job's actual purpose instead of fixing the docs duplication.
    • C. This is incorrect because disabling the checkbox removes the requirement stated in the question that docs generation must remain enabled for the job.
    • D. This is incorrect because documentation generation reflects the current state of built models, so running it before dbt build would document stale or missing model metadata.

    Subdomain 4.2: Understanding steps within a dbt job

    19.An admin is configuring a deploy job and needs to: increase model execution concurrency for faster runs, set a custom target name so project logic behaves differently for this job without adding environment variables, and pin this one job to an older dbt version while the environment keeps its current default. Which Advanced settings should the admin use? (Select all that apply)(Select 3)

    1. A.Threads
    2. B.Target name
    3. C.dbt version override
    4. D.Environment variables
    Show answer & explanation

    Correct answers: A, B, C — Threads; Target name; dbt version override

    • A. Increasing the threads setting raises how many models the job can build concurrently, directly addressing the request for faster execution.
    • B. Setting a custom target name lets project logic branch on the target without introducing any new environment variables, matching the stated constraint.
    • C. The dbt version override pins a single job to a specific dbt version independently of the environment's default version.
    • D. Environment variable overrides were explicitly ruled out by the scenario, and none of the three stated needs require adding or changing variables.

    Subdomain 4.8: Configuring jobs to be triggered after other dbt jobs (job chaining)

    20.An upstream job's run completes and meets the "Completes on" condition for two downstream chained jobs, but the account's available run slots are all currently occupied by other jobs. Which statements correctly describe what happens next? (Select all that apply)(Select 2)

    1. A.Both downstream jobs are enqueued in the job scheduler queue and wait until execution slots become available.
    2. B.The downstream jobs run in the order they were configured as chain triggers, strictly by their creation timestamp.
    3. C.Neither downstream job is skipped or cancelled because slots were unavailable at the moment the trigger fired.
    4. D.dbt Cloud cancels the lower-priority downstream job and retains only the one with fewer configured run steps.
    Show answer & explanation

    Correct answers: A, C — Both downstream jobs are enqueued in the job scheduler queue and wait until execution slots become available.; Neither downstream job is skipped or cancelled because slots were unavailable at the moment the trigger fired.

    • A. Meeting the trigger condition enqueues each downstream job in the scheduler queue, where it waits for an available run slot rather than requiring slots to be free at the moment the upstream job finishes.
    • B. The scheduler queue does not guarantee execution order based on when a chain trigger was originally configured; queued runs are picked up as slots free up, not by a fixed chain-configuration timestamp ordering.
    • C. Being enqueued means the run is waiting, not discarded, so a temporary lack of available slots does not cause either downstream job to be skipped or cancelled.
    • D. dbt Cloud does not cancel queued chained jobs based on the number of run steps they contain; both enqueued runs remain queued until resources are available to execute them.

    Subdomain 4.7: Generating documentation on a job that populates the dbt Catalog page

    21.A dedicated documentation job's run steps are configured as shown below. After the job runs successfully, the Catalog page shows model and source nodes but no column-level statistics for any model. Run steps: 1. `dbt seed` 2. `dbt docs generate` Which change to these run steps would most directly restore the column-level statistics?

    1. A.Add a `dbt run` or `dbt build` step before `dbt docs generate` so the models actually execute against the warehouse.
    2. B.Move `dbt seed` after `dbt docs generate` so seed data loads only once documentation has already been generated.
    3. C.Increase the job's timeout setting so `dbt docs generate` has more time to query the warehouse for statistics.
    4. D.Enable the "Generate docs on run" checkbox in addition to the existing `dbt docs generate` command in the run steps.
    Show answer & explanation

    Correct answer: A — Add a `dbt run` or `dbt build` step before `dbt docs generate` so the models actually execute against the warehouse.

    • A. Column-level statistics come from querying the warehouse tables that models actually build; without a run or build step, no model tables exist for `dbt docs generate` to describe in detail.
    • B. Reordering `dbt seed` relative to `dbt docs generate` changes when seed tables load but does nothing to create the model tables that column-level statistics depend on.
    • C. A longer timeout gives the step more time to run, but it cannot produce statistics for tables that were never built in the first place, so the missing data would persist.
    • D. Adding the checkbox on top of an existing `dbt docs generate` command just duplicates documentation generation; it still doesn't cause any models to be built against the warehouse.

    Subdomain 4.9: Configuring Advanced CI

    22.A pull request reviewer who does not have a dbt Cloud login needs to see whether Advanced CI detected any row-level differences between production and the branch under review, without asking a teammate to log in and check the job run. Where can this reviewer find that summary?

    1. A.In the automatic comment that dbt Cloud posts directly on the pull request in the git provider, summarizing the comparison results alongside the rest of the PR discussion.
    2. B.In the dbt Cloud CLI output on their local machine, since running `dbt compare` locally reproduces the exact same warehouse-side comparison dbt Cloud performed for the PR.
    3. C.In the git provider's commit status checks section, which lists Advanced CI as a required check but does not display any comparison detail beyond pass or fail.
    4. D.In the dbt Cloud account's audit log, which records every Advanced CI comparison as a discrete event that any account member can export as a CSV report.
    Show answer & explanation

    Correct answer: A — In the automatic comment that dbt Cloud posts directly on the pull request in the git provider, summarizing the comparison results alongside the rest of the PR discussion.

    • A. dbt Cloud automatically posts a summary of the comparison results as a comment on the pull request itself, so anyone with access to the git provider's PR view can read it without ever logging into dbt Cloud.
    • B. A local `dbt compare` run uses the reviewer's own working copy and local target, which is a different, single-model, on-demand comparison mode than the deployment-side Advanced CI run tied to the actual PR branch and production state.
    • C. Status checks can show that a CI job passed or failed, but they are not the mechanism dbt Cloud uses to publish comparison detail; the row-level summary is posted as a PR comment, not embedded in the status check itself.
    • D. dbt Cloud's audit log tracks account activity such as user and permission changes, not per-run data comparison detail, and it would still require dbt Cloud account access to view, which the reviewer lacks.

    Subdomain 4.11: Understanding when to use which type of job deferral

    23.A team is creating the very first deploy job in a brand-new dbt Cloud project. No job in the project has ever completed a successful run, so there is no manifest anywhere to compare against. What deferral setting should this first job use?

    1. A.No deferral, since there is no prior successful run anywhere in the project yet for any environment or job to supply comparison artifacts.
    2. B.This job (self), since a job's first run always seeds its own comparison state before any later run can reference it during the same execution.
    3. C.The production environment, since dbt treats an environment marked Production as a valid deferral target even before it has completed any run.
    4. D.A specific CI job, since CI jobs are built to generate the initial manifest that other deploy jobs then consume for deferral comparisons.
    Show answer & explanation

    Correct answer: A — No deferral, since there is no prior successful run anywhere in the project yet for any environment or job to supply comparison artifacts.

    • A. Deferral needs a manifest from a prior successful run, and none exists yet anywhere in a brand-new project, so this first job must build everything without deferring to any target until a successful run produces one.
    • B. Self-deferral compares against the job's own previous successful run, but on a job's very first execution no previous run exists yet, so there is nothing for self-deferral to reference during that first run.
    • C. Marking an environment Production only labels it as the fallback deferral source; it does not retroactively create the successful run and manifest that deferral actually requires to compare against.
    • D. CI jobs are excluded from counting as the successful run that seeds deferral artifacts, and CI jobs themselves need a deferred environment configured, so they cannot bootstrap the very first manifest either.

    Subdomain 4.3: Scheduling a job to run on schedule

    24.A deploy job is scheduled via Intervals to run every 15 minutes, but as the underlying project has grown, each run now consistently takes about 25 minutes to complete. The team notices that not every 15-minute slot actually produces a queued run. What is happening, and what should the team do about it?

    1. A.The scheduler cancels unnecessary queued runs because the job's duration now exceeds its schedule frequency, keeping only one run queued at a time; the team should lengthen the interval or split the job so it fits within the schedule.
    2. B.The scheduler is malfunctioning and silently dropping queued runs at random due to an internal fault in its execution engine, so the team should open a support ticket with Intervals to have the missing 15-minute executions manually restored.
    3. C.Deploy jobs always execute concurrently up to the account's fixed run slot limit, and once every slot is occupied by an in-progress run additional scheduled triggers are silently discarded, so the team should upgrade the plan to increase the available concurrent run slots.
    4. D.A CI job elsewhere in the project is interfering with this deploy job's queue by consuming the same shared execution slots faster than they free up, so the team should disable the conflicting CI triggers to restore the missing 15-minute deploy runs.
    Show answer & explanation

    Correct answer: A — The scheduler cancels unnecessary queued runs because the job's duration now exceeds its schedule frequency, keeping only one run queued at a time; the team should lengthen the interval or split the job so it fits within the schedule.

    • A. When a job's actual run duration exceeds its scheduled frequency, the scheduler prevents an unbounded backlog by canceling extra queued runs and keeping only one run queued at a time. The correct fix is to widen the interval or reduce the job's run time so it fits comfortably within the schedule.
    • B. This behavior is an intentional over-scheduling safeguard, not a malfunction, so there are no missing runs to restore. Filing a support ticket would not change the documented behavior of canceling redundant queued runs.
    • C. Deployment jobs execute serially rather than concurrently, so this describes CI job behavior, not deploy jobs. The missing runs here are explained by queue cancellation due to overrun, not by run slot exhaustion.
    • D. CI jobs run on separate triggers and do not consume the same queue as a scheduled deploy job, so disabling CI triggers would not address a deploy job outrunning its own schedule. The root cause is the deploy job's run time exceeding its interval.

    Domain 5: Configuring dbt security and licenses

    Subdomain 5.1: Creating service tokens for API access

    25.A screenshot of the Account settings > Service Tokens screen shows a modal that just generated a new token: a name field reading "ci-nightly-runner", a permission row reading "Job Admin — Project: analytics_prod", and a one-time string starting "dbtc_" followed by masked characters, above a banner warning the value will not be shown again. Which element must the admin capture before closing this modal, and why?

    1. A.The permission row text, because dbt Cloud emails the token value automatically once an admin records which permission set was selected.
    2. B.The token name field, because it is the only value dbt Cloud requires to authenticate later API requests against this service account.
    3. C.The Project scope label, because the admin can regenerate an identical token value later by re-entering the same project and permission combination.
    4. D.The masked one-time token string, because dbt Cloud never displays or re-issues that exact value again once the modal is dismissed.
    Show answer & explanation

    Correct answer: D — The masked one-time token string, because dbt Cloud never displays or re-issues that exact value again once the modal is dismissed.

    • A. dbt Cloud does not email token values, and the permission row is metadata describing the scope, not a credential needed for authentication.
    • B. The token name is only a human-readable label for identifying the token in the account settings list; it cannot be used by itself to authenticate API requests.
    • C. Re-entering the same project and permission combination creates a brand-new, different secret value; it does not reproduce the original token string.
    • D. This is correct: the secret token value is shown only once at creation time, so the admin must copy and store it immediately before the modal closes.

    Subdomain 5.2: Assigning permission sets

    26.An admin is viewing a contractor's user record in Account Settings → Users. The contractor's engagement ended today and access must be revoked immediately, with the understanding that dbt Cloud treats user removal as permanent and re-adding the contractor later creates a new user record rather than restoring the old one. Which action correctly achieves an immediate, complete revocation?

    1. A.Click the license type dropdown on the contractor's record and reassign the license from Developer to Read-Only, which immediately removes all write access without deleting the underlying user record.
    2. B.Click the delete or remove action on the contractor's user record in Account Settings → Users to permanently remove them, knowing that restoring access later means inviting them again as a new record.
    3. C.Remove the contractor from every custom group individually while leaving the default Everyone group intact, which fully revokes account access without affecting license consumption.
    4. D.Disable the contractor's SSO mapping in the identity provider only, leaving the dbt Cloud user record untouched until the next scheduled license reconciliation job runs.
    Show answer & explanation

    Correct answer: B — Click the delete or remove action on the contractor's user record in Account Settings → Users to permanently remove them, knowing that restoring access later means inviting them again as a new record.

    • A. This is incorrect because downgrading the license reduces capability but leaves the user record active and still consuming a seat; it does not constitute the complete revocation the scenario requires.
    • B. This is correct because removing the user record from Account Settings → Users is the action that permanently revokes access, matching dbt Cloud's documented behavior that removal cannot be undone as the same record.
    • C. This is incorrect because the default Everyone group still grants baseline account access, so removing only custom groups would not fully revoke the contractor's ability to reach the account.
    • D. This is incorrect because disabling only the IdP-side mapping leaves the dbt Cloud user record and any non-SSO access path active until something inside dbt Cloud itself removes the user.

    Subdomain 5.3: Creating license mappings

    27.An administrator assigns the Read Only license to a contractor, then adds that contractor to the Account Admin group so they can be looped in on discussions inside dbt Cloud. The contractor later tries to edit a warehouse connection under Account Settings. What happens?

    1. A.The edit is blocked, because the Read Only license applies fixed, non-inheriting permissions across the account regardless of which permission-set groups the user belongs to.
    2. B.The edit succeeds, because membership in the Account Admin group grants connection-editing rights that take precedence over the license type assigned to the user.
    3. C.The edit succeeds only for warehouse connections, because Read Only licenses restrict access to job and run data but not to account-level configuration screens.
    4. D.The edit is blocked only until the next SSO login cycle, when the Account Admin group's permission set is synced and overrides the Read Only restriction.
    Show answer & explanation

    Correct answer: A — The edit is blocked, because the Read Only license applies fixed, non-inheriting permissions across the account regardless of which permission-set groups the user belongs to.

    • A. Read Only is one of the license types with fixed permissions that do not inherit from any permission set, so group membership such as Account Admin cannot grant additional editing rights, and the connection edit remains blocked.
    • B. License type always overrides permission-set membership in dbt Cloud's access model, so belonging to an admin group cannot unlock actions that the assigned license itself does not allow.
    • C. The read-only restriction is not scoped narrowly to jobs and runs; it applies to all resources in the account, including account-level configuration screens like connections.
    • D. There is no sync mechanism that upgrades a user's effective access after login; the license type set on the user record governs their permissions at all times, not a delayed group sync.

    Subdomain 5.4: Adding and removing users

    28.A Starter-plan admin invites one Developer-licensed user and one IT-licensed user, then goes to reconcile the developer seat count shown on the Users page against the developer seats configured on the Billing page. What should they expect to find?

    1. A.The IT-licensed user is excluded from the seat total, so only the Developer user needs to match the Billing count
    2. B.Both the Developer and IT users count equally toward the developer seat total shown on the Billing page
    3. C.The IT-licensed user counts twice toward billing, since IT licenses bundle Security Admin and Billing Admin rights
    4. D.Read-Only licensed users, not IT licensed users, are the type excluded from developer seat billing
    Show answer & explanation

    Correct answer: A — The IT-licensed user is excluded from the seat total, so only the Developer user needs to match the Billing count

    • A. IT licenses are explicitly excluded from developer seat usage, so adding an IT-licensed user does not change the developer seat total that needs to match between Users and Billing. Only the Developer-licensed user needs to be reflected in both counts.
    • B. IT licenses do not count toward developer seat usage, so treating both users as equal contributors to the seat total would overstate what Billing actually needs to charge for. The two license types are billed differently by design.
    • C. There is no double-billing rule tied to the Security Admin and Billing Admin permissions bundled into an IT license. IT licenses simply sit outside the developer seat count rather than counting extra.
    • D. Read-Only licenses are a separate, non-seat-billed license type, but the exclusion described in this scenario applies specifically to the IT license, not Read-Only. Swapping which license type is excluded misstates the billing rule being tested here.

    Subdomain 5.6: Creating and assigning RBAC

    29.Deshawn is a member of two dbt Cloud groups that are both scoped to the same 'Core Analytics' project: the 'Reporting' group carries the Job Viewer permission set, and the 'Pipeline Owners' group carries the Job Admin permission set. Deshawn holds a Developer license. When he opens the Core Analytics project, what access does he have to jobs?

    1. A.Job Admin access, because when a user belongs to multiple groups scoped to one project, the permission set with the higher access level takes precedence.
    2. B.Job Viewer access, because dbt Cloud always applies whichever permission set was assigned to the group the user joined first, ignoring later additions.
    3. C.No job access at all, because holding two different permission sets on the same project creates a conflict that blocks job-related actions entirely.
    4. D.Job Viewer access, because dbt Cloud averages the two permission sets and defaults to the more restrictive one whenever a conflict is detected.
    Show answer & explanation

    Correct answer: A — Job Admin access, because when a user belongs to multiple groups scoped to one project, the permission set with the higher access level takes precedence.

    • A. This is correct because a Developer license inherits group permission sets, and when multiple groups grant different levels of access to the same project, the more permissive permission set applies.
    • B. Join order has no effect on which permission set applies. dbt Cloud resolves overlapping group access by access level, not by chronology of group membership.
    • C. Overlapping group memberships do not create a blocking conflict. dbt Cloud is designed to resolve multiple permission sets on the same project rather than lock the user out.
    • D. There is no averaging mechanism, and the resolution does not default to the more restrictive set; the higher-access permission set is the one that applies.

    Subdomain 5.5: Adding SSO application for dbt Enterprise

    30.During Okta SSO setup for dbt Cloud, an admin notices that a user who belongs to 130 Okta groups only has a partial list of groups reflected in dbt after login. What is the cause, and what should the admin change in the Okta app's group attribute statement to fix it?

    1. A.Okta's SAML group attribute statement returns at most 100 groups per user, so the filter needs to be narrowed, for example matching only group names with a `DBT_CLOUD_` prefix, so the relevant groups fit within that cap.
    2. B.dbt Cloud itself truncates any SAML groups attribute to 100 entries regardless of which identity provider sends it, so the fix must happen in dbt's attribute mapping settings, for example renaming the `groups` claim, rather than in Okta's app configuration.
    3. C.SCIM provisioning needs to be enabled alongside SAML so that group membership syncs from Okta's directory API, for example turning on the `Push Groups` feature under the app's Provisioning tab, instead of relying on the SAML assertion's `groups` attribute.
    4. D.The NameID format must be switched from `Unspecified` to `EmailAddress` as a persistent identifier in the app's SAML settings, because Okta only returns the full group list when NameID uniquely maps to one stable user record instead of matching multiple accounts.
    Show answer & explanation

    Correct answer: A — Okta's SAML group attribute statement returns at most 100 groups per user, so the filter needs to be narrowed, for example matching only group names with a `DBT_CLOUD_` prefix, so the relevant groups fit within that cap.

    • A. Okta caps the groups returned in a SAML group attribute statement at 100 per user, so a broad `.*` filter silently drops groups past that limit; narrowing the filter to a relevant prefix keeps the needed groups within the cap.
    • B. This is incorrect because the 100-group cap is specific to how Okta evaluates SAML group attribute statements, not a limit dbt imposes on incoming SAML assertions from any provider.
    • C. This is incorrect because enabling SCIM is a separate, optional provisioning path; it does not change how Okta's SAML group attribute statement evaluates or caps groups for existing SAML-based logins.
    • D. This is incorrect because NameID format controls how the user's unique identifier is represented, not how many groups Okta includes in the groups attribute statement.

    Domain 6: Setting up monitoring and alerting for jobs

    Subdomain 6.1: Setting up email notifications

    31.A team wants a Slack message and an automatic ticket created in their external issue tracker whenever a production job fails, with the ticket populated from structured run details like the job ID and run status. Which combination of dbt Cloud features accomplishes this?

    1. A.Configure Slack notifications on the Fails trigger for visibility, and separately configure a webhook on the job-run-failed event so the tracker's API can build a ticket from the JSON payload.
    2. B.Configure email notifications on the Fails trigger only, since the notification email body already contains machine-readable JSON that the tracker can parse directly from the message.
    3. C.Configure Slack notifications on the Fails trigger only, since Slack's own API automatically relays any alert message it receives into whatever issue tracker is linked to the workspace.
    4. D.Configure a webhook alone on the Fails trigger, since webhooks post directly into Slack channels and also generate a ticket-ready JSON payload within that same single outbound request each time.
    Show answer & explanation

    Correct answer: A — Configure Slack notifications on the Fails trigger for visibility, and separately configure a webhook on the job-run-failed event so the tracker's API can build a ticket from the JSON payload.

    • A. Slack notifications and webhooks are separate, composable features - email or Slack alerts are for human visibility, while a webhook's JSON payload on the same trigger event is what an external system's API consumes to create a ticket automatically.
    • B. Notification emails are formatted for people to read, not structured JSON for a tracker's API to parse, so this does not give the issue tracker the structured data it needs.
    • C. Slack does not automatically forward received messages into arbitrary linked issue trackers; that kind of automated ticket creation requires its own integration, not a side effect of Slack notifications.
    • D. Webhooks post JSON to a configured HTTPS endpoint, not directly into a Slack channel, so this conflates two separate delivery mechanisms that are each configured on their own.

    Subdomain 6.2: Using Webhooks for event-driven integrations with other systems

    32.A team configures a webhook pointing at their Azure Logic Apps HTTP trigger, but the Logic App never receives a request even though the Recent Deliveries log in dbt Cloud shows repeated failed attempts. What is the most likely cause?

    1. A.Azure Logic Apps does not accept the custom Authorization header dbt Cloud attaches to every request, so it rejects the delivery before reaching the workflow trigger.
    2. B.The webhook was scoped to a specific job instead of the whole account, so runs from other jobs never generate an event that could reach the Logic App endpoint.
    3. C.The team subscribed to `job.run.started` instead of `job.run.completed`, so the Logic App only receives events before any run data actually exists to process.
    4. D.The webhook secret token expired after thirty days without being rotated, causing dbt Cloud to stop signing outbound requests and silently drop each delivery attempt.
    Show answer & explanation

    Correct answer: A — Azure Logic Apps does not accept the custom Authorization header dbt Cloud attaches to every request, so it rejects the delivery before reaching the workflow trigger.

    • A. dbt Cloud always attaches a custom Authorization header carrying the HMAC signature to every webhook request, and Azure Logic Apps and Power Automate are documented as being unable to accept custom headers on their HTTP triggers, which causes deliveries to be rejected outright.
    • B. Scoping a webhook to specific job IDs simply narrows which jobs generate events; it would prevent delivery for other jobs' runs, but it would not explain zero successful deliveries for the scoped job's own runs, and the log shows failed attempts, meaning requests are being sent.
    • C. Choosing `job.run.started` over `job.run.completed` changes when the event fires and what data it carries, but it would still produce a deliverable request; it does not explain why every delivery attempt fails at the endpoint.
    • D. Webhook secret tokens in dbt Cloud do not automatically expire after a fixed period, so a thirty-day expiration is not a real failure mode for signed deliveries.

    Domain 7: Setting up a dbt mesh and leveraging cross-project references

    Subdomain 7.3: Utilizing model governance

    33.Team B adds Team A's project `core_finance` to `dependencies.yml` and calls `{{ ref('core_finance', 'monthly_revenue') }}`. The build fails to resolve the reference. Team A confirms `monthly_revenue` already has `access: public` set. What is the most likely remaining cause of the failure?

    1. A.The core_finance project has never completed a successful job run in its designated deployment environment, so no manifest metadata has been published for Team B to resolve against.
    2. B.The monthly_revenue model is missing a contract block, and dbt Mesh rejects any cross-project ref to a public model that does not also declare contract enforcement.
    3. C.Team B's dependencies.yml entry does not need to match anything meaningful, so the failure is really an account-level license restriction blocking Mesh for Team B's plan tier.
    4. D.The ref call is missing a version argument, since every two-argument cross-project ref must pin an explicit model version even when the upstream model has only one version.
    Show answer & explanation

    Correct answer: A — The core_finance project has never completed a successful job run in its designated deployment environment, so no manifest metadata has been published for Team B to resolve against.

    • A. Cross-project resolution depends on manifest metadata published by a successful job run in the producer project's designated deployment environment. Without that run, the metadata service has nothing to resolve the reference against, even though the model is correctly marked public.
    • B. An enforced contract is a recommended companion to public access, not a hard requirement for cross-project resolution. A public model without a contract can still be referenced across projects.
    • C. The project name in dependencies.yml must exactly match the name declared in the upstream project's dbt_project.yml, so a mismatch there is a real failure mode, and license tier is not the described symptom here.
    • D. A version argument is only required when referencing a specific pinned version of a versioned model. Unversioned public models resolve correctly with the standard two-argument ref.

    Subdomain 7.2: Understanding how environment types relate to cross-project references

    34.Your dbt Mesh producer project already has downstream consumers resolving cross-project references against its Production environment. You create a brand-new deployment environment intended to eventually become the project's Staging environment, and you set its deployment type to Staging immediately, before configuring or running any job in it. Evaluate this action: is it safe to do at this point?

    1. A.No — marking Staging routes eligible consumer references there immediately, and with no successful job run yet, those references fail until a job succeeds there.
    2. B.Yes — marking the deployment type only takes effect after the first successful job run, so consumers keep resolving against Production until the new environment has published metadata.
    3. C.No — Staging environments are read-only until an administrator manually approves them in Account Settings, so marking the type early has no effect on existing consumers.
    4. D.Yes — Mesh always prioritizes Production over Staging regardless of configuration order, so the unfinished Staging environment is simply ignored until it is ready.
    Show answer & explanation

    Correct answer: A — No — marking Staging routes eligible consumer references there immediately, and with no successful job run yet, those references fail until a job succeeds there.

    • A. This is correct. As soon as an environment is designated Staging, eligible consumer jobs begin resolving against it with no automatic fail-over to Production, so an unpublished Staging environment breaks those references until a job succeeds there.
    • B. This is incorrect. The deployment type takes effect as soon as it is set, not after a first successful run; there is no grace period that keeps consumers pointed at Production while Staging is unpublished.
    • C. This is incorrect. There is no manual approval workflow gating a newly designated Staging environment; the deployment type setting applies directly without an administrator sign-off step.
    • D. This is incorrect. Mesh does not always prefer Production once a Staging environment exists; Staging-eligible consumers are routed to Staging immediately, which is exactly the behavior that causes the outage risk.

    Domain 8: Configuring and using dbt Catalog

    Subdomain 8.2: Using dbt Catalog to find public models and cross-project references

    35.A platform engineer notices that a downstream project's nightly job has started taking much longer to finish and suspects a public model consumed from an upstream project. Using dbt Catalog, what is the most direct way to confirm whether that upstream public model is the bottleneck?

    1. A.Open the upstream public model's detail page in Catalog and review its run history and timing information to see whether its execution time has increased recently.
    2. B.Delete and recreate the project dependency in `dependencies.yml` so Catalog is forced to regenerate fresh metadata for every model in the mesh.
    3. C.Downgrade the downstream project's dbt Cloud plan to Starter, which disables column-level lineage and reduces the metadata Catalog has to process each run.
    4. D.Search the account-level lineage graph for arrows pointing away from the upstream project, since arrow thickness in that view represents each model's runtime.
    Show answer & explanation

    Correct answer: A — Open the upstream public model's detail page in Catalog and review its run history and timing information to see whether its execution time has increased recently.

    • A. Correct. Catalog's model detail views include run history and timing, so opening the upstream public model directly shows whether its execution time has grown, which is the direct way to confirm a bottleneck.
    • B. Incorrect. Recreating the project dependency changes how the mesh relationship is declared, not how fast the upstream model executes; it does not surface any timing information to diagnose slowness.
    • C. Incorrect. Downgrading the plan removes Catalog features like column-level lineage entirely; it does not target or diagnose a specific model's runtime and would only reduce visibility, not improve it.
    • D. Incorrect. Account lineage arrows represent dependency relationships between projects, not runtime or arrow thickness encoding; there is no timing signal to read from that graph's visual style.

    Want the full experience?

    These are just samples. Practice the full DBT Architect question bank in quiz mode — free, no signup, with domain practice and exam simulation.