事業で継続的に価値を出すAnalytics Engineerは、SQL中心の変換レイヤをエンジニアリング手法で運用し、意思決定に耐えるデータ製品を届けます。dbtはこの役割の標準ツールとして定着し、職務の再現性と採用評価の基準になりつつあります。
本稿では、公式ドキュメントに基づく安定した機能を軸に、実務での振る舞いと試験出題範囲が重なるポイントを具体化します。最後にサンプル問題も掲載します。
クラウドDWHの普及で、データの変換・モデリングはアプリケーションコードと同じ厳密さで管理されるようになりました。dbtはSQLを中心に、モデル依存関係、テスト、ドキュメント、リネージを一体化して扱えるため、分析の再現性と運用性を両立できます。
採用側は、テーブルを作るだけでなく、変更に強いモデリング、テストの自動化、ドキュメントとオーナシップの可視化までを一気通貫で設計できる人材を求めます。これは公式のdbt概念(モデル、ソース、テスト、スナップショット、ドキュメント、エクスポージャ)に沿って成果物を説明できるかに直結します。
| 役割 | 主な責務 | コアスキル/ツール |
|---|---|---|
| Data Engineer | 取り込み・前処理・パイプライン運用(バッチ/ストリーミング) | Python/Scala、Spark、オーケストレーション、IaC |
| Analytics Engineer(dbt) | DWH内の変換・モデリング、テスト・ドキュメント、リネージ管理 | SQL、dbt Core/Cloud、Git/CI、DWH(Snowflake/Databricks等) |
| BI Analyst | 可視化、要件定義、指標設計、意思決定支援 | SQL、ダッシュボードツール、実験設計 |
dbtの安定コアは、モデルの依存関係管理(ref)、ソース定義(source)、テスト(generic・singular)、スナップショット(SCD管理)、マテリアライゼーション(view/table/incremental/ephemeral)、ドキュメント・リネージ(docs generate、Graph)です。これらは試験と実務で重なる範囲です。
また、CIでのdbt build実行は、依存順にモデル・シード・スナップショット・テストを評価する運用の基本形です。変更の影響範囲のみを走らせる工夫や、ロール・スキーマ分離などのデプロイ戦略は、プラットフォーム特性を踏まえて設計します。
dbt中心の変換レイヤ(簡略リネージ)
増分モデルは大規模データでの基本戦略です。SnowflakeやDatabricksなど、MERGEをサポートするDWHでは、unique_keyを指定したマージ戦略が安定して使われます。is_incremental()で取り込み対象を絞り、更新時刻やビジネスキーで正しく同一性を担保します。
テストは、スキーマYAMLでgeneric tests(not_null、unique、relationships、accepted_values等)を宣言し、dbt buildで自動実行します。ソース鮮度はsourcesでloaded_at_fieldとしきい値(warn_after/error_after)を宣言し、定期実行で監視します。
増分モデルとテスト/鮮度定義の最小実装例
-- models/marts/fct_orders.sql
{{ config(materialized='incremental', unique_key='order_id', on_schema_change='sync') }}
with src as (
select
o.order_id,
o.customer_id,
o.status,
o.total_amount,
o.updated_at
from {{ source('app', 'orders') }} o
)
select *
from src
{% if is_incremental() %}
where updated_at > (
select coalesce(max(updated_at), '1900-01-01') from {{ this }}
)
{% endif %}
-- models/marts/schema.yml
version: 2
models:
- name: fct_orders
description: 受注のファクトテーブル。order_idで一意。
columns:
- name: order_id
tests:
- not_null
- unique
- name: customer_id
tests:
- relationships:
to: ref('dim_customers')
field: customer_id
sources:
- name: app
schema: raw
tables:
- name: orders
loaded_at_field: updated_at
freshness:
warn_after: {count: 60, period: minute}
error_after: {count: 120, period: minute}
-- exposuresでBI依存を明示(変更時に影響範囲が見える)
exposures:
- name: sales_dashboard
type: dashboard
owner:
name: Analytics Team
email: [email protected]
depends_on:
- ref('fct_orders')dbtはアダプターを通じて各DWHの最適なSQLに変換します。SnowflakeやDatabricksでは、増分マージ戦略がサポートされ、unique_keyを前提としたMERGEが使えます。権限とスキーマ戦略(開発者ごとの専用スキーマ、プロダクション専用スキーマ)を用意し、ロールを介した安全なデプロイとするのが実務で安定します。
パフォーマンスとコストは、マテリアライゼーションの選択、クラスタリングやファイル最適化(プラットフォーム機能)、クエリ並列度、ジョブスケジューリングの頻度で大きく変わります。dbt側では必要十分な中間層のみをテーブル化し、stagingはビュー中心にするとビルド時間とストレージのバランスが取りやすくなります。
市場価値は、どれだけ再現性のある運用を設計・自動化できるかで評価されます。レポジトリにdbtプロジェクト一式を置き、READMEでレイヤ構造、命名規約、テスト方針、デプロイ戦略を説明できると説得力が増します。
採用では、単にクエリが書けるだけでなく、変更が仕様化され、影響が可視化され、異常が自動検知される体制を作れるかが差になります。
試験は、dbtのコア概念を正しく使い分けられるかを問います。特に、マテリアライゼーション、テスト、スナップショット、ソース鮮度、ドキュメント・エクスポージャ、依存関係(ref/source)、実行順序(build/test/run)といった安定機能は頻出です。
学習順序は、モデル層の分割とテストの基本→増分更新の正しさ→スナップショットと履歴→ドキュメントとエクスポージャ→CIへの組み込み、の流れが無理がありません。
Analytics Engineer
問題 1
ダッシュボードが特定のマートモデルに依存しており、リネージ上で可視化し、変更時にはCIで影響を検知したい。dbtのどの設定が最も適切か?
正解: A
exposuresはBIや外部消費者をdbtのリネージに登録する公式の手段で、depends_onでモデルを関連付けます。CIでdbt buildを実行すれば、依存関係とテストが評価され、変更の影響を検知できます。freshnessはソースの遅延検知には有効ですが、ダッシュボード依存の表現には使いません。ephemeralは中間ビューのインライン化でありダッシュボード管理には不適です。
dbt Coreとdbt Cloudのどちらを学ぶべきですか?
コア概念(モデル、テスト、スナップショット、ソース、エクスポージャ、マテリアライゼーション、ref/source、build)はdbt Coreで十分に学べます。運用面(スケジューラ、UI、シークレット管理)はCloudが補完しますが、試験と基礎力はCore中心で問題ありません。
Pythonは必須ですか?
Analytics Engineerの中核はSQLとdbtの運用です。Pythonは取り込みや外部API連携で有用ですが、dbtの主要範囲(SQLモデル、テスト、ドキュメント、増分、スナップショット)はPython不要で習得可能です。
増分モデルとスナップショットはどう使い分けますか?
増分モデルは最新状態を効率よく更新するため、ユニークキーと更新時刻でテーブルを保つ用途に適します。スナップショットはレコードの履歴を保持したいとき(SCD)に用います。最新指標の集計は増分、履歴追跡や変更監査はスナップショットと覚えると整理できます。
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)、設定優先度...