dbt Analytics Engineer 認定は、SQL とデータモデリングを軸に、テスト・ドキュメント・デプロイを含む一連の変換運用を理解しているかを測ります。
本稿は、公式ドキュメントで安定的に説明されている概念をベースに、合格に必要なスキル範囲と学習時間の目安を、実務と両立できるプランとして提示します。
dbt は「ETL ツール」ではなく、DWH 上で SQL を実行し、モデル(テーブル/ビュー)間の依存関係を管理・テスト・文書化するフレームワークです。認定試験はこれらの基本を、手を動かしている前提で問うため、日常的に SELECT/CTE やスキーマ設計に触れている人には中級レベルの難易度に感じられます。
一方で、SQL が入門レベルだったり Git・Jinja・DWH の実行特性に不慣れだと、出題意図の把握に時間を要します。過去問暗記で解けるタイプではなく、公式ドキュメント記述と一致する原則(ref/source、テストの役割、増分モデルの前提、スナップショットの用途など)を理解しているかが評価されます。
安定して出題されるのは、dbt の中核 API と運用原則です。SQL は当然として、Jinja によるテンプレート化、テスト・ドキュメントの定義、Git による変更管理、そして DWH の実行特性(コスト/並列/権限/スキーマ)を理解しておきましょう。
特定のクラウドや DWH のコマンド暗記より、dbt の抽象(モデル、ソース、シード、スナップショット、マクロ、パッケージ、ref/source/var/target、ドキュメント、リネージ)と、その使い分けの判断基準が問われます。
公式ドキュメントと整合する安定領域として、モデル化、テスト、ドキュメント、ソース管理、マクロ/Jinja、スナップショット、増分更新、パッケージ活用、選択シンタックス、環境/リネージの理解が挙げられます。
個別機能の暗記より、ユースケースに対して「どれを選ぶか」を説明できることが重要です。以下の表に、代表タスクと学習の比重目安をまとめました。
| 領域 | 代表タスク | 学習の比重/難易度 |
|---|---|---|
| モデル化/DAG | stg/int/mart の階層化、ref での依存管理 | 高 / 中 |
| テスト/品質 | unique/not_null/relationships、カスタム generic | 高 / 中 |
| Materialization | view/table/incremental/ephemeral の選択 | 中 / 中 |
| データソース管理 | source 定義、freshness、seed の適用 | 中 / 低〜中 |
| 変更管理/CI | Git ブランチ、state:modified 選択、PR での dbt run + test | 中 / 中 |
| スナップショット | SCD タイプの変更履歴の捕捉 | 中 / 中 |
SQL 実務1年以上で dbt を触ったことがある人:2〜4週間(20〜35時間)が目安。手元のリポジトリで品質機能(tests/docs)と materialization の選択練習に集中すれば十分に戦えます。
SQL はできるが dbt/Jinja/Git が不安な人:4〜6週間(40〜60時間)。チュートリアルで手を動かし、スナップショット・増分・パッケージまで一通り構築してから模擬演習へ。
SQL 初学者:8〜10週間(80〜100時間)。前半は SQL 強化と DWH の基本、後半で dbt 基礎から演習までを段階的に。
試験対策と実務の両立には、staging → intermediate → marts の層構造を明確にし、ドメイン境界で依存を減らすことが近道です。CI で変更差分のみを安全に実行できるよう、選択シンタックス(--select state:modified+)を活用します。
環境分離(開発/検証/本番)ではスキーマやデータベース名に target を利用し、PR ごとに独立したスキーマにデプロイしてレビューを容易にします。
dbt の層構造と CI 実行の流れ(概念図)
模擬演習は「要件から手段を選ぶ」形式にしましょう。履歴管理が必要なら snapshot、遅延なく結果が欲しいダッシュボード用なら増分 + テスト強化、外部 CSV の取り込みは seed といった具合に、手段選択の理由を声に出して説明できるかを確認します。
試験当日は、設問文の条件(更新パターン、データ鮮度、依存・再計算コスト、監査可能性)を抽出してから、dbt の抽象で最小コストに落とす癖を徹底しましょう。
小さな演習:増分モデルとテスト・ドキュメント
-- models/mart/orders_daily.sql
{{
config(
materialized='incremental',
unique_key='order_id',
on_schema_change='sync_all_columns'
)
}}
with src as (
select * from {{ source('sales', 'orders') }}
{% if is_incremental() %}
where updated_at > (select coalesce(max(updated_at), '1900-01-01') from {{ this }})
{% endif %}
)
select
order_id,
customer_id,
order_date::date as order_date,
total_amount,
updated_at
from src;
-- models/mart/_orders.yml
version: 2
models:
- name: orders_daily
description: 日次の受注スナップショット相当を増分で維持
columns:
- name: order_id
tests:
- not_null
- unique
- name: customer_id
tests:
- not_null
tests:
- dbt_utils.expression_is_true:
expression: "total_amount >= 0"
meta:
owner: analytics
Analytics Engineer
問題 1
受注テーブルは過去行が上書き更新される。履歴を保持して「いつ、どの列がどう変わったか」を監査可能にしたい。dbt で最も適切なアプローチはどれか?
正解: A
上書き更新の履歴保持と監査可能性が要件であれば、dbt の snapshot が適切です。unique key と更新トラッキングの戦略を設定すれば、変更差分を自動的に管理できます。incremental は最新の集計結果維持に向くが、列レベルの履歴の完全保持・監査には snapshot が合致します。
dbt Core だけで学習・受験準備は可能ですか?
可能です。CLI で models/tests/docs/snapshots を一通り構築し、state 選択や materialization の振る舞いを確認できます。dbt Cloud 固有機能は便利ですが、試験の中核は dbt の抽象と原則です。
特定の DWH(Snowflake/BigQuery/Redshift)に依存した知識は必要ですか?
基本は dbt の抽象が中心です。ただし、ターゲット DWH の SQL 方言や権限・コスト・並列度など実行特性は理解しておくと選択判断に役立ちます。依存の強い機能よりも、公式ドキュメントで安定している概念を優先して学ぶのが安全です。
実務経験がなくても合格できますか?
丁寧に演習すれば可能ですが、実務に近い模擬リポジトリを自作し、PR ベースで dbt build(run+test+docs)を回す経験を積むことを推奨します。ユースケースから手段を選ぶ練習が合格率を大きく押し上げます。
NicheeLab編集部
データエンジニアリング・クラウド資格の専門家。Databricks・Snowflake等の認定資格を保有し、実務経験に基づいた問題作成・解説を行っています。NicheeLab運営。
dbt Model の基礎: SQL で定義する変換の最小単位
Analytics Engineer 向けに、dbt Model の定義、マテリアライゼーション、依存関係、インクリメン...
dbt Analytics Engineer 試験ガイド: 出題範囲・配点・申込の実務視点
dbt Analytics Engineer 認定の出題範囲、配点の考え方、申込から受験までの流れを、公式ドキュメントの...
dbt Cloud と dbt Core の違いと選び方:Analytics Engineer 試験に効く要点
dbt Cloud と dbt Core の機能差を、実務と資格対策の両面から整理。スケジューリング、IDE、RBAC、...
dbt プロジェクト構造ガイド: models / seeds / macros の実務レイアウト
Analytics Engineer 向けに、dbt プロジェクトのディレクトリ構造と命名規約、dbt_project....
dbt_project.yml の読み方:主要設定と命名を最短で掴む
dbt_project.yml の必須キー、命名解決(database.schema.identifier)、設定優先度...