Dataform コアを使用すると、SQLX と JavaScript を使用してワークフロー オブジェクトを作成できます。省略可。JavaScript と SQLX を使用して、ワークフローで同様の要素を繰り返し作成します。たとえば、JavaScript を使用して、特定のユーザー ID を削除して、ワークフロー内の各テーブルのビューを作成できます。 JavaScript のみを使用してワークフロー アクションを開発することもできます。
始める前に
Google Cloud コンソールで、[Dataform] ページに移動します。
リポジトリを作成または選択します。
開発ワークスペースを作成または選択します。
また、JavaScript 構文と次の JavaScript のコンセプトを理解している必要があります。
- 変数
- 配列
- 条件ステートメント
- for ループ
- マップ
- 関数
- オブジェクト
- モジュールのエクスポートとインポート
必要なロール
JavaScript を使用してワークフローを開発し、JavaScript コードを使ってコードを再利用するために必要な権限を取得するには、ワークスペースに対する Dataform 編集者 (roles/dataform.editor)IAM ロールの付与を管理者に依頼してください。ロールの付与については、プロジェクト、フォルダ、組織に対するアクセス権の管理をご覧ください。
必要な権限は、カスタムロールや他の事前定義ロールから取得することもできます。
SQLX ファイルに JavaScript コードを追加する
JavaScript コードを SQLX ファイルに追加する方法は、インラインと JavaScript ブロック内の 2 つがあります。
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 のカプセル化により単一の SQLX ファイル全体でコードを再利用する
JavaScript コードを再利用して、Dataform での開発を効率化できます。単一の SQLX ファイル全体で JavaScript の定数と関数を再利用するには、JavaScript ブロックにカプセル化します。単一の Dataform リポジトリ全体で JavaScript コードを再利用するには、インクルードを作成します。 複数の Dataform リポジトリ全体で JavaScript コードを再利用するには、パッケージを作成またはインポートします。
単一の 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}
インクルード用の JavaScript ファイルを作成する
includes/ ディレクトリに新しい JavaScript ファイルを作成する手順は次のとおりです。
[ファイル] ペインで、
includes/の横にある [その他] をクリックします。[ファイルを作成] をクリックします。
[新しいファイルを作成] ペインで、次の操作を行います。
[ファイルパスを追加] フィールドにおいて、
includes/の後で、ファイル名の後に.jsを入力します。例:includes/constants.js。ファイル名 には数字、英字、ハイフン、アンダースコアのみを使用できます。
[ファイルを作成] をクリックします。
JavaScript 定数を作成する
プロジェクト全体で再利用できる定数を作成する手順は次のとおりです。
開発ワークスペースに移動します。
[ファイル] ペインで
includes/を開きます。.js拡張子を持つ JavaScript ファイルを作成または選択します。このファイルに次のコード スニペットを入力します。
const CONSTANT_NAME = CONSTANT_VALUE; module.exports = { CONSTANT_NAME };以下を置き換えます。
- CONSTANT_NAME: 定数の名前
- CONSTANT_VALUE: 定数の値
省略可: [書式] をクリックします。
次のコードサンプルは、includes/constants.js ファイルで PROJECT_ID 定数を定義しています。
// filename is includes/constants.js
const PROJECT_ID = "my_project_name";
module.exports = { PROJECT_ID };
次のコードサンプルは、SQLX ファイルのテーブル定義クエリで PROJECT_ID 定数を参照しています。
config { type: "table" }
SELECT * FROM ${constants.PROJECT_ID}.my_schema_name.my_table_name
次のコードサンプルは、SQL にコンパイルされた以前の Dataform コアテーブル定義クエリを示しています。
SELECT * FROM my_project_name.my_schema_name.my_table_name
カスタム JavaScript 関数を作成する
プロジェクト全体で再利用できるカスタム JavaScript 関数を作成する手順は次のとおりです。
開発ワークスペースに移動します。
[ファイル] ペインで
includes/を開きます。.js拡張子を持つ JavaScript ファイルを作成または選択します。ファイルにカスタム評価関数を記述します。
このファイルに次のコード スニペットを入力します。
module.exports = { FUNCTION_NAME }FUNCTION_NAMEは、関数の名前で置き換えます。省略可: [書式] をクリックします。
次のコードサンプルは、renderScript という名前で includes/functions.js ファイルに保存されているカスタム JavaScript 関数を示しています。この関数は SQL スクリプトを生成します。
function renderScript(table, dimensions, metrics) {
return `
select
${dimensions.map(field => `${field} as ${field