データ分析
2024/10/25
與田 龍人

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型に変換し、最新の変換済みデータを持つテーブルを生成する方法を紹介しました。これにより、変換作業の効率化とデータの最新性が維持できます。

New call-to-action