Dataform でパッケージを作成する

このドキュメントでは、Dataform で SQL ワークフローを開発するために使用できるカスタム JavaScript パッケージを作成する方法について説明します。

複数の Dataform リポジトリで再利用できるパッケージを作成するには、パッケージ専用の Dataform リポジトリを作成し、サードパーティの Git リポジトリに接続して他の Dataform リポジトリで使用できるようにする必要があります。

次に、最上位の index.js ファイルを作成し、エクスポート可能なパッケージの内容(関数や定数など)をファイルに追加します。Dataform で作成されたパッケージの例については、GitHub の dataform-package-base をご覧ください。

パッケージを作成したら、パッケージを別の Dataform リポジトリにインストールし、パッケージにエクスポート可能なコンテンツ(定数や関数など)を使用して SQL ワークフローを開発できます。

パッケージを作成する代わりに、インクルードを使用して単一の Dataform リポジトリ全体で JavaScript 関数と定数を再利用することもできます。詳細については、Dataform でインクルードを使用して変数と関数を再利用するをご覧ください。

始める前に

  1. Google Cloud コンソールの [Dataform] ページに移動します。

    [Dataform] ページに移動

  2. パッケージ専用の Dataform リポジトリを作成します。リポジトリ名をパッケージと照合します。

  3. パッケージをホストするサードパーティの Git リポジトリにリポジトリを接続します

  4. Dataform リポジトリでワークスペースを作成して初期化します。

必要なロール

パッケージの作成に必要な権限を取得するには、リポジトリに対するDataform 管理者 roles/dataform.admin)IAM ロールの付与を管理者に依頼してください。 ロールの付与の詳細については、アクセス権の管理をご覧ください。

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

Dataform でパッケージを作成する

Dataform で再利用できる JavaScript コードを使用して独自のパッケージを作成するには、ワークスペースで次の手順を行います。

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

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

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

    2. [ファイルパスの追加] フィールドに「index.js」と入力します。

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

  3. index.js ファイルに、パッケージをエクスポートする JavaScript コードを入力します。

    1. 次の形式で定数を作成します。

      const CONSTANT_NAME = CONSTANT_VALUE;
      module.exports = { CONSTANT_NAME };
      

      次のように置き換えます。

      • CONSTANT_NAME: 定数の名前
      • CONSTANT_VALUE: 定数の値
    2. 次の形式で関数を作成します。

    function FUNCTION_NAME(PARAMETERS) { FUNCTION_BODY }
    
    module.exports = { FUNCTION_NAME }
    

    次のように置き換えます。

    • FUNCTION_NAME: 関数の名前
    • PARAMETERS: 関数のパラメータ
    • FUNCTION_BODY: 関数を実行するコード
  4. 省略可: [書式] をクリックします。

  5. 省略可: definitions ディレクトリに、エクスポートされないパッケージのコードを追加します。

  6. 変更を commit して push します。

次のパッケージ コードサンプルは、getDomain 関数をエクスポートする postoffice パッケージの index.js ファイルを示しています。

// filename index.js
// package name postoffice

const GENERIC_DOMAINS = "('samplemail.com','samplemail.co.uk','examplemailbox.com'";

function getDomain(email) {
  let cleanEmail = `trim(${email})`
  const domain = `substr(${cleanEmail}, strpos(${cleanEmail}, '@') + 1)`;
  return `case
            when ${domain} in ${common.GENERIC_DOMAINS} then ${cleanEmail}
            when ${domain} = "othermailbox.com" then "other.com"
            when ${domain} = "mailbox.com" then "mailbox.global"
            when ${domain} = "support.postman.com" then "postman.com"
            else ${domain}
          end`;
}

module.exports = { getDomain }

次のステップ