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

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

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

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

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

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

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

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",
});

次のステップ