このドキュメントでは、Dataform でコードを再利用するための JavaScript の作成方法について説明します。
リポジトリの includes/
フォルダで、JavaScript インクルードを定義できます。これには、リポジトリ全体で再利用できるグローバル定数または関数が含まれます。
始める前に
Google Cloud コンソールの [Dataform] ページに移動します。
Dataform リポジトリを作成または選択します。
Dataform 開発ワークスペースを作成または選択します。
必要なロール
JavaScript コードを使ってコードを再利用するために必要な権限を取得するには、ワークスペースに対する Dataform 編集者 (roles/dataform.editor
) IAM ロールの付与を管理者に依頼してください。ロールの付与の詳細については、アクセスの管理をご覧ください。
必要な権限は、カスタムロールや他の事前定義ロールから取得することもできます。
Dataform に含める 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 ファイルを作成または選択します。このファイルに、カスタム JavaScript 関数を記述します。
このファイルに、次のコード スニペットを入力します。
module.exports = { FUNCTION_NAME }
FUNCTION_NAME
は、関数の名前で置き換えます。
次のサンプルコードは、SQL ファイルを生成する includes/functions.js
ファイルの renderScript
というカスタム JavaScript 関数を示しています。
function renderScript(table, dimensions, metrics) {
return `
select
${dimensions.map(field => `${field} as ${field}`).join(",")},
${metrics.map(field => `sum(${field}) as ${field}`).join(",\n")}
from ${table}
group by ${dimensions.map((field, i) => `${i + 1}`).join(", ")}
`;
}
module.exports = { renderScript };
次のコードサンプルは、Dataform コアテーブル定義クエリでカスタム renderScript
JavaScript 関数を使用する方法を示しています。
config {
type: "table",
tags: ["advanced", "hourly"],
disabled: true
}
${functions.renderScript(ref("source_table"),
["country", "device_type"],
["revenue", "pageviews", "sessions"]
)}
次のサンプルコードは、SQL にコンパイルされた上記の Dataform コアテーブル定義クエリを示しています。
select
country as country,
device_type as device_type,
sum(revenue) as revenue,
sum(pageviews) as pageviews,
sum(sessions) as sessions
from "dataform"."source_table"
group by 1, 2
SQLX ファイル内のインクルードを参照する
SQLX ファイル内で任意のインクルード関数または定数を参照できます。インクルードを参照する構文は、インクルード ファイルの場所によって異なります。最上位のインクルード ファイルは、includes/
ディレクトリに直接あります。ネストされたインクルード ファイルは、includes/
のサブディレクトリにあります。
SQLX ファイル内の最上位のインクルードを参照する
- Dataform コアクエリでトップレベルのインクルード関数または定数を参照するには、
.js
拡張子を含み、エクスポートされたオブジェクトの名前をインクルード定義のファイル名を入力します。
次のサンプルコードは、テーブル定義 SQLX ファイルの includes/constants.js
ファイルで定義された firstDate
定数を参照します。
config {type: "table"}
select * from source_table where date > ${constants.firstDate}
ネストされたインクルードを SQLX ファイルで参照する
definitions
のサブディレクトリにあるインクルードを参照するには、JavaScript require
関数と js {}
ブロックを使用してインクルードをインポートします。
require
JavaScript 関数を使用してネストされたインクルードを参照するには、次の手順に従います。
開発ワークスペースに移動します。
[ファイル] ペインで、
definitions/
を展開します。SQLX ファイルを選択します。
config
ブロックに、次のコード スニペットを入力します。js { var { VARIABLE_NAME } = require("SUBDIRECTORY_INCLUDE"); }
VARIABLE_NAME
は、インポートする定数または関数の名前に置き換えます。SUBDIRECTORY_INCLUDE
は、ネストされたインクルード ファイルのパスに置き換えます。
次のサンプルコードは、テーブル定義の SQLX ファイル内のネストされた includes/allConstants/constants.js
ファイルで定義されている firstDate
定数を参照しています。
config {type: "table"}
js {
var { firstDate } = require("includes/allConstants/constants");
}
select * from source_table where date > ${firstDate}
Dataform コア ref
関数で JavaScript インクルード関数を使用する
Dataform コア ref
関数で JavaScript インクルード関数を使用するには、SQLX ファイル内の JavaScript インクルード関数の引数として ref
を渡す必要があります。
次のサンプルコードは、SUM
を使用して指標を集計し、次にディメンション別にグループ化する renderScript
JavaScript 関数を含む includes/script_builder.js
ファイルを示しています。
function renderScript(table, dimensions, metrics) {
return `
SELECT
${dimensions.map((field) => `${field} AS ${field}`).join(",\\n")},
${metrics.map((field) => `SUM(${field}) AS ${field}`).join(",\\n")}
FROM ${table}
GROUP BY ${dimensions.map((field, i) => `${i + 1}`).join(", ")}
`;
}
module.exports = { renderScript };
次のサンプルコードは、definitions/stats_per_country_and_device.sqlx
ファイルで使用される renderScript
JavaScript 関数を引数として、Dataform コアの ref
関数を渡したものです。
${script_builder.renderScript(
ref("source_table"),
["country", "device_type"],
["revenue", "pageviews", "sessions"])}
次のサンプルコードは、SQL にコンパイルされた definitions/stats_per_country_and_device.sqlx
クエリを示しています。
SELECT country AS country,
device_type AS device_type,
SUM(revenue) AS revenue,
SUM(pageviews) AS pageviews,
SUM(sessions) AS sessions
FROM my_schema.source_table
GROUP BY 1, 2
Dataform コアref
関数の詳細については、Dataform コアの概要をご覧ください。
次のステップ
JavaScript ファイルにインクルードを参照する方法については、JavaScript で SQL ワークフローを作成するをご覧ください。
Dataform コアファイルでコードを再利用し、ブロックおよびインライン JavaScript を行う方法については、Dataform コアの概要をご覧ください。