翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
SEQUENTIAL_EXECUTOR
どのようなときに使うか
は、一連の関数を一度に 1 つずつ順番にSEQUENTIAL_EXECUTOR実行します。各ステップは、その前のステップの結果を使用できます。
ロジックが相互に結果に依存する複数のステップを必要とするSEQUENTIAL_EXECUTOR場合に使用します。一般的なユースケースには、アイデンティティデータを取得し、それを使用して対象者セグメントを取得し、分類ステップを実行して、結果に基づいてさまざまな外部サービスを条件付きで呼び出し、複数のデータソースから複雑な広告リクエスト URLsを構築することが含まれます。
設定フィールド
SEQUENTIAL_EXECUTOR 関数には次のフィールドがあります。
-
ランタイム — 式言語。これを に設定します
JSONATA。 -
FunctionList — 1~10 ステップの順序付きリスト。各ステップでは、実行する関数
FunctionIdの を指定します。必要に応じて、ステップを実行するかスキップするかを制御するRunCondition式を追加できます。 -
出力 — すべてのステップの完了後に生成する値を定義します。各エントリは、シーケンス内の任意のステップによって生成されたデータを参照できる式に出力キー ( など
player_params.envelope) をマッピングします。省略すると、シーケンス内の個々の関数からのすべての出力が使用されます。 -
TimeoutMilliseconds (必須) — シーケンス全体が完了するまでの最大時間。シーケンスがこのタイムアウトを超えると、MediaTailor はシーケンスからのすべての出力を破棄します。
順序付けられた実行とデータフロー
MediaTailor は、最初から最後までの順序で各ステップを実行します。各ステップが完了すると、生成される値は実行中の結果のセットにマージされます。以降のステップでは、元のセッションデータと、前のステップで生成されたすべての値にアクセスできます。
一時データは、ステップ間でデータを渡すための主要なメカニズムです。関数がtemp.*キーに書き込むと、次のステップでその値を読み取ることができます。前のステップで書き込まれたプレイヤーパラメータと広告リクエストフィールドは、後のステップにも表示されます。
注記
一時データは、オブジェクトや配列を含む任意のデータ型を受け入れます。プレイヤーパラメータと広告リクエストフィールドは、文字列、数字、ブール値、null のみを受け入れます)。
ステップごとの実行条件
シーケンスの各ステップには、オプションの RunCondition フィールドがあります。このフィールドには、 trueまたは を返す式が含まれていますfalse。MediaTailor は、そのステップを実行する直前にRunCondition式を評価します。
RunCondition 式が と評価された場合false、MediaTailor はステップを完全にスキップし、次のステップに進みます。RunCondition フィールドを省略すると、ステップは常に実行されます。
{ "FunctionId": "retryFetch", "RunCondition": "{%temp.statusCode = 500%}" }
このメカニズムにより、条件付きパイプラインを構築できます。たとえば、ステップ 1 で ID フェッチを実行し、ステップ 1 が有効な ID を返した場合にのみ、条件付きでステップ 2 でセグメントルックアップを実行できます。
出力ブロックの仕組み
の出力ブロックは、すべてのステップが完了した後にシーケンスが生成する内容SEQUENTIAL_EXECUTORを制御します。
-
出力ブロックが存在する — MediaTailor は、出力ブロック内の式を最終的な累積状態と照らし合わせて評価し、それらの出力のみを保存します。シーケンシャル出力ブロックで参照されていない、前のステップで生成された出力は破棄されます。
-
出力ブロックなし — MediaTailor は、すべてのステップから蓄積されたすべての出力を直接保存します。
ヒント
すべての関数の出力を渡す場合は、出力ブロックを省略します。保存する前に累積された結果をフィルタリング、名前変更、または変換する必要がある場合は、出力ブロックを追加します。
タイムアウト設定
TimeoutMilliseconds フィールドは、シーケンス全体の期限を設定します。このタイムアウトは、 関数によって行われた HTTP 呼び出しを含むすべてのステップをカバーします。シーケンスがタイムアウトを超えると、MediaTailor はシーケンスからのすべての出力を破棄し、関数がアタッチされていないかのように続行します。
個々のHTTP_REQUEST関数は、引き続き独自のRequestTimeoutMilliseconds設定を尊重します。シーケンスタイムアウトは、合計実行時間を制限する外部境界として機能します。
例: HTTP での再試行の失敗
この例では、ID API を呼び出し、最初の呼び出しがサーバーエラーを返すと自動的に再試行します。SEQUENTIAL_EXECUTOR によってオーケストレーションされた 2 つの HTTP_REQUEST 関数を使用します。
ステップ 1 — プライマリフェッチ (fetchIdentity):
{ "FunctionId": "fetchIdentity", "FunctionType": "HTTP_REQUEST", "HttpRequestConfiguration": { "Runtime": "JSONATA", "MethodType": "GET", "Url": "{%'https://identity.example.com/v1/resolve?ip=' & session.client_ip%}", "Headers": { "Accept": "application/json" }, "RequestTimeoutMilliseconds": 1000, "Output": { "temp.statusCode": "{%response.statusCode%}", "temp.envelope": "{%response.statusCode = 200 ? response.body.envelope : null%}" } } }
ステップ 2 — 失敗時に再試行する (retryIdentity):
{ "FunctionId": "retryIdentity", "FunctionType": "HTTP_REQUEST", "HttpRequestConfiguration": { "Runtime": "JSONATA", "MethodType": "GET", "Url": "{%'https://identity-fallback.example.com/v1/resolve?ip=' & session.client_ip%}", "Headers": { "Accept": "application/json" }, "RequestTimeoutMilliseconds": 1000, "Output": { "temp.statusCode": "{%response.statusCode%}", "temp.envelope": "{%response.statusCode = 200 ? response.body.envelope : null%}" } } }
シーケンス (identityWithRetry):
{ "FunctionId": "identityWithRetry", "FunctionType": "SEQUENTIAL_EXECUTOR", "SequentialExecutorConfiguration": { "Runtime": "JSONATA", "TimeoutMilliseconds": 2000, "FunctionList": [ { "FunctionId": "fetchIdentity" }, { "FunctionId": "retryIdentity", "RunCondition": "{%temp.statusCode >= 500%}" } ], "Output": { "player_params.envelope": "{%temp.envelope%}" } } }
仕組み:
-
fetchIdentityは ID API を呼び出し、ステータスコードとエンベロープを に書き込みますtemp.*。 -
ステータスコードが 500 以上の場合、ステップ 2
RunConditionの は と評価trueされ、retryIdentity実行されます。再試行レスポンスtemp.envelopeでtemp.statusCodeと が上書きされます。 -
最初の呼び出しが成功すると、ステップ 2 はスキップされます。
-
シーケンス出力ブロックは
temp.envelopeに書き込みますplayer_params.envelope。