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.
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.
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.
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.
| Aspect | Official Docs/Reference | dbt Learn (Fundamentals) | Hands-On Lab |
|---|---|---|---|
| Purpose | Precise understanding of specs and consistent terminology | Grasp the procedural flow in a short time | Feel error handling, dependencies, and runtime in practice |
| Approach | Read in order: feature → constraints → examples → caveats | Always run the end-of-chapter exercises | Build small, create diffs, iterate the build |
| Exam Coverage | Boosts accuracy on definitions, flags, and selectors | Strong on procedural questions and best practices | Strong on case-based questions and operational judgment |
| Pros | Knowledge stays robust across versions | Easy to complete in a short time | Fastest path to real-world work |
| Caveats | Can feel abstract at times | Doesn't surface environment differences well | Environment setup takes time |
Minimal dbt project dependency layout
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.
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 %}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.
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.
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?
正解: 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.
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.
Practice with certification-focused question sets
無料で問題を解いてみる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.
dbt Models: SQL-Defined Transformation Units (2026)
Model fundamentals — SELECT-based definitions, naming, refs,...
dbt Analytics Engineering Exam: Complete Guide (2026)
Pass the AE Certification — scope, weighting, sample questio...
dbt Cloud vs dbt Core: Feature & Cost Comparison (2026)
Honest comparison of dbt Cloud vs. dbt Core — IDE, scheduler...
dbt Project Structure: models/seeds/macros Layout (2026)
Recommended dbt project layout — models, seeds, macros, snap...
dbt_project.yml Explained: Every Config (2026)
Every dbt_project.yml setting that matters — paths, vars, ma...