Imagen

dbt を使用して Airbyte に読み込まれたデータを変換する方法

概要

このチュートリアルでは、Teradata Vantage で dbt (Data Build Tool) を使用して 、Airbyte (オープンソースの抽出ロード ツール) を介して外部データ ロードを変換する方法を説明します。

このチュートリアルは 、元の dbt Jaffle Shop tutorial に基づいていますが、 dbt seed コマンドを使用する代わりに、Airbyte を使用して Jaffle Shop データセットが Google Sheets から Teradata Vantage にロードされるという小さな変更が加えられています。airbyte を通じてロードされたデータは、以下の図に示すように JSON カラムに含まれています。

Teradata Vantageの生データ

前提条件

  • Teradata Vantageインスタンスへのアクセス。

    Vantage のテスト インスタンスが必要な場合は、 https://clearscape.teradata.com. で無料でプロビジョニングできます。
  • サンプルデータ: サンプルデータ Jaffle Shop Dataset は、 Google スプレッドシートにあります。

  • 参照 dbt プロジェクト リポジトリ: Jaffle Project with Airbyte.

  • Python 3.7、3.8、3.9、3.10、または3.11がインストールされている。

サンプルデータのローディング

  • Airbyte tutorial の手順に従います。Airbyte チュートリアルで参照されるデフォルトのデータセットではなく、Jaffle Shop spreadsheet からデータをロードするようにしてください。また、Teradata宛先の Default Schemaairbyte_jaffle_shop に設定する。

AirbyteでTeradata宛先を設定すると、Default Schema をリクエストされます。Default Schemaairbyte_jaffle_shop に設定する。

プロジェクトのクローンを作成する

チュートリアル リポジトリのクローンを作成し、ディレクトリをプロジェクト ディレクトリに変更します。

+

git clone https://github.com/Teradata/airbyte-dbt-jaffle
cd airbyte-dbt-jaffle

dbtをインストールする

  • dbt とその依存関係を管理するための新しい Python 環境を作成します。環境を有効化します。

    python3 -m venv env
    source env/bin/activate

    対応するバッチ ファイル `/myenv/Scripts/activate`を実行すると、Windows で仮想環境を有効化できます。

  • `dbt-teradata`モジュールとその依存関係をインストールします。dbtのコアモジュールも依存関係のあるモジュールとして含まれているので、別にインストールする必要はありません。

    pip install dbt-teradata

dbtを構成する

  • dbtプロジェクトを初期化します。

    dbt init

    dbt プロジェクト ウィザードでは、プロジェクト名と、プロジェクトで使用するデータベース管理システムの入力を求められます。このデモでは、プロジェクト名を dbt_airbyte_demo と定義します。dbt-teradataコネクタを使用しているため、使用可能なデータベース管理システムはTeradataのみです。

    プロジェクト名プロンプト
    データベース名プロンプト
  • $HOME/.dbt ディレクトリにある profiles.yml ファイルを設定します。profiles.yml ファイルが存在しない場合は、新しいファイルを作成できます。

  • Teradataインスタンスの HOSTUsernamePassword に合わせて、serverusernamepassword をそれぞれ調整します。

  • この構成では、schema はサンプルデータを含むデータベースを表し、この場合は、Airbyte airbyte_jaffle_shop で定義したデフォルト スキーマです。

    dbt_airbyte_demo:
      target: dev
      outputs:
        dev:
          type: teradata
          server: <host>
          schema: airbyte_jaffle_shop
          username: <user>
          password: <password>
          tmode: ANSI
  • profiles.yml ファイルの準備ができたら、設定を検証できます。dbt プロジェクト フォルダに移動し、以下のコマンドを実行します。

    dbt debug

    デバッグ コマンドがエラーを返した場合は、 profiles.yml のコンテンツに問題がある可能性があります。設定が正しければ、次のメッセージが表示されます。 All checks passed!

    dbt debug output

Jaffle Shop dbtプロジェクト

jaffle_shop は、オンラインで注文を受ける架空のレストランです。このビジネスのデータは、以下のエンティティリレーション図に従う customersorders 、および payments のテーブルで構成されています。

Diagram

ソース システムのデータは正規化されています。同じデータに基づいた、分析ツールにより適したディメンションモデルを以下に示します。

Diagram

dbt の変換

以下で詳しく説明する変換を含む完全な dbt プロジェクトは Airbyte用いたJaffle プロジェクト にあります。

参照 dbt プロジェクトは 2 つの型の変換を実行します。

  • まず、Airbyte 経由で Google スプレッドシートからロードされた生データ (JSON 形式) をステージング ビューに変換します。この段階でデータは正規化されます。

  • 次に、正規化されたビューを、分析に使用できるディメンションモデルに変換します。

以下の図は、dbt を使用した Teradata Vantage の変換手順を示しています。

Diagram

すべての dbt プロジェクトと同様に、フォルダ models には、プロジェクトまたは個々のモデル レベルでの対応する構成に従って、プロジェクトがテーブルまたはビューとしてマテリアライズドするデータ モデルが含まれています。

モデルは、データ ウェアハウス/レイクの編成における目的に応じて、さまざまなフォルダに編成できます。一般的なフォルダ レイアウトには、 staging のフォルダ、 core のフォルダ、および marts のフォルダが含まれます。この構造は、dbt の動作に影響を与えることなく簡素化できます。

