すべてのプロダクト
Search
ドキュメントセンター

DataWorks:スケジューリングパラメーター

最終更新日:Jun 22, 2026

このトピックでは、スケジューリングパラメーターに関するよくある質問とその回答を記載します。

前時間のデータを取得する際の日またぎパラメーター置換の処理方法

  • 問題の説明

    テーブルパーティションのフォーマットは day=yyyymmdd,hour=hh24 です。実行時に、時間は前の時間のデータを取得します。パラメーター $[yyyymmdd] $[hh24-1/24] はこの要件を満たせますが、深夜 00:00 になると、時間が当日の 23:00 になってしまいます。これをどのように処理すればよいですか。

  • 解決策

    パラメーターの計算式を変更することで対応できます。datetime$[yyyymmdd-1/24] に設定します。hour の計算式は $[hh24-1/24] のままです。

    設定の説明

    • コードで、day=datetime, hour={hour}, を設定します。

    • ノードのスケジューリングパラメーターを割り当てます:datetime=[yyyymmdd-1/24],hour=[hh24-1/24]

    • インスタンスのスケジュール時刻が 2021-7-21 00:00:00 の場合、1 時間を引くと前日になります。この場合、$[yyyymmdd-1/24]20210720 と評価され、$[hh24-1/24]23 と評価されます。

    • インスタンスのスケジュール時刻が 2021-7-21 01:00:00 の場合、1 時間を引いても当日のままです。この場合、$[yyyymmdd-1/24]20210721 と評価され、$[hh24-1/24]00 と評価されます。

pt=yyyy-mm-dd hh24:mi:ss のように、テーブルパーティションのフォーマットにスペースが含まれる場合の処理方法

重要

スケジューリングパラメーターの割り当ては、スペースに対応していません。

以下のように、2 つのカスタム変数を使用して割り当てることができます:

  • 日付:パラメーター datetime=$[yyyy-mm-dd]

  • 時刻:パラメーター hour=$[hh24:mi:ss]

日付と時刻を別々に取得した後、コード内でスペースを使って pt=${datetime} ${hour} のように連結します。たとえば、SQL コードで select * from xc_demo_partition where dt='${key1} ${key2}'; を使用し、右側の [スケジュール設定] > [パラメーター]key1=$[yyyymmdd] key2=$[hh24miss] を設定します。

ノードが 20:00 に実行されるようにスケジュールされ、そのパラメーターがスケジュール時刻 ($cyctime または $[yyyymmddhh24miss]) を参照している場合に、上流の障害が原因でノードが翌日の 00:00 に実際に実行された場合、スケジューリングパラメーターにはどの時刻が使用されますか。

インスタンスのスケジュール時刻は、期待される実行時刻と理解することができます。タスクはリソースの待機などの理由で遅延することがあるため、スケジュール時刻は実際の実行時刻と異なる場合があります。インスタンスのスケジュール時刻は絶対的なものであり、実際の実行時刻によって変更されることはありません。

スケジューリングパラメーターは、インスタンスのスケジュール時刻を使用します。スケジューリングパラメーターの置換値はインスタンスが生成されるときに決定され、実際の実行時刻によって変更されることはありません。したがって、スケジューリングパラメーターの値が変更されるかどうかを心配する必要はありません。[オペレーションセンター] > [定期インスタンス] ページで、[プロパティ] パネルの [スケジュール時刻] フィールドには、インスタンスの期待される実行時刻 (例:2021-07-13 00:00:00) が表示されます。これを [開始時刻] (例:00:00:27) と比較して確認できます。[Data Studio] ページで、[スケジュール設定] > [パラメーター]var1=$bizdate var2=$cyctime var3=$[yyyymmdd] var4=$[yyyymmddhh24miss] を設定します。[スケジュール][日] に、[スケジュール時刻]00:00 に設定します。コードで select '${var1}' '${var2}'; を使用して、ビジネス日付とスケジュール時刻の値をそれぞれ確認します。

ODPS Spark ノードの時間パラメーターの設定方法

ODPS Spark ノードを作成する際、編集ページでパラメーターを設定する必要があります。システムは設定された順序でパラメーターを実行します。

コードで変数を設定した後、編集ページの右側にある [スケジュール設定] をクリックし、パラメーターパネルで変数に値を割り当てます。スケジューリングパラメーターの詳細については、「スケジューリングパラメーターの設定」をご参照ください。たとえば、ODPS Spark ノードの [パラメーター] フィールドに $(var) を入力し、パラメーターテーブルにパラメーター名 var とパラメーター値 $bizdate の行を追加し、[パラメーターのプレビュー] をクリックして置換結果を確認します。

