履歴データのバックフィルには通常、同じ SQL クエリを毎日実行するループが必要であり、これによりすべてのパイプラインにオーケストレーション ロジックが追加されます。タイムウィンドウ SQL はこのループを不要にします。指定された日付範囲内の各日に対して同じ SQL クエリを並行して実行し、日付ごとに 1 つのサブタスクを自動的に生成します。一般的なユースケースとしては、レコメンデーション エンジンをバックフィルするために、過去 7 日間の日次特徴量データを抽出するケースがあります。
仕組み
タイムウィンドウ SQL を使用してパイプラインを実行すると、コンポーネントは実行タイムウィンドウ内の日付ごとに 1 つのサブタスクを生成します。各サブタスクは同じ SQL スクリプトを受け取りますが、システム変数 ${pai.system.cycledate} は、各サブタスクに対して異なるデータ日付に解決されます。これは、サブタスクが実際に実行される時間ではなく、サブタスクが処理するデータの対象日付を指します。
たとえば、[業務基準日] を 20230210、[実行タイムウィンドウ] を (-4,-2],0 とした場合、3 つのサブタスクが並列で実行されます。
| サブタスク | ${pai.system.cycledate} (フォーマット yyyyMMdd) | 処理されたデータ |
|---|---|---|
| 1 | 20230207 | 2023 年 2 月 7 日 |
| 2 | 20230208 | 2023年2月8日 |
| 3 | 20230210 | 2023 年 2 月 10 日 |
2 月 9 日 (オフセット -1) は含まれません。これは、ウィンドウ (-4,-2] がオフセット -4 から -2 (右側を含む) をカバーし、0 が基準日自体を追加するためです。
制限事項
複数日付ループ実行は、日レベルのデータ バックフィルのみをサポートしています。より細かい間隔 (時間単位、週単位) はサポートされていません。
本番環境でパイプラインをスケジュールするために定期的なスケジュール設定を使用する前に、複数日付ループ実行を無効にしてください。有効のままにすると、コンポーネントはスケジュールされた実行ごとに余分なバックフィル サブタスクを生成します。
「同時実行数の最大値」設定は、パラメーター設定タブで設定されたノードにのみ適用されます。パイプラインに複数のタイムウィンドウ SQL ノードが含まれる場合、プロジェクトのリソースでサポートされる同時実行数の合計を考慮する必要があります。
注意事項
タイムウィンドウ SQL は最大 4 つの入力を受け入れ、1 つの出力を生成します。以下の点に留意してください。
入力変数と出力変数
アップストリーム コンポーネントをタイムウィンドウ SQL に接続すると、選択した入力ポートによって、その入力テーブルにマッピングされる変数名が決まります。SQL スクリプトで入力テーブルを参照するには、${t1}、${t2}、${t3}、および ${t4} を使用します。出力テーブルを参照するには、${o1} を使用します。
ライフサイクル変数
SQL スクリプトで ${lifecycle} を使用すると、ワークスペース内の一時テーブルのライフサイクル設定を取得できます。 デフォルトは 28 日です。 この値を変更するには、「ワークスペースの管理」をご参照ください。
Machine Learning Designer でのコンポーネント設定
パイプラインを ビジュアルモデリング で開き、以下のパラメーターを設定します。
| パラメーター | 説明 |
|---|---|
| ビジネス基準日 | タイムウィンドウのアンカー日付です。日付を直接入力します(例:20230210)か、グローバル変数を参照します。詳細については、「グローバル変数」をご参照ください。 |
| 複数日付ループ実行を有効にするか | デフォルトで有効になっています。無効にすると、コンポーネントはSQL スクリプトコンポーネントと同じ動作をし、単一の SQL 実行を実施します。 |
| 実行タイムウィンドウ | 事業基準日 に対するオフセットとして表現される、処理する日付を指定します。整数と半開区間をコンマ区切りで受け入れます。システムは日付ごとに 1 つのサブタスクを生成します。パイプライン実行ごとに最大 100 個のサブタスクを実行できます。詳細については、以下の「タイムウィンドウの構文」をご参照ください。 |
| 最大同時実行数 | 同時に実行されるサブタスクの最大数。リソース競合を避けるために、この値を低く保ってください。 |
| 日付フォーマット | ${pai.system.cycledate} のフォーマットを制御します。オプション: yyyyMMdd (デフォルト)、yyyy-MM-dd、yyyy/MM/dd。 |
| システムが CREATE TABLE ステートメントを追加するか | 有効にすると、SQL スクリプトの最後のステートメントは SELECT ステートメントである必要があります。システムは結果を保存するための一時テーブルを自動的に作成します。無効にすると、SQL で出力テーブル ${o1} を明示的に作成します。 |
| SQL スクリプト | 各日付に対して実行する SQL クエリ。データ日付が必要な場所では ${pai.system.cycledate} を使用します。その他の変数 (${t1}~${t4}、${o1}、${lifecycle}) も利用可能です。 |
タイムウィンドウの構文
[実行タイムウィンドウ] の値は、ビジネス基準日を基準としたオフセットと半開区間のカンマ区切りのリストです。正の整数は未来のオフセットを表し、負の整数は過去のオフセットを表します。
| 構文 | 意味 | 生成される日付 (基準日: 20230210) |
|---|---|---|
(-4,-2],0 | 3 日前~2 日前、および基準日 | 20230207、20230208、20230210 |
括弧の参照:
[/]— 包含境界(/)— 排他境界
SQL スクリプトの例
[ビジネス基準日] 20230210、[実行タイムウィンドウ] (-4,-2],0、および[日付フォーマット] yyyy-MM-dd を指定すると、以下の SQL スクリプトが 3 回実行されます。
SELECT * FROM ${t1} WHERE dt = ${pai.system.cycledate}3 つのサブタスクは次のように実行されます。
-- Subtask 1
SELECT * FROM ${t1} WHERE dt = 2023-02-07
-- Subtask 2
SELECT * FROM ${t1} WHERE dt = 2023-02-08
-- Subtask 3
SELECT * FROM ${t1} WHERE dt = 2023-02-10ヒント:フル実行の前にタイムウィンドウの構成を検証するには、[実行タイムウィンドウ] を 0 (基準日のみ) に設定します。これにより、単一のサブタスクが実行されるため、完全な日付範囲を処理することなく SQL ロジックと変数の置換を検証できます。次のステップ
SQL スクリプト — 日付ループなしで単一の SQL 実行を実行する
グローバル変数 — パイプライン ノード間で共有される値を参照します。
ワークスペースの管理 — 一時テーブルのライフサイクル設定を構成します