著者 Adam Tworkiewicz
最終更新日 2021年12月28日
警告
本記事はTeradata CorporationのサイトGetting Startedに掲載された内容を抄訳したものです。掲載内容の正確性・完全性・信頼性・最新性を保証するものではございません。正確な内容については、原本をご参照下さい。
また、修正が必要な箇所や、ご要望についてはコメントをよろしくお願いします。
概要
このチュートリアルでは、Teradata Vantageでdbt (Data Build Tool)を使用する方法について説明します。オリジナルのdbt Jaffle Shopチュートリアルをベースにしています。いくつかのモデルは、VantageでサポートされるSQLに調整されています。
前提条件
・Teradata Vantageインスタンスにアクセスできること。
・Python 3.7、3.8、3.9のいずれかがインストールされていること。
メモ!
Vantageの新しいインスタンスが必要な場合は、Google Cloud、Azure、AWSのクラウドにVantage Expressという無料版をデプロイメントすることができます。また、VMware、VirtualBox、またはUTMを使用して、ローカルマシン上でVantage Expressを実行することもできます。
dbtのインストール
① チュートリアルリポジトリをクローンしプロジェクトディレクトリにcdします。
git clone https://github.com/Teradata/jaffle_shop-dev.git jaffle_shop
cd jaffle_shop
② dbtとその依存関係を管理するために新しいPython環境を作成し、環境をアクティブにします。
python3 -m venv env
source env/bin/activate
③ dbt-teradataモジュールとその依存関係にあるモジュールをインストールします。dbtのコアモジュールも依存関係のあるモジュールとして含まれているので、別にインストールする必要はありません。
pip install dbt-teradata
dbt の構成
Vantageに接続するためにdbtを設定します。
以下の内容で $HOME/.dbt/profiles.ymlファイルを作成します。
お使いのVantage環境に合わせて<**host**>, <**user**>, <**password**> を変更してください。
データベースの設定
次の dbtプロファイルはjaffle_shopという名前のデータベースを指しています。スキーマ値を変更してご利用のTeradata Vantageのデータベースを指すようにするか、jaffle_shopデータベースを作成してご利用ください。
jaffle_shop:
outputs:
dev:
type: teradata
host: <host>
user: <user>
password: <password>
logmech: TD2
schema: jaffle_shop
tmode: ANSI
threads: 1
timeout_seconds: 300
priority: interactive
retries: 1
target: dev
CREATE DATABASE jaffle_shop
AS PERMANENT = 110e6,
SPOOL = 220e6;
さて、プロファイルができたのでセットアップを検証してみましょう。
dbt debug
debugコマンドがエラーを返した場合、profiles.ymlの内容に問題がある可能性があります。
ジャッフルショップの倉庫について
jaffle_shopは架空のEコマースストアです。このdbtプロジェクトはアプリのデータベースからの生データを分析に適した顧客と注文のデータを持つディメンションモデルに変換します。
アプリからの生データは、顧客、注文、支払いで構成されており、以下のようなエンティティ関係図があります。
dbtはこれらの生データのテーブルから、分析ツールに適した以下のような次元モデルを構築します。
dbtを実行する
生データテーブルの作成
実際の業務では、Segment、Stitch、FivetranなどのETLツールから生データを取得することになります。今回は、dbtのseed機能を使って、csvファイルからテーブルを作成します。csvファイルは、./dataディレクトリにあります。dbtはファイルを検査し、型推論を行い、どのデータ型をカラムに使用するかを決定します。
では、生データのテーブルを作成してみましょう。
dbt seed
jaffle_shopデータベースには、raw_customers, raw_orders, raw_paymentsの3つのテーブルが表示されているはずです。これらのテーブルにはcsvファイルからのデータが入力されているはずです。
ディメンジョンモデルを作成する
生データを持つテーブルが手に入ったので、dbtにディメンジョンモデルを作成するように指示することができます。
dbt run
CREATE TABLE/VIEW FROM SELECT SQLを使用してdbtは追加のテーブルを作成しました。最初の変換でdbtは生データのテーブルを取り出し、customer_orders、order_payments、customer_paymentsという非正規化された結合テーブルを作成しました。これらのテーブルの定義は、./marts/core/intermediateに記載されています。2番目のステップでは、dbtはdim_customersテーブルとfct_ordersテーブルを作成しました。これらはBIツールに公開したいディメンジョンモデルテーブルです。
データをテストする
dbtはデータに対して複数の変換を適用しました。どうすれば次元モデルのデータが正しいことを確認できるでしょうか? dbtではデータに対してテストを定義し実行することができます。テストは ./marts/core/schema.yml で定義されています。このファイルにはすべてのリレーションシップにおける各カラムが記述されています。各カラムは tests key の下に複数のテストを設定することができます。例えば、fct_orders.order_id カラムには、一意でNULLでない値が含まれることが期待されます。生成されたテーブルのデータがテスト条件を満たしていることを検証するために以下を実行します。
dbt test
ドキュメントを生成する
このモデルは、ほんの数個のテーブルで構成されています。もっと多くのデータソースがありもっと複雑なディメンジョンモデルがある場合を想像してください。また、Data Vault 2.0の原則に従って、生データとディメンションモデルの間に中間領域を設けることも可能でしょう。もし、入力、変換、出力が何らかの形で文書化されていれば、便利だと思いませんか? dbtでは、設定ファイルから文書を生成することができます。
dbt docs generate
これにより**./target**ディレクトリにhtmlファイルが生成されます。
独自のサーバーを起動して、ドキュメントを閲覧することができます。次のコマンドは、サーバーを起動し、ブラウザーのタブにドキュメントのランディングページを開きます。
dbt docs serve
まとめ
このチュートリアルでは、Teradata Vantageでdbtを使用する方法を説明します。サンプルプロジェクトでは、生データを受け取り、ディメンションデータマートを作成します。複数のdbtコマンドを使用して、csvファイルからのテーブル投入(dbt seed)、モデルの作成(dbt run)、データのテスト(dbt test)、モデルドキュメントの生成と提供(dbt docs generate, dbt docs serve)などを行いました。
さらに詳しく
・dbt-teradata plugin documentation