dbt

dbt Certification Study Guide: Official Materials and Hands-On for the Fastest Pass

2026-04-19
NicheeLab Editorial Team

The dbt Analytics Engineer certification covers modeling design, testing strategy, Jinja/macros, dependency control, and dbt Cloud/CI operations end-to-end. You need a study plan that targets not just passing but also reproducibility in real work.

This guide builds on the official documentation and dbt Learn, then layers on a minimal hands-on setup you can reproduce on Snowflake, BigQuery, or Databricks. The prerequisites are SQL and basic data modeling.

Map Out the Exam Scope and Domains

Start by checking the official syllabus. The dbt Labs certification page lists the exam domains and recommended study resources. Question counts and weights may change, so always refer to the latest exam scope.

Topics that are reliably tested include model materializations, source management, tests (singular and schema), snapshots, Jinja/macros, selectors and dependencies, documentation (docs generate/exposures), and dbt Cloud jobs, environments, and authentication.

  • Official reference starting point: https://docs.getdbt.com/
  • Certification info and syllabus: https://www.getdbt.com/certifications/analytics-engineer-certification-exam
  • Refer to vendor-specific docs as needed: Snowflake/BigQuery/Databricks connection setup and permission design

Combining Official Materials: Documentation and dbt Learn

Learning has two axes: reference (specification) and tutorials (procedure). Specs give you precision; tutorials give you a feel for implementation. The shortcut is to bounce between the two, always returning to the definitions of terms and commands.

In the documentation, prioritize version-stable concepts: materializations, tests, snapshots, selection syntax, and adapter-specific constraints. On dbt Learn, finish Fundamentals end-to-end, then move on to advanced sections (macros and packages) if you have time.

  • Specs: Models/Materializations, Testing, Snapshots, Docs, Selection Syntax
  • Procedural: dbt Learn Fundamentals (project creation → build → documentation)
  • Watch for updates: verify commands and options against the v1.x stable line

Hands-On Plan: Cover All Domains with a Minimal Setup

Build one base practice project and design it so the same logical structure can be reproduced on any DWH (Snowflake/BigQuery/Databricks). Scope it across three layers — staging → intermediate → marts — and always include sources, tests, snapshots, docs, and selectors.

Start CI and job operations locally, then migrate to dbt Cloud to reproduce the pipeline if you can. On the first pass, mixing sample CSVs (seed) with small real datasets lets you experience dependencies and incremental builds at the same time.

  • Local: with dbt Core (via venv/poetry, etc.), run the basic cycle of begin → run → test → build
  • DWH connection: isolate a dev schema on Snowflake/BigQuery/Databricks with minimal privileges
  • Must-have artifacts: manifest.json and run_results.json (use them for state comparison and troubleshooting)
AspectOfficial Docs/Referencedbt Learn (Fundamentals)Hands-On Lab
PurposePrecise understanding of specs and consistent terminologyGrasp the procedural flow in a short timeFeel error handling, dependencies, and runtime in practice
ApproachRead in order: feature → constraints → examples → caveatsAlways run the end-of-chapter exercisesBuild small, create diffs, iterate the build
Exam CoverageBoosts accuracy on definitions, flags, and selectorsStrong on procedural questions and best practicesStrong on case-based questions and operational judgment
ProsKnowledge stays robust across versionsEasy to complete in a short timeFastest path to real-world work
CaveatsCan feel abstract at timesDoesn't surface environment differences wellEnvironment setup takes time

Minimal dbt project dependency layout

sources(raw)external tablesstaging(stg_*)rename/cast/cleanintermediatejoins/aggmarts(dim_*, fct_*)Final form of BI/analytics metricsexposures/BIdocs/catalogsources → staging → intermediate → marts → exposures/BI

Models, Tests, Sources, and Snapshots: The Essentials

For models, first nail down the materialization choice (view/table/incremental/ephemeral) and your schema strategy (dev schema isolation, target naming). For incremental models, it's safest to explicitly declare the unique key, the diff condition, and the behavior on schema changes.

For tests, center on schema.yml and put not_null/unique/relationships in place first. Reserve singular tests for complex business logic — laying the foundation with standard tests is the fastest path to passing.

  • sources: configure freshness and loaded_at_field to surface source health
  • snapshots: pick the updated_at or timestamp strategy and verify primary key stability
  • docs: write descriptions and column-level docs early, then verify alignment in the catalog

Minimal example of an incremental model with tests/snapshots

-- models/marts/fct_orders.sql
{{ config(
    materialized='incremental',
    unique_key='order_id',
    incremental_strategy='merge',
    on_schema_change='append_new_columns'
) }}

