最終曎新:

dbt入門 — 2件の泚文をSQLで集蚈し、デヌタを点怜しよう


小さな泚文デヌタを、売䞊ぞ敎える

📋 泚文のCSV番号1200円番号2400円SQLモデル → 合蚈600円✓ 泚文番号を点怜空倀なし / 重耇なしrefで入力ず集蚈の䟝存を䌝える
モデルは集蚈を、data_testsは泚文番号の条件を担圓したす。テスト成功は、業務䞊の意味たで党お正しいずいう保蚌ではありたせん。
🎚 難易床 ★★☆ 䞭玚者向け
⏱ 孊習時間の目安 読むだけ10分皋床。緎習時間は環境で倉わりたす。
📚 前提知識 SQLのSELECT・JOIN・GROUP BYが曞ける・デヌタりェアハりスBigQuery, Snowflake, Redshiftなどの抂念を知っおいる・コマンドラむンの基本操䜜ができる
✅ このガむドで孊べるこず
  • CSVをseedずしお取り蟌む
  • refで合蚈600円を出す
  • not_nullずuniqueを実行する
ひよこ ひよこ
dbtっお、䜕をしおくれる道具なの
ペンギン先生 ペンギン先生
たずえば泚文デヌタを、売䞊の衚ぞ敎える䜜業を管理する道具だよ。今回は200円ず400円の泚文を甚意し、合蚈600円をSQLで出しおみよう。
ひよこ ひよこ
デヌタを集めおくれるの
ペンギン先生 ペンギン先生
䞻に、取り蟌たれたデヌタの倉換を管理するんだ。業務システムからデヌタを転送する仕組みは別に甚意するよ。緎習ではCSVをseedずしお読み蟌もう。
ひよこ ひよこ
モデルっおAIのこず
ペンギン先生 ペンギン先生
ここでは倉換を定矩するSQLなどのこずだよ。SQLモデルは1ファむルにSELECTを曞き、dbtがDBのビュヌやテヌブルなどぞ具䜓化するんだ。
ひよこ ひよこ
衚同士をどう぀なぐの
ペンギン先生 ペンギン先生
refで別のモデルやseedを参照するよ。DB䞊の名前を解決し、䟝存関係を䜜るので、先に必芁なデヌタから凊理できるんだ。
ひよこ ひよこ
デヌタの間違いも芋぀けられる
ペンギン先生 ペンギン先生
泚文番号が空でないか、重耇しおいないかをデヌタテストで確かめよう。ただし、その怜査を通れば業務䞊の意味たで党郚正しいずは限らないよ。
ひよこ ひよこ
本栌的なクラりドがないず詊せない
ペンギン先生 ペンギン先生
今回はdbt-duckdbを䜿い、自分の端末のファむルDBで詊すよ。実務では接続先に合うアダプタヌや、DBの暩限・料金も必芁だね。
ひよこ ひよこ
テストが倱敗したら重耇を消せばいい
ペンギン先生 ペンギン先生
たず倱敗した行ず原因を確認しよう。同じ泚文が二重に取り蟌たれたのか、番号のルヌルが違うのかで察応も倉わる。郜合の悪い行を消しお通すこずが目的ではないんだ。
ひよこ ひよこ
䜕を芚えおおけばいいかな
ペンギン先生 ペンギン先生
「dbt」っお出おきたら「分析甚のデヌタをSQLで敎え、その手順ず怜査を管理する道具」ず思えばだいたいOKたず600円の集蚈ず、二぀のデヌタテストを確かめよう。

最初のゎヌル泚文2件を600円にたずめる

SQLのSELECTを少し知っおいる人向けです。クラりドの契玄をせず、PythonずDuckDBでCSV → 集蚈 → デヌタテストを詊したす。

dbtはデヌタ倉換を管理する道具です。転送や可芖化のすべおを䞀぀で匕き受けるわけではありたせん。今回はdbt CoreずコミュニティのDuckDBアダプタヌを䜿いたす。

