dbtを使った数値型カラムのDATE型変換とテーブル自動生成の手順

データパイプラインで、数値型カラムからDATE型へ変換し、常に最新の変換済みデータを持つテーブルを維持するシステム構築について、dbtでの実装方法を紹介します。本記事では、dbtプロジェクトのセットアップ、データ型変換、そして変換済みデータを保持するためのテーブル生成までの流れを解説します。
目次
はじめに
データパイプラインで、数値型カラムからDATE型へ変換し、常に最新の変換済みデータを持つテーブルを維持するシステム構築について、dbtでの実装方法を紹介します。本記事では、dbtプロジェクトのセットアップ、データ型変換、そして変換済みデータを保持するためのテーブル生成までの流れを解説します。
前提設定
以下のような構成で進めます。
- 元データのスキーマとテーブル名:
source_data_schema
スキーマにtransaction_info
テーブル - 変換後のビューとテーブル:ビューを作成し、それを基に永続的なテーブルを生成
ディレクトリ構造
dbtプロジェクト全体のディレクトリ構造は以下のようになります
my_new_project/
├── dbt_project.yml # プロジェクト設定ファイル
├── models/
│ ├── schema.yml # ソース設定ファイル
│ ├── transaction_info_transformed_view.sql # 変換用のビュー
│ └── transaction_info_final_table.sql # 最終テーブル生成モデル
└── other folders (seeds, tests, macros) # 他の補助ディレクトリ
1. dbt プロジェクトのセットアップ
schema.yml
の設定
まず、schema.yml
ファイルを作成して、Snowflake内のテーブルをsource
として設定します。
models/schema.yml
の内容
version: 2
sources:
- name: data_warehouse # データベース名
schema: source_data_schema # スキーマ名
tables:
- name: transaction_info # 元テーブル名
dbt_project.yml
の設定
次に、プロジェクト設定ファイルのdbt_project.yml
に必要な構成を記述します。
dbt_project.yml
の内容
name: 'my_new_project'
config-version: 2
profile: 'my_new_project'
model-paths: ["models"]
seed-paths: ["seeds"]
test-paths: ["tests"]
analysis-paths: ["analysis"]
macro-paths: ["macros"]
target-path: "target"
clean-targets:
- "target"
- "dbt_modules"
- "logs"
models:
my_new_project:
+materialized: table # デフォルトの素材化をテーブルに設定
transaction_info_transformed_view:
+materialized: view
transaction_info_final_table:
+materialized: table
2. 数値型からDATE型への変換
数値型カラムをDATE
型に変換するビューを作成します。transaction_info_transformed_view
ビューが変換を担当し、DATE
型のカラムを持つデータセットを生成します。
models/transaction_info_transformed_view.sql
WITH source AS (
SELECT *
FROM {{ source('data_warehouse', 'transaction_info') }}
)
SELECT
TO_DATE(TO_CHAR(TRANSACTION_MONTH), 'YYYYMM') AS TRANSACTION_MONTH_DATE,
TO_DATE(TO_CHAR(RECORD_DATE), 'YYYYMM') AS RECORD_DATE_DATE,
*
FROM source
3. 変換されたデータを永続化するテーブルの生成
変換されたデータを持つtransaction_info_transformed_view
ビューを基に、transaction_info_final_table
というテーブルを作成します。
models/transaction_info_final_table.sql
SELECT *
FROM {{ ref('transaction_info_transformed_view') }}
この設定により、dbt runを実行するたびに、変換済みデータがtransaction_info_final_tableテーブルに保存され、最新のデータが常に保持されるようになります。
実行手順
設定が整ったら、以下のコマンドでモデルの実行が可能です。
dbt test --テスト
dbt run --実行
このコマンドにより、DATE型に変換されたカラムを持つビューと、そのデータを永続化するテーブルが自動的に生成されます。
おまけ: dbt Power User 拡張機能
効率的なdbt
プロジェクト管理には、VS Codeのdbt Power User
拡張機能を活用するのが便利です。この拡張機能により、dbt test
コマンド実行時に直接テーブル内容のクエリ結果やリネージの可視化が可能です。型変換やデータ構造を素早く確認でき、特にテストやデバッグ作業が容易になります。
クエリ結果の見方について、select句を選択して「Command」+ ENTERでターミナルの「QUERY RESULTS」から確認できます。
リネージの可視化は「LINEAGR」から確認できます。
まとめ
この記事では、dbtを用いて数値型のデータをDATE型に変換し、最新の変換済みデータを持つテーブルを生成する方法を紹介しました。これにより、変換作業の効率化とデータの最新性が維持できます。