Dataform で変化が緩やかなディメンションを使用する

このドキュメントでは、オープンソース パッケージの使用例として、Dataform でオープンソースの変化が緩やかなディメンション パッケージを使用する方法について説明します。

変化が緩やかなディメンション パッケージには、Dataform で変更可能なデータソースからタイプ 2 の変化が緩やかなディメンション テーブルを作成する一般的なデータモデルが含まれています。

変化が緩やかなディメンション テーブルは、顧客や商品など、定期的なスケジュールではなく、予測できない変更が生じる可能性があるデータを含む増分テーブルです。タイプ 2 の変化が緩やかなディメンション テーブルでは、既存のテーブルの行を上書きすることなく、新しいデータが新しい行に追加されます。テーブル履歴は、変化が緩やかなディメンションキーの特定のキーの複数のレコードに保存されます。各レコードには一意のキーがあります。

変化が緩やかなディメンション パッケージは、指定された NAME に対して BigQuery で次のリレーションを作成します。

  • NAME - scd_valid_from フィールドと scd_valid_to フィールドを持つビュー
  • NAME_updates - ソーステーブルの変更履歴を格納する増分テーブル

Dataform は、変化が緩やかなディメンションの増分テーブルを実行するたびに、変化が緩やかなディメンションを更新します。キャプチャする変更の粒度に応じて、変化が緩やかなディメンション テーブルを毎日または毎時間実行するようにスケジュールを設定できます。

Dataform の実行をスケジュールする方法については、Cloud Composer を使用して実行をスケジュールするまたはWorkflows と Cloud Scheduler を使用して実行をスケジュールするをご覧ください。

始める前に

  1. 変化が緩やかなディメンションのリリースページで、最新のリリースの .tar.gz URL をコピーします。
  2. Dataform リポジトリの作成
  3. リポジトリ内でワークスペースを作成して初期化します。
  4. Dataform リポジトリに変化が緩やかなディメンション パッケージをインストールします

必要なロール

パッケージの構成に必要な権限を取得するには、ワークスペースに対するDataform 編集者 roles/dataform.editor)IAM ロールの付与を管理者に依頼してください。 ロールの付与については、プロジェクト、フォルダ、組織へのアクセスを管理するをご覧ください。

必要な権限は、カスタムロールや他の事前定義ロールから取得することもできます。

変化が緩やかなディメンション パッケージを使用して変化が緩やかなディメンション テーブルを作成する

Dataform で変化が緩やかなディメンション パッケージを使用して変化が緩やかなディメンション テーブルを作成するには、次の操作を行います。

  1. [ファイル] ペインで、definitions/ の横にある [その他] メニューをクリックします。

  2. [ファイルを作成] をクリックします。

  3. [新しいファイルを作成] ペインで、次の操作を行います。

    1. [ファイルパスを追加] フィールドにおいて、definitions/ の後で、ファイル名の後に .js を入力します。例: definitions/definitions.js

    2. [ファイルを作成] をクリックします。

  4. [ファイル] ペインで、新しく作成した .js ファイルを選択します。

  5. パッケージを次の形式でファイルにインポートします。

     const CONSTANT-NAME = require("dataform-scd");
    

    CONSTANT-NAME は、定数の名前に置き換えます(例: scd)。

  6. 変化が緩やかなディメンション テーブルは、次の形式で作成します。

    scd("source_data_scd", {
      uniqueKey: "UNIQUE_ID",
      timestamp: "UPDATED_AT", // A field that stores a timestamp or date of when the row was last changed.
      source: {
        schema: "SOURCE_SCHEMA",     // The source table to build slowly changing dimensions from.
        name: "SOURCE_SCHEMA_NAME",
      },
      incrementalConfig: {        // Any configuration parameters to apply to the incremental table that will be created.
        bigquery: {
          partitionBy: "UPDATED_AT",
        },
      },
    });
    

    以下を置き換えます。

    • UNIQUE_ID: テーブル内の行の一意の識別子
    • UPDATED_AT: 行が最後に変更されたタイムスタンプまたは日付を格納するフィールドの名前(例: updated_at
    • SOURCE_SCHEMA: ソーステーブルのスキーマ(例: dataform_scd_example
    • SOURCE_SCHEMA_NAME: ソーステーブルの名前(例: source_data
  7. 省略可: [書式] をクリックします。

次のコードサンプルは、変化が緩やかなディメンション パッケージを使用して、緩やかに変化するディメンション テーブルの定義を示しています。

const scd = require("dataform-scd");

/**
 * Create an SCD table on top of the table defined in source_data.sqlx.
 */
const { updates, view } = scd("source_data_scd", {
  // A unique identifier for rows in the table.
  uniqueKey: "user_id",
  // A field that stores a timestamp or date of when the row was last changed.
  timestamp: "updated_at",
  // The source table to build slowly changing dimensions from.
  source: {
    schema: "dataform_scd_example",
    name: "source_data",
  },
  // Any tags that will be added to actions.
  tags: ["slowly-changing-dimensions"],
  // Documentation of table columns
  columns: {user_id: "User ID", some_field: "Data Field", updated_at: "Timestamp for updates"},
  // Configuration parameters to apply to the incremental table that will be created.
  incrementalConfig: {
    bigquery: {
      partitionBy: "updated_at",
    },
  },
});

// Additional customization of the created models can be done by using the returned actions objects.
updates.config({
  description: "Updates table for SCD",
});

次のステップ