Analytics Engineer試験では、アダプターごとの接続定義(profiles.yml)やローカルでの検証フローを正しく理解しているかが問われます。本稿ではPostgresアダプターを題材に、確実に通る基本構成と“落ちない”動作確認のコツをまとめます。
扱う内容は公式ドキュメントの安定仕様に基づき、実務でもそのまま使える形に絞っています。
dbt-postgresは、PostgreSQLに対してdbtのモデル(SELECT)をテーブルやビューとしてデプロイし、テストを実行するための公式アダプターです。接続はprofiles.ymlに定義し、dbt runやdbt testなどのCLIコマンドは他アダプターと同一です。
試験観点では、type: postgres、dbname・schema・threadsなどの主要キー、接続確認コマンド(dbt debug)、および秘密情報のenv_var化が確実に問われます。
インストールとバージョン確認(例: Unix系シェル)
python -m venv .venv
source .venv/bin/activate
pip install --upgrade pip
pip install dbt-postgres
dbt --versionローカル検証はDockerでPostgresを起動すると安全・確実です。開発用に専用のDBとスキーマを用意し、dbtユーザーに作成権限を与えます。ポートはデフォルト5432を使います。
起動後はpsqlで接続確認をすると切り分けが容易です。dbtの前に“DB自体に入れるか”を確かめます。
ローカル検証の構成
docker-compose.yml(最小例)
version: '3.8'
services:
postgres:
image: postgres:15
container_name: pg_local
environment:
POSTGRES_USER: dbt
POSTGRES_PASSWORD: dbtpass
POSTGRES_DB: analytics
ports:
- "5432:5432"
volumes:
- pgdata:/var/lib/postgresql/data
volumes:
pgdata:dbtは~/.dbt/profiles.yml(または環境変数DBT_PROFILES_DIRで指すパス)を読み込み、接続情報を解決します。Postgresではdbnameとschemaが重要で、schemaはターゲットごとに分けるのが安全です。
秘密情報はenv_varで外出しします。threadsは開発マシンに合わせて控えめに設定します。sslmodeなどの任意キーは要件に応じて追加します。
~/.dbt/profiles.yml(例・環境変数を使用)
nicheelab_project:
target: dev
outputs:
dev:
type: postgres
host: {{ env_var('PGHOST', 'localhost') }}
user: {{ env_var('PGUSER', 'dbt') }}
password: {{ env_var('PGPASSWORD', 'dbtpass') }}
port: {{ env_var('PGPORT', '5432') | int }}
dbname: {{ env_var('PGDATABASE', 'analytics') }}
schema: analytics_dev
threads: 4
search_path: public
sslmode: preferプロジェクト名とprofile名を一致させ、models配下に最小のモデルとテストを用意します。シードを使うと、外部依存なくテストデータをロードできるためローカル検証が安定します。
Postgresでは各モデルは基本的にトランザクション内で実行され、失敗時はロールバックされます。materializedは必要に応じてview/tableを選びます。
最小構成例(複数ファイルを1つに併記)
# dbt_project.yml
name: 'nicheelab_project'
profile: 'nicheelab_project'
version: '1.0.0'
model-paths: ['models']
seed-paths: ['data']
models:
nicheelab_project:
+materialized: view
seeds:
nicheelab_project:
+schema: analytics_dev
# data/customers.csv
id,name
1,Alice
2,Bob
# models/stg_customers.sql
select
cast(id as integer) as customer_id,
name
from {{ ref('seed_customers') }}
# models/schema.yml
version: 2
seeds:
- name: customers
config:
alias: seed_customers
models:
- name: stg_customers
columns:
- name: customer_id
tests:
- not_null
- uniqueまずdbt debugでプロファイルと接続を確認します。次にdbt seedでCSVをロードし、dbt runでモデルをデプロイ、dbt testでテストを実行します。すべてを一括で行うならdbt buildが便利です。
プロファイルの場所を切り替える場合は--profiles-dirを使います。権限不足(CREATE SCHEMA不可)や接続拒否(ポート/ホスト誤り)はこの段階で明確になります。
代表的なコマンド(Unix系シェル)
# 接続確認
dbt debug
# シードをロード
dbt seed
# モデルを実行(ビュー/テーブル作成)
dbt run
# テストを実行
dbt test
# すべてを順序よく一括実行
dbt build
# プロファイルの場所を明示する場合
dbt debug --profiles-dir ./profiles接続定義のキーや概念はアダプターごとに一部異なります。Postgresではdbnameとschemaが中心で、ウェアハウスやロール切替といった概念は登場しません。SnowflakeやDatabricksでは別の必須キーや権限モデルがあるため、試験では各アダプターの“最低限の相違点”を押さえます。
共通して重要なのは、profiles.ymlの正しい型(type)、機密情報のenv_var化、dbt debugでの事前検証、そしてターゲットごとのスキーマ分離です。
| アダプター | 主な接続先キー | 認証/接続の要点 | プロファイル例の必須/代表キー |
|---|---|---|---|
| Postgres (dbt-postgres) | DB(dbname)/スキーマ | TCP直結(5432)。ユーザー/パスワード | type, host, user, password, port, dbname, schema, threads |
| Snowflake (dbt-snowflake) | アカウント/DB/スキーマ/ウェアハウス | ユーザー/パス or Key Pair。ロールで権限切替 | type, account, user, password, role, warehouse, database, schema |
| Databricks (dbt-databricks) | ワークスペース/カタログ/スキーマ | HTTP(S)。Personal Access Token + host/http_path | type, host, http_path, token, catalog, schema |
ターゲット切替の例(一時的にprodでビルド)
# profiles.ymlのtargetを変更せずに一時上書き
dbt build --target prodAnalytics Engineer
問題 1
dbt-postgresでローカル検証を行う際、profiles.ymlのキーとして必須かつPostgres特有のものはどれか。
正解: A
Postgresアダプターでは接続先データベースを示すdbnameが必須です。warehouseはSnowflake、http_pathはDatabricks、accountはSnowflakeの主キーです。
profiles.ymlはどこに置けばよいですか?プロジェクト内にも置けますか?
既定はユーザー配下の~/.dbt/profiles.ymlです。プロジェクト内など別ディレクトリに置く場合は、DBT_PROFILES_DIRで指すか、コマンドに--profiles-dirを付けてパスを明示します。
schemaを自動作成できずに失敗します。どう対処すべきですか?
接続ユーザーに対象データベースでのCREATE権限が必要です。DB管理者に、対象DBでのCREATE権限付与(あるいは事前に対象schemaを作成)を依頼してください。
SSLを使いたい場合はどう設定しますか?
profiles.ymlの接続設定にsslmodeを追加します(例: require, verify-ca など)。接続先のポリシーに合わせ、証明書が必要な場合は環境側で正しく配置してください。
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)、設定優先度...