title: dbtのベストプラクティスまとめ date: 2025-01-15 authors: [tanuuuuuuu] tags: [dbt, BigQuery, データモデリング] summary: dbtを使ったデータ変換のベストプラクティスについて、実際のプロジェクト経験から学んだことをまとめました。 draft: false

はじめに

データ基盤チームでは、データ変換ツールとしてdbtを採用しています。本記事では、実際のプロジェクトで得られたベストプラクティスを紹介します。

モデルの命名規則

ステージング層

ステージング層のモデルは、データソースの構造をそのまま反映しつつ、基本的なクレンジングを行います。

-- models/staging/stg_orders.sql
with source as (
    select * from {{ source('raw', 'orders') }}
),

renamed as (
    select
        id as order_id,
        user_id,
        created_at,
        updated_at,
        status
    from source
)

select * from renamed

マート層

マート層では、ビジネスロジックを適用した分析用のデータを提供します。

-- models/marts/fct_daily_orders.sql
with orders as (
    select * from {{ ref('stg_orders') }}
),

daily_orders as (
    select
        date(created_at) as order_date,
        count(*) as order_count,
        count(distinct user_id) as unique_users
    from orders
    group by 1
)

select * from daily_orders

テストの重要性

dbtのテスト機能を活用して、データ品質を担保しましょう。

# models/staging/schema.yml
version: 2

models:
  - name: stg_orders
    columns:
      - name: order_id
        tests:
          - unique
          - not_null
      - name: status
        tests:
          - accepted_values:
              values: ['pending', 'completed', 'cancelled']

まとめ

dbtを効果的に活用することで、データ変換のコードを保守しやすく、信頼性の高いものにできます。ぜひ皆さんのプロジェクトでも試してみてください。