ItemBatcher (Map)
ステートの管理とデータの変換
変数を使用したステート間のデータ受け渡しと JSONata を使用したデータ変換について説明します。
ItemBatcher フィールドは JSON オブジェクトで、単一の子ワークフロー実行で項目のグループを処理するように指定します。大きな CSV ファイルや JSON 配列、または大量の Amazon S3 オブジェクトのセットを処理する場合は、バッチ処理を使用してください。
次の例は、ItemBatcher フィールドの構文を示しています。次の構文では、子ワークフローを実行するたびに処理すべき項目の最大数が 100 に設定されています。
{
"ItemBatcher": {
"MaxItemsPerBatch": 100
}
}デフォルトでは、データセット内の各項目が個々の子ワークフロー実行への入力として渡されます。例えば、次の配列を含む JSON ファイルを入力として指定するとします。
[
{
"verdict": "true",
"statement_date": "6/11/2008",
"statement_source": "speech"
},
{
"verdict": "false",
"statement_date": "6/7/2022",
"statement_source": "television"
},
{
"verdict": "true",
"statement_date": "5/18/2016",
"statement_source": "news"
},
...
]所定の入力があると、子ワークフロー実行はそれぞれ配列項目を入力として受け取ります。次の例は、子ワークフロー実行の入力を示しています。
{
"verdict": "true",
"statement_date": "6/11/2008",
"statement_source": "speech"
}処理ジョブのパフォーマンスとコストを最適化するには、アイテムの数とアイテムの処理時間のバランスを取るバッチサイズを選択してください。バッチ処理を使用する場合、Step Functions は [項目] 配列に項目を追加します。次に、その配列を各子ワークフロー実行に入力として渡します。次の例は、子ワークフロー実行の入力として渡された 2 つの項目のバッチを示しています。
{
"Items": [
{
"verdict": "true",
"statement_date": "6/11/2008",
"statement_source": "speech"
},
{
"verdict": "false",
"statement_date": "6/7/2022",
"statement_source": "television"
}
]
}ヒント
ワークフローでの ItemBatcher フィールドの使用方法の詳細については、以下のチュートリアルとワークショップを試してみてください。
「AWS Step Functions ワークショップ」の「分散マップと関連リソース
」
項目のバッチ処理を指定するフィールド
項目をバッチ処理するには、バッチ処理する項目の最大数、最大バッチサイズ、またはその両方を指定します。バッチ項目には、次のいずれかの値を指定する必要があります。
- バッチあたりの最大項目数
子ワークフロー実行ごとに処理する項目の最大数を指定します。インタープリタは、
Items配列内でバッチ処理される項目数をこの値に制限します。バッチ番号とサイズの両方を指定すると、インタープリタは指定されたバッチサイズ制限を超えないようにバッチ内の項目数を減らします。この値を指定せずに最大バッチサイズの値を指定した場合、Step Functions は、バイト単位の最大バッチサイズを超えずに、子ワークフロー実行ごとにできるだけ多くの項目を処理します。
例えば、1130 個のノードを含む入力 JSON ファイルを持つ実行ファイルを実行するとします。各バッチの最大項目値を 100 に指定すると、Step Functions は 12 のバッチを作成します。このうち、11 個のバッチにはそれぞれ 100 個のアイテムが含まれ、12 番目のバッチには残りの 30 個のアイテムが含まれます。
または、分散マップ状態入力の既存のキーと値のペアへの参照パスとして、各バッチの最大項目数を指定することもできます。このパスは正の整数に変換する必要があります。
例として、次の入力があるとします。
{"maxBatchItems":500}バッチ処理する項目の最大数は、次のように参照パス (JSONPath のみ) を使用して指定できます。
{ ... "Map": { "Type": "Map", "MaxConcurrency": 2000, "ItemBatcher": {"MaxItemsPerBatchPath":"$.maxBatchItems"} ... ... } }JSONata ベースのステートでは、正の整数に評価される JSONata 式を指定することもできます。
重要
MaxItemsPerBatchまたはMaxItemsPerBatchPath (JSONPath only)サブフィールドのいずれかを指定できますが、両方を指定することはできません。- バッチあたりの最大 KiB
バッチの最大値を 256 KiB までのバイト値で指定します。最大バッチ番号とサイズの両方を指定すると、Step Functions は指定されたバッチサイズ制限を超えないようにバッチ内の項目数を減らします。
または、分散マップ状態入力の既存のキーと値のペアへの参照パスとして、最大バッチサイズを指定することもできます。このパスは正の整数に変換する必要があります。
注記
バッチ処理を使用する場合、最大バッチサイズを指定しないと、子ワークフロー実行ごとに、インタープリタは最大 256 KiB まで、できる限り多くの項目を処理します。
例として、次の入力があるとします。
{"batchSize":131072}次のように、参照パスを使用して最大バッチサイズを指定できます。
{ ... "Map": { "Type": "Map", "MaxConcurrency": 2000, "ItemBatcher": {"MaxInputBytesPerBatchPath":"$.batchSize"} ... ... } }JSONata ベースのステートでは、正の整数に評価される JSONata 式を指定することもできます。
重要
MaxInputBytesPerBatchまたはMaxInputBytesPerBatchPath(JSONPath のみ) サブフィールドのいずれかを指定できますが、両方を指定することはできません。- バッチ入力
オプションで、各子ワークフロー実行に渡される各バッチに含める固定 JSON 入力を指定することもできます。Step Functions は、この入力を個々の子ワークフロー実行の入力とマージします。例えば、項目の配列のファクトチェック日を次の固定入力にするとします。
"ItemBatcher": {"BatchInput": {"factCheck":"December 2022"} }子ワークフローの実行ごとに、入力として以下のものを受け取ります。
{ "BatchInput": { "factCheck": "December 2022" }, "Items": [ { "verdict": "true", "statement_date": "6/11/2008", "statement_source": "speech" }, { "verdict": "false", "statement_date": "6/7/2022", "statement_source": "television" }, ... ] }JSONata ベース のステートでは、JSONata 式を BatchInput に直接指定するか、JSON オブジェクトまたは配列内で JSONata 式を使用できます。