スケジューリングパラメーターを使用すると、実行時に動的な時間値をノードコードに渡すことができます。タスクが実行されるたびに、DataWorks は、Data Studio の [プロパティ] タブの [スケジューリングパラメーター] セクションで設定したルールに基づいて、ノードコード内のパラメータープレースホルダーを計算値に置き換えます。
基本概念
スケジューリングパラメーターがどのように値を計算するかは、2 つの時間概念によって決まります。
| 概念 | 定義 | 精度 |
|---|---|---|
| データタイムスタンプ | スケジューリング時間の前日。オフラインコンピューティングでは、これはビジネス日付、つまりソースデータが生成された日を表します。 | 日 |
| スケジューリング時間 | タスクインスタンスが実行されるようにスケジュールされた時間。キューの待機時間やその他の要因により、実際の開始時刻とは異なる場合があります。 | 第2 |
違いが重要な理由:一般的な ETL ワークフローでは、今日、昨日のデータを処理します。タスクが 2024-03-15 02:00:00 に実行される場合、データタイムスタンプは 2024-03-14 となり、処理対象データのビジネス日付を表します。この 1 日のオフセットが、${...} フォーマットの基礎となります。
スケジューリングパラメーターの値は、タスクインスタンスが生成されるときに決定されます。インスタンスが実際にいつ実行されるかに関係なく、この値は変更されません。
パラメーターフォーマットの選択
DataWorks は 2 種類のカスタム時間パラメーターフォーマットを提供しています。適切なものを選択するには、次の表をご利用ください:
| やりたいこと | 使用 | 例 |
|---|---|---|
| 昨日の日付 (データタイムスタンプ) を参照する | ${...} |
${yyyymmdd} |
| データタイムスタンプに日、月、または年を加算または減算する | ${...} |
${yyyymmdd-7} |
| 正確なスケジューリング時間 (秒単位) を参照する | $[...] |
$[yyyymmddhh24miss] |
| スケジューリング時間に時間または分を加算または減算する | $[...] |
$[hh24miss-1/24] |
| スケジューリング時間に月または年を加算または減算する | $[...] と add_months() |
$[add_months(yyyymmdd,-1)] |
${yyyymmdd}は$[yyyymmdd-1]と同等で、どちらもデータタイムスタンプを生成します。${...}フォーマットは日単位の精度のみです。時間または分レベルの精度が必要な場合は$[...]を使用してください。
${...} パラメーター (データタイムスタンプベース)
${...} パラメーターは、タスクのデータタイムスタンプを基準に時間を計算します。これらは yyyy、yy、mm、dd コンポーネントをサポートし、日、月、年の ±N 演算をサポートします。
精度:日単位のみ。時間、分、秒のコンポーネントはサポートされていません。
一般的なフォーマット
| オフセット | パラメーター |
|---|---|
| N 日前以降 | ${yyyymmdd±N} |
| N週前以降 | ${yyyymmdd±7*N} |
| N ヶ月前以降 | ${yyyymm±N} |
| N 年前以降 | ${yyyy±N} |
| N 年前または N 年後 (yy フォーマット) | ${yy±N} |
| カスタム日付区切り文字 | ${yyyy-mm-dd±N} |
| 月の初日 (文字列連結) | ${mm}01 |
月または年でオフセットするには、$[...]ではなく${yyyymm±N}または${yyyy±N}を使用してください。
$[...] パラメーター (スケジューリング時間ベース)
$[...] パラメーターは、タスクのスケジューリング時間を基準に時間を計算します。これらはすべての ${...} コンポーネントに加えて hh24、hh、mi、ss をサポートし、分数演算を使用して時間と分を表現します。
精度:秒。時間または分レベルの精度が必要な場合は、これらのパラメーターを使用してください。
時間と分の表記
$[...] フォーマットは、時間単位を 1 日の分数としてエンコードします:
| 単位 | 除数 | 意味 | 例 |
|---|---|---|---|
| 1 時間 | /24 |
1 日の 1/24 | $[hh24miss-1/24] — 1 時間前 |
| N 時間 | /24 |
1 日の N/24 | $[hh24miss-3/24] — 3 時間前 |
| 1 分 | /24/60 |
1 日の 1/(24x60) | $[hh24miss-1/24/60] — 1 分前 |
| N 分 | /24/60 |
1 日の N/(24x60) | $[hh24miss-15/24/60] — 15 分前 |
時間フィールドには、hh24 (24 時間表記) と hh (12 時間表記) の両方がサポートされています。
一般的なフォーマット
| オフセット | パラメーター |
|---|---|
| 正確なスケジューリング時間 | $[yyyymmddhh24miss] |
| N日前以降 | $[yyyymmdd±N] |
| N週間前以降 | $[yyyymmdd±7*N] |
| N 時間前以降 | $[hh24miss±N/24] または $[hh24±N/24] または $[カスタムフォーマット±N/24] |
| N 分前以降 | $[hh24miss±N/24/60] または $[yyyymmddhh24miss±N/24/60] または $[mi±N/24/60] |
| N ヶ月後 | $[add_months(yyyymmdd,N)] |
| N ヶ月前 | $[add_months(yyyymmdd,-N)] |
| N 年後 | $[add_months(yyyymmdd,12*N)] |
| N 年前 | $[add_months(yyyymmdd,-12*N)] |
| 前日1時間前 | $[yyyymmdd-1-1/24] |
$[...]では、年と月のオフセットに$[yyyy-N]と$[mm-N]はサポートされていません。代わりに$[add_months(...)]を使用してください。
日またぎ問題
タスクが深夜近くに実行され、時間または分レベルのパラメーターを使用する場合、計算された値が誤った日のパーティションを参照する可能性があります。たとえば、3 月 15 日の 00:00 にスケジュールされたタスクが 1 時間を減算すると 23:00 が生成されますが、yyyymmdd コンポーネントはどの日付に解決されるでしょうか?詳細とソリューションについては、「当日の 00:00 にノードのインスタンスを実行して、前日の 23:00 に対応するパーティションのデータを分析しますが、当日の 23:00 に対応するパーティションのデータが分析されてしまいます。どうすればよいですか?」をご参照ください。
組み込みパラメーター
DataWorks は以下の組み込みパラメーターを提供しています。柔軟性を高めるため、可能な限りカスタム時間パラメーターを代わりに使用してください。
| パラメーター | 値のフォーマット | 説明 |
|---|---|---|
$bizdate |
yyyymmdd |
データタイムスタンプ。${yyyymmdd} と同じです。デフォルト:スケジューリング時間マイナス 1 日。 |
$cyctime |
yyyymmddhh24miss |
スケジューリング時間。$[yyyymmddhh24miss] と同じです。 |
$gmtdate |
yyyymmdd |
現在の日付。データをバックフィルする場合、データタイムスタンプ + 1 日に設定します。 |
$bizmonth |
yyyymm |
データタイムスタンプからの月。データタイムスタンプが当月の場合、1 ヶ月前を返します。それ以外の場合は、データタイムスタンプの月を返します。 |
$jobid |
— | タスクが属するワークフローの ID。 |
$nodeid |
— | ノード ID。 |
$taskid |
— | タスクインスタンスの ID。 |
注意事項
-
Shell ノード:Shell ノードのスケジューリングパラメーターは、
$Nという異なるフォーマットを使用します。N は 1 から始まる整数です。${...}および$[...]フォーマットは適用されません。 -
定数:スケジューリングパラメーターに定数文字列を割り当てると、実行ごとに同じ値が渡されます。
-
ノードコード内の `${bizdate}`:ノードコード内の変数
${bizdate}には、特別な組み込みの意味はありません。これはカスタム変数名です。${Variable}フォーマットで定義し、[スケジューリングパラメーター] セクションでマッピングした変数はすべて同じように機能します。 -
夏時間:DataWorks は、タスクのスケジューリングに影響を与えることなく夏時間の移行を処理します。タスクが夏時間を採用しているリージョンで実行される場合は、「夏時間の切り替えがタスクの実行に与える影響」をご参照ください。
付録:サポートされている組み込みスケジューリングパラメーター
以下の組み込みパラメーターはノードコードで利用可能であり、スケジューリング構成で参照できます。
| パラメーター | 説明 |
|---|---|
${projectId} |
MaxCompute プロジェクトの ID。 |
${projectName} |
MaxCompute プロジェクトの名前。 |
${nodeId} |
ノード ID。 |
${gmtdate} |
インスタンスが実行されるようにスケジュールされた日付。yyyy-MM-dd 00:00:00 フォーマット。 |
${taskId} |
タスクインスタンス ID。 |
${seq} |
同日にスケジュールされたすべてのインスタンスの中でのタスクインスタンスのシーケンス番号。 |
${cyctime} |
インスタンスが実行されるようにスケジュールされた時間。 |
${status} |
インスタンスのステータス。有効な値:SUCCESS および FAILURE。 |
${bizdate} |
データタイムスタンプ。 |
${finishTime} |
インスタンスの実行が終了した時間。 |
${taskType} |
インスタンスが実行されるモード。有効な値:NORMAL、MANUAL、PAUSE、SKIP、UNCHOOSE、および SKIP_CYCLE。 |
${nodeName} |
ノードの名前。 |