スケジューリングパラメーターを直接処理できないノードで、そのパラメーターを使用する方法

バッチ同期ノードなど一部のノードでは、パラメーターを設定してもスケジューリングパラメーターの戻り値を直接使用できません。これらのノードに対しては、対象ノードの上流ノードとして代入ノードを設定することができます。代入ノードはスケジューリングパラメーターを参照し、戻り値を処理・変換した後、ノードコンテキスト機能を通じて最終的なパラメーター値を下流の対象ノードに渡します。

基本概念

  • MaxCompute の日付関数を直接使用して時刻の値を取得する場合、戻り値は計算タスクを実行するマシンの表示時刻になります。同じインスタンスが異なる時刻に実行されると、返される時刻も変わります。

  • スケジューリングパラメーターを使用して時刻の値を取得する場合、戻り値はスケジュール時刻に基づいて計算されます。同じインスタンスがいつ実行されても、返される時刻は変わりません。

Data Studio でスケジューリングパラメーターをテストする方法

スケジューリングパラメーターはスケジューリングシステムによってのみ自動的に置換されるため、Data Studio でスケジューリングパラメーターの置換をテストしたい場合は、[開発環境でのスモークテストの実行] を使用できます。

説明

データ統合タスクは開発環境でのテストをサポートしていないため、このようなタスクのスケジューリングパラメーター置換をテストしたい場合は、SQL ノードを作成し、開発環境でのスモークテストを使用してスケジューリングパラメーターを個別にテストし、結果が期待通りであることを確認した後にデータ統合ノードでパラメーターを使用することを推奨します。

FAILED: ODPS-0130161:[1,84] Parse exception - invalid token '$' エラー

原因:スケジューリングパラメーターに値が割り当てられていないか、割り当てが無効です。

解決策

  1. スケジューリングパラメーターに値が割り当てられているか確認してください。

  2. 設定されたスケジューリングパラメーターが要件を満たしているか確認してください。詳細については、「スケジューリングパラメーターの設定」をご参照ください。

重要

パラメーター設定を変更した後は、変更を送信してデプロイする必要があります。デプロイ後、本番環境のオペレーションセンターで定期タスクのプロパティパネルを確認し、パラメーターが最新の設定を反映していることを確認してください。

params format error,please check your params(key=values)

解決策:

  1. 変数に値が割り当てられているか確認してください。

  2. スケジューリングパラメーターに余分なスペースがないか確認してください。

  3. ノード名では、ピリオド (.) と中国語文字を一緒に使用することはできません。

例: time①=②$[yyyymmdd③hh24:mi:ss]time1=$[yyyymmdd]④time2=$[hh24:mi:ss] (①②③④ はスペースの位置を示します)。

  • スケジューリングパラメーターの等号 (=) の両側にスペースを入れることはできません。これは、例の ① と ② の位置に該当します。

  • スケジューリングパラメーターの値にスペースはサポートされていません。これは、例の ③ の位置に該当します。

  • 2 つのスケジューリングパラメーターは、1 つのスペースで区切る必要があります。これは、例の ④ の位置に該当します。

基本概念

操作

説明

実行

最初の実行後、変数に手動で定数値を割り当てる必要があります。最初の割り当てが記録されます。コードを変更しても、変数は最初の実行時に割り当てられた値を引き続き使用します。

パラメーターを指定して実行

[パラメーターを指定して実行] を使用する場合、現在のコード内の変数に手動で定数値を割り当てる必要があります。コード内の変数を変更した場合は、[パラメーターを指定して実行] を使用して定数値を再割り当てします。

説明

タスク実行のリソースグループを変更したい場合は、[パラメーターを指定して実行] を使用してください。

開発環境でのスモークテストの実行

このモードは、手動でビジネス日付を選択して、指定されたビジネス日付のスケジューリングパラメーターの置換値を取得することにより、自動スケジューリングシナリオをシミュレートします。

[Data Studio] ページのコードエディタでは、組み込みのシステム変数 (例:${bdp.system.cyctime}) またはカスタム変数 (例:${var1}) を使用できます。右側の [スケジュール設定] > [パラメーター] パネルで変数に値を割り当てます (例:var1=$bizdate)。[実行] または [パラメーターを指定して実行] を使用すると、システムが自動的に値を置換します。[開発環境でのスモークテストの実行] を使用する場合は、上部のツールバーからビジネス日付を選択して、スケジューリングシナリオをシミュレートします。

本番環境でパラメーター置換を確認する方法

