ItemBatcher (Mapa) - AWS Step Functions

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

ItemBatcher (Mapa)

El ItemBatcher campo es un JSON objeto que especifica el procesamiento de un grupo de elementos en una sola ejecución de flujo de trabajo secundario. Utilice el procesamiento por lotes cuando procese CSV archivos o JSON matrices de gran tamaño, o conjuntos grandes de objetos de Amazon S3.

En el ejemplo siguiente se muestra la sintaxis del campo ItemBatcher. En la siguiente sintaxis, el número máximo de elementos que debe procesar cada ejecución de flujo de trabajo secundario se establece en 100.

{ "ItemBatcher": { "MaxItemsPerBatch": 100 } }

De forma predeterminada, cada elemento de un conjunto de datos se pasa como entrada a las ejecuciones individuales de los flujos de trabajo secundarios. Por ejemplo, supongamos que especifica un JSON archivo como entrada que contiene la siguiente matriz:

[ { "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" }, ... ]

Para la entrada dada, cada ejecución del flujo de trabajo secundario recibe un elemento de matriz como entrada. En el siguiente ejemplo, se muestra la entrada de la ejecución de un flujo de trabajo secundario:

{ "verdict": "true", "statement_date": "6/11/2008", "statement_source": "speech" }

Para ayudar a optimizar el rendimiento y el costo del trabajo de procesamiento, seleccione un tamaño de lote que equilibre la cantidad de elementos con el tiempo de procesamiento de los elementos. Si utiliza el procesamiento por lotes, Step Functions añade los elementos a una matriz de elementos. A continuación, pasa la matriz como entrada a cada ejecución del flujo de trabajo secundario. En el siguiente ejemplo se muestra un lote de dos elementos que se pasan como entrada a la ejecución de un flujo de trabajo secundario:

{ "Items": [ { "verdict": "true", "statement_date": "6/11/2008", "statement_source": "speech" }, { "verdict": "false", "statement_date": "6/7/2022", "statement_source": "television" } ] }
sugerencia

Para obtener más información sobre el uso del campo ItemBatcher en los flujos de trabajo, pruebe los siguientes tutoriales y talleres:

Campos para especificar el procesamiento por lotes de elementos

Para agrupar elementos, especifique el número máximo de elementos a agrupar, el tamaño máximo del lote o ambos. Debe especificar uno de estos valores para agrupar los elementos.

Número máximo de elementos por lote

Especifica el número máximo de elementos que procesa cada ejecución de flujo de trabajo secundario. El intérprete limita el número de elementos agrupados en la matriz Items a este valor. Si se especifica un número y un tamaño de lote, el intérprete reduce el número de elementos de un lote para evitar superar el límite de tamaño de lote especificado.

Si no se especifica este valor, pero se proporciona un valor para el tamaño máximo del lote, Step Functions procesa tantos elementos como sea posible en cada ejecución del flujo de trabajo secundario sin superar el tamaño máximo del lote en bytes.

Por ejemplo, imagine que ejecuta una ejecución con un JSON archivo de entrada que contiene 1130 nodos. Si se especifica un valor máximo de elementos para cada lote de 100, Step Functions crea 12 lotes. De estos, 11 lotes contienen 100 elementos cada uno, mientras que el duodécimo lote contiene los 30 elementos restantes.

También puede especificar el número máximo de elementos para cada lote como una ruta de referencia a un par clave-valor existente en la entrada de estado Map Distributed. Esta ruta debe convertirse en un número entero positivo.

Por ejemplo, en el caso de la entrada siguiente:

{ "maxBatchItems": 500 }

Puede especificar el número máximo de elementos que va a agrupar de la siguiente manera:

{ ... "Map": { "Type": "Map", "MaxConcurrency": 2000, "ItemBatcher": { "MaxItemsPerBatchPath": "$.maxBatchItems" } ... ... } }
importante

Puede especificar el subcampo MaxItemsPerBatch o MaxItemsPerBatchPath, pero no ambos.

Máximo KBs por lote

Especifica el tamaño máximo de un lote en bytes, hasta 256KBs. Si se especifica un número y un tamaño de lote máximos, Step Functions reduce el número de elementos de un lote para evitar superar el límite de tamaño de lote especificado.

También puede especificar el número máximo de elementos para cada lote como una ruta de referencia a un par clave-valor existente en la entrada de estado Map Distributed. Esta ruta debe convertirse en un número entero positivo.

nota

Si se utiliza el procesamiento por lotes y no se especifica un tamaño de lote máximo, el intérprete procesa tantos elementos como pueda procesar (hasta 256 KB) en cada ejecución del flujo de trabajo secundario.

Por ejemplo, en el caso de la entrada siguiente:

{ "batchSize": 131072 }

Puede especificar el tamaño máximo del lote mediante una ruta de referencia de la siguiente manera:

{ ... "Map": { "Type": "Map", "MaxConcurrency": 2000, "ItemBatcher": { "MaxInputBytesPerBatchPath": "$.batchSize" } ... ... } }
importante

Puede especificar el subcampo MaxInputBytesPerBatch o MaxInputBytesPerBatchPath, pero no ambos.

Entrada por lotes

Si lo desea, también puede especificar una JSON entrada fija para incluirla en cada lote que se pase a la ejecución de cada flujo de trabajo secundario. Step Functions fusiona esta entrada con la entrada de cada ejecución individual del flujo de trabajo secundario. Por ejemplo, dada la siguiente entrada fija de una fecha de verificación de datos en una serie de elementos:

"ItemBatcher": { "BatchInput": { "factCheck": "December 2022" } }

Cada ejecución de un flujo de trabajo secundario recibe lo siguiente como entrada:

{ "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" }, ... ] }