変数は、SQL ジョブ、バッチジョブ、およびワークフロー全体で繰り返される値のハードコーディングを回避するのに役立ちます。複数の場所で同じ日付文字列を更新する代わりに、一度変数として定義し、${variable_name} で参照します。このトピックでは、サポートされている各シナリオで変数を追加および使用する方法について説明します。
変数の種類と範囲
変数は名前と値で構成されます。${Variable name} 形式を使用して変数を参照します。ジョブまたはワークフローが実行されると、システムは各変数参照を設定された値に置き換えます。
EMR Serverless Spark は、次の 2 種類の変数をサポートしています。
| タイプ | 説明 | 名前を変更できるか | 値を変更できるか |
|---|---|---|---|
| カスタム変数 | ユーザーが定義します。ビジネスロジックに合わせて任意の名前と値を設定します。 | はい | はい |
| 組み込み変数 | システムによって提供されます。すべて日付と時刻の変数です。デフォルト値は現在の日 (UTC + 08:00) の前日です。 | いいえ | いいえ |
変数は、定義されているコンテキストに範囲が設定されます。
ジョブレベル変数: 単一の Spark SQL またはバッチジョブ内で定義および使用されます。
ワークフローレベル変数: ワークフロー内のすべてのノードに適用されます。
ノードレベル変数: ワークフロー内のシングルノードに適用されます。
優先ルール: ワークフローレベルとノードレベルの両方で同じ変数名が設定されている場合、ノードレベルの値が優先されます。
データ開発変数
Spark SQL ジョブでの変数の追加
Spark SQL ジョブの開発方法については、「Spark SQL ジョブの開発を始める」をご参照ください。
Spark SQL ジョブの構成タブで、次のコードをコードエディタにコピーします。
CREATE TABLE IF NOT EXISTS students_info ( name VARCHAR(64), address VARCHAR(64) ) USING PARQUET PARTITIONED BY (data_date STRING); INSERT OVERWRITE TABLE students_info PARTITION (data_date = '${my_date}') VALUES ('Ashua Hill', '456 Erica Ct, Cupertino'), ('Brian Reed', '723 Kern Ave, Palo Alto');右側のナビゲーションウィンドウで、[変数管理] をクリックします。[変数管理] パネルで、[変数値] 列に値を入力します。この例では、変数値は
2025-04-15です。
コードエディタで、次のステートメントを入力して実行し、テーブルデータをクエリします。
SELECT * FROM students_info;下部の [実行結果] タブで、変数が正しく解析されていることを確認します。

バッチジョブでの変数の追加
バッチまたはストリーミングジョブの開発方法については、「バッチまたはストリーミングジョブの開発」をご参照ください。
バッチジョブの構成タブで、[実行パラメーター] フィールドに変数名を入力します。この例では、
${osspath}を入力します。右側のナビゲーションウィンドウで、[変数管理] をクリックします。[変数管理] パネルの [変数値] 列に値を入力します。

組み込み変数の使用
組み込み変数は、システム提供の日付と時刻の変数です。デフォルト値は現在の日 (UTC + 08:00) の前日です。組み込み変数の名前や値を変更することはできません。
次の表に、サポートされているすべての組み込み変数を示します。
| 変数 | データ型 | フォーマット | 例 |
|---|---|---|---|
{data_date} | str | YYYY-MM-DD | 2023-09-18 |
{ds} | str | — | — |
{dt} | str | — | — |
{data_date_nodash} | str | YYYYMMDD | 20230918 |
{ds_nodash} | str | — | — |
{dt_nodash} | str | — | — |
{ts} | str | YYYY-MM-DDTHH:MM:SS | 2023-09-18T16:07:43 |
{ts_nodash} | str | YYYYMMDDHHMMSS | 20230918160743 |
組み込み変数を使用するには、次のコードを Spark SQL ジョブのコードエディタにコピーして実行します。
CREATE TABLE IF NOT EXISTS students_address (
name VARCHAR(64),
address VARCHAR(64)
)
USING PARQUET
PARTITIONED BY (data_date STRING);
INSERT OVERWRITE TABLE students_address PARTITION (data_date = '${ts}') VALUES
('Ashua Hill', '456 Erica Ct, Cupertino'),
('Brian Reed', '723 Kern Ave, Palo Alto');
SELECT * FROM students_address;次の図は出力結果を示しています。

変数の値の表示または変更
構成タブの右側のナビゲーションウィンドウで、[変数管理] をクリックします。
[変数管理] パネルで、ジョブで参照されている変数を表示します。
[変数値] 列で、カスタム変数の値を表示または変更します。

ワークフロー変数
ワークフローは、ワークフローレベルとノードレベルの 2 つの変数範囲をサポートしています。ワークフローとそのノードの 1 つの両方で同じ変数が設定されている場合、ノードレベル変数が優先されます。
組み込み変数の名前を変更することはできません。
ワークフローレベル変数の追加
[ワークフローの作成]パネルで、[変数設定]の横にある右矢印をクリックします。[変数設定]セクションで、[追加]をクリックして変数を追加します。ワークフローがスケジュールされると、変数は自動的に指定された値に置き換えられます。

[変数値] ドロップダウンリストから値を選択し、要件に基づいてその値を変更してください。

ノードレベル変数の追加
[ノードの追加] パネルで、[ソースファイルパス] パラメーターを設定します。次に、[ノードレベルの変数] の横にある [追加] をクリックします。

[変数の値] ドロップダウンリストから変数の値を選択し、要件に応じて値を変更します。
