転送元HTTP・HTTPSやカスタムコネクタの場合、以下のようなステップでデータ取得を行うケースがあります。
タスク1: レポート作成APIを実行
タスク2: レポートの作成ステータスを確認(ポーリング)
タスク3: 完成したレポートを取得
この際、レポート作成(タスク1)には時間がかかることが多く、即座にタスク3を実行すると「レポート未完成」のため、転送レコードが0件で実行が終了してしまうことがあります。TROCCOのワークフロー上に以下のようなタスクを追加することで「ステータス待ち(ポーリング処理)」を実現可能です。
パターン1:データチェックと条件分岐でリトライ構造を作る
APIのステータスが「完了」になるまで、複数回確認を繰り返す構成です。
仕組み
データチェックタスク: APIレスポンス内のステータスを確認(タスク2)し、ステータスが完了なら「1」、未完了なら「0」を返すよう設定します。
条件分岐タスク:
True(1の場合): 次のステップ(タスク3)へ進む。
False(0の場合): ステータス確認(タスク2)へ戻る設定にする。
※TROCCOのワークフロー上でタスクのループはできないため、想定されるリトライ回数分、確認タスクを数珠つなぎに配置します。
パターン2:データマート(SQL)で一定時間スリープさせる
レポート作成にかかる時間が概ね一定(例:常に1分以内に完了する)場合に有効な、最もシンプルな方法です。
仕組み
タスク1とタスク3の間に、「SQLで待機処理を行うデータマートタスク」を配置します。
設定方法: データマート定義で「自由記述モード」を選択する。
実行内容: DWH(BigQueryなど)の関数を使い、指定した秒数(例:60秒)だけ処理をスリープさせるクエリを実行する
BigQueryでの待機クエリ例
-- 60秒間待機してから終了する処理
DECLARE DELAY_TIME DATETIME;
DECLARE WAIT BOOL;
BEGIN
SET WAIT = TRUE;
SET DELAY_TIME = DATE_ADD(CURRENT_DATETIME, INTERVAL 60 SECOND);
WHILE WAIT DO
IF (DELAY_TIME < CURRENT_DATETIME) THEN SET WAIT = FALSE;
END IF;
END WHILE;
ENDどちらを選ぶべきか
| 手法 | メリット | デメリット |
|---|---|---|
| パターン1 (条件分岐する) | 完了次第すぐに次へ進むため、無駄な待ち時間がない | ワークフローに含めるタスクが多くなる |
| パターン2 (スリープさせる) | 設定が非常にシンプル | 早くレポート作成が終わってもスリープの指定時間は必ず待機してしまう |
レポートの作成完了までの時間が一定である場合は、設定が容易な「パターン2(待機処理)」の選択をお勧めします。
コメント
0件のコメント
記事コメントは受け付けていません。