Teradata Vantage を使用した高度な dbt のユースケース
概要
このプロジェクトでは、上級ユーザーの観点から dbt と Teradata Vantage の統合を紹介します。 dbt を使用したデータ エンジニアリングが初めての場合は、導入プロジェクト から始めることをお勧めします。 デモで紹介されている高度なユースケースは以下のとおりです。
-
増分マテリアライズド
-
ユーティリティ マクロ
-
Teradata 固有の修飾子を使用したテーブル/ビューの作成の最適化
これらの概念の適用は、架空の店舗である teddy_retailers
のELTプロセスを通じて説明されています。
前提条件
-
Teradata Vantageインスタンスへのアクセス。
Vantage のテスト インスタンスが必要な場合は、 https://clearscape.teradata.com. で無料でプロビジョニングできます。 -
Python 3.7、3.8、3.9、または 3.10 がインストールされていること。
-
データベース コマンドを実行するためのデータベース クライアント。 このようなクライアントの構成例は、チュートリアル に示されています。
デモプロジェクトの設定
-
チュートリアル リポジトリのクローンを作成し、プロジェクト ディレクトリに移動します。
git clone https://github.com/Teradata/teddy_retailers_dbt-dev teddy_retailers cd teddy_retailers
-
dbt とその依存関係を管理するための新しい Python 環境を作成します。環境の作成に使用しているPythonのバージョンが、上記のサポートされているバージョン内にあることを確認します。
python -m venv env
-
オペレーティング システムに応じて Python 環境を有効化します。
source env/bin/activate
Mac、Linux、または
env\Scripts\activate
Windows
-
`dbt-teradata`モジュールをインストールします。dbtのコアモジュールも依存関係のあるモジュールとして含まれているので、別にインストールする必要はありません。
pip install dbt-teradata
-
プロジェクトの依存関係`dbt-utils`と`teradata-utils`をインストールします。これは以下のコマンドで実行できます。
dbt deps
データ ウェアハウスを設定する
デモ プロジェクトでは、ソース データがデータ ウェアハウスにすでに読み込まれていることを前提としています。これは、実働環境での dbt の使用方法を模倣しています。 この目的を達成するために、Google Cload Platform(GCP)で利用可能な公開データセットと、それらのデータセットをモックデータウェアハウスにロードするためのスクリプトを提供します。+
-
作業用データベースを作成または選択します。dbt プロファイルは、
teddy_retailers`というデータベースを指します。Teradata Vantage インスタンス内の既存のデータベースを指すように `schema
値を変更することも、データベース クライアントで以下のスクリプトを実行してteddy_retailers
データベースを作成することもできます。CREATE DATABASE teddy_retailers AS PERMANENT = 110e6, SPOOL = 220e6;
-
初期データセットをロードします。 初期データセットをデータウェアハウスにロードするために、必要なスクリプトがプロジェクトの`references/inserts/create_data.sql`パスで使用できます。 これらのスクリプトは、データベース クライアントにコピー アンド ペーストすることで実行できます。特定のケースでこれらのスクリプトを実行するためのガイダンスについては、データベース クライアントのドキュメントを参照してください。
dbtを構成する
ここで、dbtを設定してVantageデータベースに接続します。
以下の内容のファイル $HOME/.dbt/profiles.yml
を作成します。Teradata Vantageに一致するように`<host>`、<user>
、<password>
を調整します。
ご使用の環境ですでに dbt を使用したことがある場合は、ホームのディレクトリ dbt/profiles.yml
ファイルにプロジェクトのプロファイルを追加するだけで済みます。
ディレクトリ.dbtがまだシステムに存在しない場合は、それを作成し、dbtプロファイルを管理するためにprofiles.ymlを追加する必要があります。
teddy_retailers:
outputs:
dev:
type: teradata
host: <host>
user: <user>
password: <password>
logmech: TD2
schema: teddy_retailers
tmode: ANSI
threads: 1
timeout_seconds: 300
priority: interactive
retries: 1
target: dev
プロファイルファイルが用意できたので、設定を検証できます。
dbt debug
デバッグ コマンドがエラーを返した場合は、 profiles.yml
の内容に問題がある可能性があります。
Teddy Retailers のウェアハウスについて
前述のように、teddy_retailers
は架空の店舗です。
dbt 主導の変換を通じて、「teddy_retailers」 トランザクション データベースから取り込まれたソース データを、分析に使用できるスター スキーマに変換します。
データ モデル
ソース データは、以下のエンティティリレーションシップ図に従って、customers、orders、products、order_products のテーブルで構成されます。
# Entities [customers] {bgcolor: "#f37843", color: "#ffffff", border: "0", border-color: "#ffffff"} *`id ` {bgcolor: "#f9d6cd", color: "#000000", label: "int", border: "1", border-color: "#ffffff"} `name ` {bgcolor: "#fcece8", color: "#868686", label: "varchar", border: "1", border-color: "#ffffff"} `surname ` {bgcolor: "#fcece8", color: "#868686", label: "varchar", border: "1", border-color: "#ffffff"} `email ` {bgcolor: "#fcece8", color: "#868686", label: "varchar", border: "1", border-color: "#ffffff"} [orders] {bgcolor: "#f37843", color: "#ffffff", border: "0", border-color: "#ffffff"} *`id ` {bgcolor: "#f9d6cd", color: "#000000", label: "int", border: "1", border-color: "#ffffff"} `customer_id `{bgcolor: "#fcece8", color: "#868686", label: "int", border: "1", border-color: "#ffffff"} `order_date `{bgcolor: "#fcece8", color: "#868686", label: "varchar", border: "1", border-color: "#ffffff"} `status ` {bgcolor: "#fcece8", color: "#868686", label: "varchar", border: "1", border-color: "#ffffff"} order_products] {bgcolor: "#f37843", color: "#ffffff", border: "0", border-color: "#ffffff"} `order_id `{bgcolor: "#fcece8", color: "#868686", label: "int", border: "1", border-color: "#ffffff"} `product_id ` {bgcolor: "#fcece8", color: "#868686", label: "int", border: "1", border-color: "#ffffff"} `quantity ` {bgcolor: "#fcece8", color: "#868686", label: "int", border: "1", border-color: "#ffffff"} 2[products] {bgcolor: "#f37843", color: "#ffffff", border: "0", border-color: "#ffffff"} *`id ` {bgcolor: "#f9d6cd", color: "#000000", label: "int", border: "1", border-color: "#ffffff"} `name `{bgcolor: "#fcece8", color: "#868686", label: "varchar", border: "1", border-color: "#ffffff"} `category `{bgcolor: "#fcece8", color: "#868686", label: "varchar", border: "1", border-color: "#ffffff"} `unit_price `{bgcolor: "#fcece8", color: "#868686", label: "varchar", border: "1", border-color: "#ffffff"} # Relationships customers 1--* orders orders 1--* order_products products 1--* order_products
dbt を使用して、ソース データ テーブルを利用して、分析ツール用に最適化された以下のディメンションモデルを構築します。
# Entities [dim_customers] {bgcolor: "#f37843", color: "#ffffff", border: "0", border-color: "#ffffff"} * `customer_id ` {bgcolor: "#fcece8", color: "#868686", label: "int", border: "1", border-color: "#ffffff"} `first_name ` {bgcolor: "#fcece8", color: "#868686", label: "varchar", border: "1", border-color: "#ffffff"} `last_name ` {bgcolor: "#fcece8", color: "#868686", label: "varchar", border: "1", border-color: "#ffffff"} `email ` {bgcolor: "#fcece8", color: "#868686", label: "varchar", border: "1", border-color: "#ffffff"} [dim_orders] {bgcolor: "#f37843", color: "#ffffff", border: "0", border-color: "#ffffff"} * `order_id ` {bgcolor: "#fcece8", color: "#868686", label: "int", border: "1", border-color: "#ffffff"} `order_date ` {bgcolor: "#fcece8", color: "#868686", label: "varchar", border: "1", border-color: "#ffffff"} `order_status ` {bgcolor: "#fcece8", color: "#868686", label: "varchar", border: "1", border-color: "#ffffff"} dim_products] {bgcolor: "#f37843", color: "#ffffff", border: "0", border-color: "#ffffff"} * `product_id ` {bgcolor: "#fcece8", color: "#868686", label: "int", border: "1", border-color: "#ffffff"} `product_name ` {bgcolor: "#fcece8", color: "#868686", label: "varchar", border: "1", border-color: "#ffffff"} `product_category ` {bgcolor: "#fcece8", color: "#868686", label: "varchar", border: "1", border-color: "#ffffff"} `price_dollars ` {bgcolor: "#fcece8", color: "#868686", label: "varchar", border: "1", border-color: "#ffffff"} [fct_order_details] {bgcolor: "#f37843", color: "#ffffff", border: "0", border-color: "#ffffff"} `order_id ` {bgcolor: "#fcece8", color: "#868686", label: "int", border: "1", border-color: "#ffffff"} `product_id ` {bgcolor: "#fcece8", color: "#868686", label: "int", border: "1", border-color: "#ffffff"} `customer_id ` {bgcolor: "#fcece8", color: "#868686", label: "int", border: "1", border-color: "#ffffff"} `order_date ` {bgcolor: "#fcece8", color: "#868686", label: "varchar", border: "1", border-color: "#ffffff"} `unit_price ` {bgcolor: "#fcece8", color: "#868686", label: "varchar", border: "1", border-color: "#ffffff"} `quantity ` {bgcolor: "#fcece8", color: "#868686", label: "int", border: "1", border-color: "#ffffff"} `amount ` {bgcolor: "#fcece8", color: "#868686", label: "varchar", border: "1", border-color: "#ffffff"} # Relationships `dim_customers` 1--* `fct_order_details` `dim_orders` 1--* `fct_order_details` `dim_products` 1--* `fct_order_details`
dbtモデル
プロジェクトの models ディレクトリ内の`schema.yml`ファイルは、モデルのソースを指定します。これらのソースは、SQL スクリプトを使用して GCP からロードしたデータと一致しています。
ステージング エリア
ステージングエリアモデルは、各ソースからデータを取り込み、必要に応じて各フィールドの名前を変更するだけです。 このディレクトリの schema.yml では、主キーの基本的な保全性チェックを定義します。
コア エリア
この段階では、以下の高度な dbt 概念がモデルに適用されます。
増分マテリアライズド
このディレクトリ内の schema.yml
ファイルは、構築している 2 つのモデルのマテリアライズドが増分であることを指定します。
これらのモデルに対して異なる戦略を採用している。
-
all_orders model
には、削除+挿入方式を使用する。この戦略が実装されるのは、データ更新に含まれる注文のステータスに変更がある可能性があるためです。 -
all_order_products`モデルでは、デフォルトの追加戦略を採用します。このアプローチが選択されたのは、`order_id
とproduct_id
の同じ組み合わせがソースに複数回出現する可能性があるためです。 これは、同じ製品の新しい数量が特定の注文に追加または削除されたことを示します。
変換を実行する
まとめ
このチュートリアルでは、Teradata Vantage を使用した高度な dbt コンセプトの利用方法を検討しました。 サンプル プロジェクトでは、ソース データの次元データ マートへの変換を紹介しました。 プロジェクト全体を通じて、増分マテリアライゼーション、ユーティリティ マクロ、Teradata修飾子など、いくつかの高度な dbt コンセプトを実装しました。
ご質問がある場合、またはさらにサポートが必要な場合は、コミュニティ フォーラムにアクセスしてサポートを受け、他のコミュニティ メンバーと交流してください。 |