Dataform での JavaScript の概要

このドキュメントでは、JavaScript を使用して Dataform で SQL ワークフローを開発する方法について説明します。

Dataform コアを使用すると、SQLX と JavaScript を使用して SQL ワークフロー オブジェクトを作成できます。必要に応じて、SQLX とともに JavaScript を使用して、ワークフロー内で同様の要素を繰り返し作成します。たとえば、JavaScript を使用して、特定のユーザー ID を削除して、ワークフロー内の各テーブルのビューを作成できます。 JavaScript のみを使用して SQL ワークフロー オブジェクトを開発することもできます。

JavaScript を使用して Dataform SQL ワークフローを開発するには、JavaScript 構文と以下の JavaScript のコンセプトに精通している必要があります。

  • 変数
  • 配列
  • 条件ステートメント
  • for ループ
  • マップ
  • 関数
  • オブジェクト
  • モジュールのエクスポートとインポート

SQLX ファイルに JavaScript コードを追加する

JavaScript コードは、インラインまたは JavaScript ブロック内で SQLX ファイルに追加できます。

JavaScript ブロックを使用して、SQLX ファイル内の関数または定数を定義できます。 インライン JavaScript を使用して、SQLX または SQL クエリを動的に変更できます。

次のコードサンプルは、SQLX ファイルの post_operations ブロックにインラインで追加された self Dataform コアの組み込み JavaScript 関数を示しています。

config {type: "table"}

SELECT * FROM ...

post_operations {
  GRANT `roles/bigquery.dataViewer`
  ON
  TABLE ${self()}
  TO "group:allusers@example.com", "user:otheruser@example.com"
}

次のコードサンプルは、JavaScript ブロックで定義され、SQLX ファイルのクエリ内でインラインで使用される定数を示しています。

js {
  const columnName = "foo";
}

SELECT 1 AS ${columnName} FROM "..."

JavaScript でコードを再利用する

JavaScript コードを再利用して、Dataform での開発を合理化できます。JavaScript 定数と関数を単一の SQLX ファイル全体で再利用するには、それらを JavaScript ブロックにカプセル化します。単一の Dataform リポジトリ全体で JavaScript コードを再利用するには、インクルードを作成します。 パッケージを作成またはインポートすることで、複数の Dataform リポジトリ間で JavaScript コードを再利用できます。

JavaScript のカプセル化により単一の SQLX ファイル全体でコードを再利用する

単一の SQLX ファイル内で再利用できる SQL コードの繰り返し部分を作成するには、JavaScript ブロックに関数と定数をカプセル化します。JavaScript ブロックで定義されたコードは、ブロックが定義されている SQLX ファイル内でのみ再利用できます。詳細については、Dataform コアの概要をご覧ください。

次のコードサンプルは、JavaScript ブロックで定義され、SQLX ファイルのクエリ内でインラインで使用される定数と関数を示しています。

js {
 const foo = 1;
 function bar(number){
     return number+1;
 }
}

select
 ${foo} as one,
 ${bar(foo)} as two

インクルードを使用して単一のリポジトリ全体でコードを再利用する

インクルードは、リポジトリにグローバルな JavaScript 定数または関数です。リポジトリの includes ディレクトリにインクルードを定義します。これらは JavaScript や SQLX ファイル内のリポジトリ全体で再利用できます。

次のコードサンプルは、includes/constants.js ファイル内の launch_date 定数の定義を示しています。

// filename is includes/constants.js
const launch_date = "11.11.2011";
module.exports = { launch_date };

次のサンプルコードは、SQLX ファイルのテーブル定義クエリで参照される launch_date 定数を示しています。

config {type: "table"}

SELECT * FROM source_table WHERE date > ${constants.launch_date}

パッケージを使用して複数のリポジトリ間でコードを再利用する

パッケージは、インポートして複数の Dataform リポジトリ間で使用し、SQL ワークフロー開発を効率化できる JavaScript コードのコレクションです。

Dataform で独自のカスタム パッケージを作成することも、GitHub のオープンソース Dataform ページで公開されているオープンソースの Dataform パッケージを使用することもできます。

Dataform でオープンソース パッケージを使用する例については、Dataform で変化が緩やかなディメンションを使用するをご覧ください。

Dataform でパッケージの内容を使用するには、パッケージを Dataform リポジトリにインストールし、パッケージを使用する個々の JavaScript または SQLX ファイルにインポートする必要があります。 詳細については、Dataform にパッケージをインストールするをご覧ください。

Dataform リポジトリに非公開 NPM パッケージをインストールできるようにするには、パッケージを認証する必要があります。

JavaScript で SQL ワークフローを作成する

SQL ワークフローまたは SQLX と JavaScript を組み合わせて SQL ワークフローを開発する代わりに、JavaScript のみを使用して .js ファイルに SQL ワークフロー オブジェクトを作成できます。Dataform グローバル メソッドと任意の JavaScript ES5 コード(ループや定数など)を使用して、1 つの JavaScript ファイル内に複数の SQL ワークフロー オブジェクトを作成できます。各 Dataform グローバル JavaScript メソッドには、作成されたオブジェクトの構成に使用できるプロパティが含まれています。

Dataform で JavaScript のみを使用して、次の SQL ワークフロー オブジェクトを作成できます。

  • データソースの宣言
  • 手動アサーション
  • Tables
  • 手動アサーション
  • カスタム SQL オペレーション

JavaScript のみを使用して SQL ワークフロー オブジェクトを作成する方法については、JavaScript を使用して Dataform SQL ワークフローを作成するをご覧ください。

次のステップ