緎習フォルダヌず接続先を䜜る

Pythonずpipが䜿える環境で、新しいdbt-shoppingフォルダヌぞ移動しお仮想環境を䜜りたす。

python -m venv .venv

WindowsのPowerShellでは、次を実行したす。

.venv\Scripts\python -m pip install dbt-duckdb

macOS・Linuxでは.venv/bin/python -m pip install dbt-duckdbを䜿いたす。以降、Windowsは.venv\Scripts\dbt、macOS・Linuxは.venv/bin/dbtがコマンドです。別のDBぞ移す堎合はアダプタヌずSQLの方蚀を確認しおください。

フォルダヌ盎䞋にdbt_project.ymlを䜜りたす。

name: shopping
version: '1.0.0'
config-version: 2
profile: shopping
model-paths: [models]
seed-paths: [seeds]

同じ堎所にprofiles.ymlを䜜りたす。今回は--profiles-dir .でこの接続蚭定を指定したす。

shopping:
  target: dev
  outputs:
    dev:
      type: duckdb
      path: shopping.duckdb
      threads: 1

shopping.duckdbは自分の緎習デヌタを保存するファむルです。共有の本番DBには接続したせん。

CSVずSQLを䞀぀ず぀眮く

seedsフォルダヌを䜜り、orders.csvを保存したす。

order_id,amount
1,200
2,400

modelsフォルダヌのtotal_sales.sqlに、集蚈を曞くず次のようになりたす。

select sum(amount) as total
from {{ ref('orders') }}

ref('orders')はseedのデヌタを参照したす。単なる文字列眮換だけでなく、䟝存関係もdbtぞ䌝えたす。ビュヌ・テヌブルなどの䜜り方はマテリアラむれヌションの蚭定で倉わりたす。

models/schema.ymlに、泚文番号の怜査を足したしょう。

version: 2
seeds:
  - name: orders
    columns:
      - name: order_id
        data_tests:
          - not_null
          - unique

実行しお結果を確かめる

Windowsでは緎習フォルダヌで次を実行したす。

.venv\Scripts\dbt debug --profiles-dir .
.venv\Scripts\dbt build --profiles-dir .

macOS・Linuxではコマンドの先頭を.venv/bin/dbtに倉えたす。buildは遞んだseed・モデル・テスト・snapshotなどを䟝存関係に沿っお凊理したす。この䟋ではseed1件、モデル1件、テスト2件が成功すれば目印です。

集蚈の倀は、同じフォルダヌでPythonを䜿っお確認できたす。

import duckdb

with duckdb.connect('shopping.duckdb') as db:
    print(db.sql('select total from total_sales').fetchall())

結果は[(600,)]です。仮想環境のPythonで実行しおください。接続できない堎合はプロファむル名shoppingず珟圚のフォルダヌを、モデルが芋぀からない堎合はファむル名ず配眮を芋盎したす。

重耇を䜓隓したければ、CSVの2行目の泚文番号も1にしおもう䞀床buildしたす。uniqueが倱敗するはずです。元の1・2ぞ戻しお再実行したしょう。実務で倱敗した行は、業務ルヌルず取り蟌み元を調べおから修正したす。

次に孊ぶなら

倉換の道具に慣れたらDuckDB入門でファむルを読む緎習ぞ。分析甚の䜜業ずデヌタを集める䜜業の違いはデヌタ゚ンゞニアずデヌタサむ゚ンティストの比范でも敎理できたす。

参考資料

  • dbt SQL models — SELECTずマテリアラむれヌション
  • dbt ref — 参照ず䟝存関係
  • dbt data tests — not_null・uniqueず怜査の範囲
  • dbt build — 䟝存関係に沿った凊理
  • dbt-duckdb README — むンストヌルずロヌカルの接続蚭定

次に孊ぶなら