ステージングモデル

オリジナルの dbt Jaffle Shop チュートリア プロジェクトのデータは、dbt の seed コマンドを使用して ./data フォルダにある csv ファイルからロードされます。 seed コマンドはテーブルからデータをロードするためによく使用されますが、このコマンドはデータ ローディングを実行するように設計されていません。

このデモでは、データ ローディング用に設計されたツール Airbyte を使用してデータウェアハウス/レイクにデータを読み込む、より一般的なセットアップを想定しています。 ただし、Airbyte を通じてロードされたデータは生の JSON 文字列として表されます。これらの生データから、正規化されたステージング ビューを作成しています。このタスクは、以下のステージング モデルを通じて実行します。

  • stg_customers モデルは、_airbyte_raw_customers テーブルから customers の正規化されたステージングビューを作成します。

  • stg_orders モデルは、_airbyte_raw_orders テーブルから orders の正規化されたステージングビューを作成します。

  • stg_payments モデルは、_airbyte_raw_payments テーブルから payments の正規化されたステージングビューを作成します。

JSON 文字列を抽出するメソッドはすべてのステージング モデルで一貫しているため、これらのモデルの 1 つだけを例として使用して、変換の詳細な説明を提供します。

以下は、stg_orders.sql モデルを介して生の JSON データをビューに変換する例です。

WITH source AS (
    SELECT * FROM {{ source('airbyte_jaffle_shop', '_airbyte_raw_orders')}}
),

flattened_json_data AS (
  SELECT
    _airbyte_data.JSONExtractValue('$.id') AS order_id,
    _airbyte_data.JSONExtractValue('$.user_id') AS customer_id,
    _airbyte_data.JSONExtractValue('$.order_date') AS order_date,
    _airbyte_data.JSONExtractValue('$.status') AS status
  FROM source
)


SELECT * FROM flattened_json_data
  • このモデルでは、ソースは生のテーブル _airbyte_raw_orders として定義されます。

  • この生のテーブル列には、メタデータと実際に取り込まれたデータの両方が含まれています。データ列は _airbyte_data と呼ばれます。

  • この列は Teradata JSON 型です。この型は、JSON オブジェクトからスカラー値を取得するメソッド JSONExtractValue をサポートします。

  • このモデルでは、ビューをマテリアライズドするために、対象の各属性を取得し、意味のあるエイリアスを追加しています。

ディメンションモデル (マート)

ディメンションモデルの構築は、以下の 2 段階のプロセスです。

  • 最初に、stg_ordersstg_customersstg_payments の正規化されたビューを取得し、非正規化された中間結合テーブル customer_ordersorder_paymentscustomer_payments を構築します。これらのテーブルの定義は ./models/marts/core/intermediate にあります。

  • 2 番目のステップでは、 dim_customersfct_orders モデルを作成します。これらは、BI ツールに公開するディメンション モデル テーブルを構成します。これらのテーブルの定義は ./models/marts/core にあります。

変換を実行する

dbt プロジェクトで定義された変換を実行するには、以下のコマンドを実行します。

dbt run

以下に示すように、各モデルのステータスが取得されます。

dbt run output

テストデータ

ディメンションモデル内のデータが正しいことを確認するために、dbt を使用すると、データに対するテストを定義して実行できます。

テストは /models/marts/core/schema.yml/models/staging/schema.yml で定義されています。 各列には、tests キーの下で複数のテストを構成できます。

  • 例えば、 fct_orders.order_id 列には固有な非 NULL 値が含まれることが予想されます。

生成されたテーブルのデータがテスト条件を満たしていることを検証するには、以下のコマンドを実行します。

dbt test

モデル内のデータがすべてのテスト ケースを満たしている場合、このコマンドの結果は以下のようになります。

dbt test output

ドキュメントを生成する

このモデルは、わずか数個のテーブルで構成されています。より多くのデータ ソースとより複雑なディメンションモデルを使用するシナリオでは、データ系統と各中間モデルの目的をドキュメント化することが非常に重要です。

dbt を使用してこの型のドキュメントを生成するのは非常に簡単です。

dbt docs generate

これにより、`./target`ディレクトリにhtmlファイルが生成されます。

独自のサーバーを起動してドキュメントを参照できます。以下のコマンドはサーバーを起動し、ドキュメントのランディング ページが表示されたブラウザ タブを開きます。

dbt docs serve

Lineage Graph

dbt lineage graph

まとめ

このチュートリアルでは、dbt を使用して、Airbyte 経由でロードされた生の JSON データを Teradata Vantage のディメンションモデルに変換する方法を説明しました。サンプル プロジェクトは、Teradata Vantage にロードされた生の JSON データを取得し、正規化されたビューを作成し、最終的にディメンションデータ マートを生成します。dbt を使用して JSON を正規化ビューに変換し、複数の dbt コマンドを使用してモデルの作成 (dbt run)、データのテスト (dbt test)、モデルドキュメントの生成と提供 (dbt docs generate, dbt docs serve) を行いました。

さらに詳しく

ご質問がある場合、またはさらにサポートが必要な場合は、コミュニティ フォーラムにアクセスしてサポートを受け、他のコミュニティ メンバーと交流してください。
このページは役に立ちましたか?