Seeds は、プロジェクトに含めた CSV を対象 DWH にテーブルとしてロードする dbt の機能です。外部システムからの変動に左右されない小〜中規模の参照データを、バージョン管理下で提供できます。
この記事では、配置場所、設定、型定義、運用の勘所、他機能との使い分けを押さえ、試験で問われやすいポイントも明確にします。
Seeds は、プロジェクトの seeds ディレクトリに置いた CSV を、そのまま DWH 上の物理テーブルとして作成・更新する仕組みです。モデルのように SQL を書かず、CSV の中身がそのまま行データになります。テーブル名は基本的にファイル名(拡張子除く)で決まり、ref('...') で他モデルから参照できます。
ユースケースは、国コードの辞書、カテゴリの正規化、閾値・グルーピングの定義など「静的で共有される小規模データ」。dbt seed コマンドで再現可能に配備でき、CI でも安定して扱えます。
パイプラインにおける Seeds の位置づけ
最短コマンド
dbt seed
# 特定のファイルだけ
# dbt seed --select path:seeds/countries.csv
# 他モデルから参照(SQL)
# select * from {{ ref('countries') }};Seeds はプロジェクトの seeds/ ディレクトリ配下に CSV を置きます。サブディレクトリはそのまま名前空間の整理に使え、テーブル名はファイル名(拡張子除く)です。スキーマや型、識別子のクオート有無などは dbt_project.yml の seeds セクションで設定します。
設定の優先順位は一般のリソースと同様で、より深いスコープ(プロジェクト全体 → パッケージ → ディレクトリ → 個別ファイル)で上書きされます。実務では seeds 専用のスキーマを切る、識別子のクオートを環境に合わせて統一する、型は明示する、の3点を最初に決めると安定します。
dbt_project.yml の例(Seeds 設定)
name: my_project
profile: my_profile
seeds:
+schema: reference
+quote_columns: false
my_project:
geo: # seeds/geo/ 配下
+column_types:
country_code: varchar(2)
region: varchar(32)
is_eu: boolean
lookup:
+schema: reference
# 必要に応じて区切り文字を変更
# +delimiter: ";"多くのアダプタでは、型を指定しない列はテキスト系(STRING/VARCHAR)として作成されます。計算や結合の安定性を高めるため、数値・日付・真偽値などは column_types で明示しましょう。型名はアダプタ(Snowflake/BigQuery/Databricks など)に合わせて記述します。
列名のクオート(quote_columns)は、識別子の大文字小文字や予約語の扱いに影響します。Snowflake でクオートを有効にすると列名の大小文字が保持され、無効にすると大文字化される、といった差が生じます。組織の命名規約(すべて小文字・アンダースコア等)に合わせ、Seeds とモデルで一貫させてください。
dbt seed を再実行すると、対象テーブルは(アダプタの実装に沿って)再作成または置換され、CSV の内容で上書きされます。増分適用は行われません。
column_types の最小例
seeds:
my_project:
business:
+column_types:
id: bigint
threshold: numeric(10,2)
valid_from: date
active: booleanSeeds の更新は CSV の差分がそのままデータ差分になります。レビューしやすいように小さく保ち、不要な列や空行を含めないのがコツです。大きすぎる Seeds はロード時間と DWH のメンテナンス負荷を増やします(目安として数万〜十数万行を超える場合は、外部ロードや一時ステージ経由の通常モデル化を検討)。
CI/CD では dbt seed を最初期に実行し、依存するモデルを続けて build します。選択子で対象を絞ると高速化できます。権限(grants)が必要なら seeds にも適用ルールを設定してください。
よく使うコマンド
# すべての Seeds
dbt seed
# 変更のあった Seeds だけ(例: ディレクトリ指定)
dbt seed --select path:seeds/geo/**
# Seeds 実行後に依存モデルをビルド
dbt build --select +ref:countries
# タグで束ねて実行
dbt seed --select config:tags:staticSeeds は他モデルから ref('seed_name') で参照します。辞書テーブルとして JOIN する、受け入れ可能値のリストとして IN で利用するといった使い方が定番です。データテストでは not_null、unique、accepted_values、relationships を Seeds に対しても定義できます。
試験対策としては、静的な参照データは Seeds、可変のソースデータは Sources、履歴保持は Snapshots と区別する設問が頻出です。
参照とテストの例
-- models/fct_orders.sql
select
o.order_id,
o.country_code,
c.region
from {{ ref('stg_orders') }} as o
left join {{ ref('countries') }} as c
on o.country_code = c.country_code;
# models/schema.yml(抜粋)
version: 2
seeds:
- name: countries
columns:
- name: country_code
tests: [not_null, unique]
- name: region
tests:
- accepted_values:
values: ["EMEA", "AMER", "APAC"]Seeds は「プロジェクト同梱の静的・小規模データ」を素早く安定供給するのに最適です。一方で、外部システム由来の可変データや履歴保持が必要なケース、大規模データには他機能を選ぶのが定石です。
| 用途/観点 | Seeds | Sources | Snapshots |
|---|---|---|---|
| 主目的 | CSV から静的な参照テーブルを作成 | 外部システムの生データを取り込んで参照 | モデルの行履歴を保持(差分追跡) |
| データ規模 | 小〜中(数行〜数万行目安) | 中〜大(継続取り込み前提) | モデルに依存(履歴で増加) |
| 更新方法 | dbt seed で置換・再作成 | 外部でロード→source 定義で参照 | dbt snapshot 実行で差分適用 |
| 型管理 | column_types で明示(推奨) | 上流のスキーマに依存 | スナップショット戦略のキー/カラム定義に依存 |
| 代表的な試験の出題点 | 静的辞書/受容値なら Seeds を選択 | 外部テーブルの接続や source freshness | 履歴保持の適用場面とキー設計 |
Analytics Engineer
問題 1
国コード→地域の対応表を CSV で管理し、デプロイ毎に同じ内容で参照したい。dbt で最も適切な機能はどれか。
正解: A
Seeds はプロジェクト同梱の CSV を DWH のテーブルとして作成する機能で、静的な辞書・参照データに最適。Sources は外部システムのデータ参照、Snapshots は行履歴の保持、Macros はロジック再利用の仕組みであり用途が異なる。
CSV 以外(JSON/Parquet など)を Seeds に使えますか?
いいえ。Seeds は CSV を前提としています(区切り文字は調整可能)。他形式は外部ロードやステージ経由で取り込み、通常のモデルとして扱うのが定石です。
大きな Seeds(数十万行〜)は問題になりますか?
ロード時間・トランザクション・コンパイル時間が増え、CI/CD の足かせになります。しきい値は環境依存ですが、数万〜十数万行を超える場合は ELT での取り込みや外部テーブル+モデル化への切り替えを検討してください。
同名のテーブルが既にある場合、dbt seed はどうなりますか?
アダプタの実装に従いテーブルを置換/再作成し、CSV の内容で上書きされます。衝突を避けるために専用スキーマを用意し、必要なら alias やスキーマ設定で名前空間を分けてください。
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)、設定優先度...