with src as (
  select * from {{ ref('int_orders_enriched') }}
  {% if is_incremental() %}
    where updated_at > (select coalesce(max(updated_at), '1970-01-01') from {{ this }})
  {% endif %}
)
select
  order_id,
  customer_id,
  total_amount,
  updated_at
from src;

# models/marts/schema.yml
version: 2
models:
  - name: fct_orders
    description: Order fact table. Incremental evaluation via updated_at.
    columns:
      - name: order_id
        tests: [not_null, unique]
      - name: customer_id
        tests:
          - relationships:
              to: ref('dim_customers')
              field: customer_id

# snapshots/customers.sql
{% snapshot customers_snapshot %}
{{ config(
  target_schema=target.schema,
  unique_key='customer_id',
  strategy='timestamp',
  updated_at='updated_at'
) }}
select * from {{ source('src', 'customers') }}
{% endsnapshot %}

Selectors and Build Strategy: Fast and Safe Iteration

For production-style incremental runs, combine selectors (state:modified, resource_type:..., tags, + dependencies) to build at the smallest unit. State comparison requires passing the latest manifest.json via --state.

dbt build handles a unified run/test/docs/seed/snapshot execution. The key to passing is being able to judge by context when to use build, and at what unit to split out run or test.

  • Diff: dbt build --select state:modified+ --state path/to/artifacts
  • Impact scope: dbt build --select +tag:critical
  • Targeted: dbt test --select fct_orders dim_customers

Wrap-Up: Building Your Own Mock Exam and Reducing Test-Day Risk

Your own mock exam is enough. Mix fill-in-the-blank questions on specs (commands/flags/selectors), true/false on best practices, and case-based procedural choices (in which order do you run run/test/docs), then verify every wrong answer by going back to the docs.

On exam day, it's safer not to over-rely on environment-specific knowledge. Adapter differences exist (e.g., some incremental options), but the exam centers on judgments based on concepts and dbt's standard APIs.

  • Flashcards: materialization-to-config mappings, selectors, and when to apply each test type
  • Runbook: the rerun order on failure, and how to refresh the state directory
  • Review angle: can you explain terms in your own words (model, resource, node, relationship)?

Check with a Sample Question

Analytics Engineer

問題 1

You want to minimize an incremental build. The previous run's manifest.json is in artifacts/, and you want to safely rerun only the modified nodes and their downstream. Which command is appropriate?

  1. A. dbt build --select state:modified+ --state artifacts/
  2. B. dbt run --select +state:modified --state artifacts/
  3. C. dbt build --select tag:modified+
  4. D. dbt test --select state:modified --state target/

正解: A

For state comparison, pass the previous artifacts via --state, and use state:modified+ to include modified nodes plus downstream. --state works with build/run/test, but build is the right choice for a unified run that includes dependencies.

Frequently Asked Questions

Can I pass the exam without using dbt Cloud?

Yes. With local dbt Core and dev access to a DWH, you can cover most of the exam scope. Cloud-specific UI operations are not heavily tested, so understanding the concepts (environments, jobs, authentication, artifacts) is enough.

Should I learn with Snowflake, BigQuery, or Databricks?

Pick whichever is easiest to access at work or personally. The learning material centers on adapter-independent concepts. There are differences in incremental strategies and permissions, but start with generic settings (merge, unique_key, on_schema_change) and check the official docs for adapter-specific details.

How deep should I go on macros and packages?

The exam expects you to know basic Jinja syntax, ref/source, config, variables, defining and calling simple macros, and managing packages.yml with version control. Advanced metaprogramming is lower priority, so focus first on getting the basic APIs right.

Check what you learned with practice questions

Practice with certification-focused question sets

無料で問題を解いてみる
Author

NicheeLab Editorial Team

NicheeLab editorial team focused on data engineering and cloud certification learning. Content is structured around practical study needs and official exam domains.


Related articles
dbt

dbt Models: SQL-Defined Transformation Units (2026)

Model fundamentals — SELECT-based definitions, naming, refs,...

dbt

dbt Analytics Engineering Exam: Complete Guide (2026)

Pass the AE Certification — scope, weighting, sample questio...

dbt

dbt Cloud vs dbt Core: Feature & Cost Comparison (2026)

Honest comparison of dbt Cloud vs. dbt Core — IDE, scheduler...

dbt

dbt Project Structure: models/seeds/macros Layout (2026)

Recommended dbt project layout — models, seeds, macros, snap...

dbt

dbt_project.yml Explained: Every Config (2026)

Every dbt_project.yml setting that matters — paths, vars, ma...

Browse all dbt articles (101)
© 2026 NicheeLab All rights reserved.