Data Studio でスケジューリングパラメーターを変更し、変更を送信してデプロイした場合、本番環境のオペレーションセンターで定期タスクのプロパティパネルを確認し、スケジューリングパラメーターが期待通りであるかを確認してください。期待通りでない場合は、タスクのデプロイメントページとデプロイメントパッケージを確認し、デプロイメントが成功したかを確認してください。特定のインスタンスのスケジューリングパラメーター置換を表示するには、定期インスタンスのプロパティパネルを確認します。

重要

個々のインスタンスが実行されたかどうかに関わらず、インスタンスの実行パラメーターは、本番環境の定期タスクの最新のパラメーター設定を反映するようにリアルタイムで更新されます。

例:

  • ノード A の当日定期インスタンス A1 のスケジューリングパラメーター time1$bizdate に設定されています。インスタンスは正常に実行され、コード内のパラメーター値は bizdate のビジネス日付 (特定の値) です。

  • 日中のある時点で、スケジューリングパラメーター time1$bizdate から $cyctime に変更されます。すると、当日のインスタンスの実行パラメーターには cyctime のスケジュール時刻 (特定の値) が表示されます。

  • 現在のインスタンスを再実行すると、最新のパラメーター設定である time1=$cyctime が使用されます。

  • スケジューリングパラメーターが変更される前にインスタンスが使用したスケジューリングパラメーター置換を表示するには、ログを確認してください。詳細については、よくある質問:「ログを使用して実行中のインスタンスのパラメーター置換を確認する方法」をご参照ください。

[オペレーションセンター] > [定期インスタンス] ページで、インスタンスを選択し、下部の [プロパティ] パネルの [実行パラメーター] フィールドでスケジューリングパラメーターの実際の置換値 (例:var1=20210708233000 var2=20210709000000) を表示して、パラメーターが期待通りに更新されているかを確認します。

ログを使用して実行中のインスタンスのパラメーター置換を確認する方法

コード内で、キーワード SKYNET_PARAVALUE を探します。

07-09 00:00:19  INFO SKYNET_RERUN_MODE=1:
07-09 00:00:19  INFO SKYNET_FLOW_PARAVALUE=:
07-09 00:00:19  INFO SKYNET_ONDUTY=xxx:
07-09 00:00:19  INFO SKYNET_SYSTEMID=:
07-09 00:00:19  INFO CALC_ENGINE_IDENTIFIER=xxx:
07-09 00:00:19  INFO SKYNET_SOURCEID=xxx:
07-09 00:00:19  INFO SKYNET_PARAVALUE=var1=20210708233000 var2=20210709000000:
07-09 00:00:19  INFO SKYNET_TASKID=xxx:
07-09 00:00:19  INFO SKYNET_TENANT_ID=283789484710656:
07-09 00:00:19  INFO SKYNET_ID=700003341088:
07-09 00:00:19  INFO SKYNET_JOBID=700200619122:
07-09 00:00:19  INFO SKYNET_NODENAME=xc_partition_copy:
07-09 00:00:19  INFO SKYNET_CYCTYPE=0:
07-09 00:00:19  INFO SKYNET_DSC_JOB_VERSION=1:
07-09 00:00:19  INFO SKYNET_TASK_INPUT={}:
07-09 00:00:19  INFO SKYNET_FLOWNAME=ATCLOUD_FLOW:
07-09 00:00:19  INFO FILE_ID=700003341088:

スケジューリングパラメーターのタイムゾーンを定義する方法

夏時間 (DST) は、インスタンスの生成とパラメーターパーティションの計算でサポートされており、DST が開始および終了する日に正しい実行が保証されます。以下に米国太平洋時間を例として示します:

  • DST が開始する日には、23 個のインスタンスが生成されます。その日の 03:00 の 10 分前にシフトすると 01:50 になります。DST が開始する日の 02:00 にスケジュールされたタスクはドライランされます。

  • DST が終了する日には、24 個のインスタンスが生成されます。その日の 03:00 の 10 分前にシフトすると 02:50 になります。

DST が開始する日の日次、週次、月次の定期ノードについて、設定された実行時刻がスキップされる時間帯に該当する場合、その日に生成されるインスタンスの実行時刻は、その日の 00:00 に設定されます。

ノードのスケジューリングパラメーターが設定、送信、デプロイされたが、戻り値が変更されない

スケジューリングパラメーターが、同じ名前のワークフローパラメーターによって上書きされていないか確認してください。トラブルシューティングの詳細については、「ワークフローパラメーターの確認」をご参照ください。

同じ名前のワークフローパラメーターが存在し、不要な場合は削除してください。ワークフローパラメーターを保持する必要がある場合は、ノードのスケジューリングパラメーターの名前を変更してください。