

# Convertir cadenas de ID de versión vacías de informes de Amazon S3 Inventory en cadenas nulas
<a name="inventory-configure-bops"></a>

**nota**  
**El siguiente procedimiento se aplica únicamente a los informes de Amazon S3 Inventory que incluyen todas las versiones, y solo si los informes de “todas las versiones” se utilizan como manifiestos para S3 Batch Operations en buckets que tienen habilitado S3 Versioning.** No es necesario convertir cadenas para los informes de S3 Inventory que especifican únicamente la versión actual.

Puede utilizar informes de S3 Inventory como manifiestos para S3 Batch Operations. Sin embargo, cuando está habilitado S3 Versioning en un bucket, los informes de S3 Inventory que incluyen todas las versiones marcan cualquier objeto con versión nula con cadenas vacías en el campo ID de versión. Cuando un informe de inventario incluye todos los ID de versión de objeto, Batch Operations reconoce cadenas `null` como ID de versión, pero no cadenas vacías. 

Cuando un trabajo de S3 Batch Operations utiliza un informe de S3 Inventory de “todas las versiones” como manifiesto, falla en todas las tareas de los objetos que tienen una cadena vacía en el campo ID de versión. Para convertir cadenas vacías en el campo ID de versión del informe de S3 Inventory en cadenas `null` para Batch Operations, utilice el siguiente procedimiento.

**Actualice un informe de Amazon S3 Inventory para utilizarlo con Batch Operations**

1. Inicie sesión en la Consola de administración de AWS y abra la consola de Amazon S3 en [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/).

1. Desplácese hasta el informe de S3 Inventory. El informe de inventario se encuentra en el bucket de destino que especificó al configurar el informe de inventario. Para obtener más información sobre la localización de los informes de inventario, consulte [Localizar la descripción del inventario](storage-inventory-location.md).

   1. Elija el del bucket de destino.

   1. Elija la carpeta . La carpeta lleva el nombre original del bucket de origen.

   1. Elija la carpeta que lleva el nombre de la configuración del inventario.

   1. Seleccione la casilla de verificación que se encuentra junto a la carpeta denominada **hive**. En la parte superior de la página, elija **Copy S3 URI** (Copiar URI de S3) para copiar el URI de la carpeta.

1. Abra la consola de Amazon Athena en [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home). 

1. En el editor de consultas, elija **Settings** (Configuración) y, a continuación, **Manage** (Administrar). En la página **Manage settings** (Administrar la configuración), en **Location of query result** (Ubicación del resultado de la consulta), elija un bucket de S3 en el cual almacenar los resultados de la consulta.

1. En el editor de consultas, cree una tabla de Athena para almacenar los datos del informe de inventario mediante el siguiente comando. Reemplace `{{table_name}}` con el nombre de su elección, y en la cláusula `LOCATION`, inserte el URI de S3 que copió anteriormente. A continuación, elija **Run** (Ejecutar) para ejecutar la consulta.

   ```
   CREATE EXTERNAL TABLE {{table_name}}(bucket string, key string, version_id string) PARTITIONED BY (dt string)ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'STORED AS INPUTFORMAT 'org.apache.hadoop.hive.ql.io.SymlinkTextInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.IgnoreKeyTextOutputFormat' LOCATION '{{Copied S3 URI}}';
   ```

1. Para borrar el editor de consultas, elija **Clear** (Borrar). A continuación, cargue el informe de inventario en la tabla mediante el siguiente comando. Reemplace `{{table_name}}` con el que eligió en el paso anterior. A continuación, elija **Run** (Ejecutar) para ejecutar la consulta.

   ```
   MSCK REPAIR TABLE {{table_name}};
   ```

1. Para borrar el editor de consultas, elija **Clear** (Borrar). Ejecute la siguiente consulta `SELECT` para recuperar todas las entradas del informe de inventario original y reemplazar los ID de versión vacíos por cadenas `null`. Reemplace `{{table_name}}` por el que eligió anteriormente y reemplace `{{YYYY-MM-DD-HH-MM}}` en la cláusula `WHERE` con la fecha del informe de inventario en la que desea que se ejecute esta herramienta. A continuación, elija **Run** (Ejecutar) para ejecutar la consulta.

   ```
   SELECT bucket as Bucket, key as Key, CASE WHEN version_id = '' THEN 'null' ELSE version_id END as VersionId FROM {{table_name}} WHERE dt = '{{YYYY-MM-DD-HH-MM}}';
   ```

1. Regrese a la consola de Amazon S3 ([https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)) y vaya al bucket de S3 que eligió anteriormente para **Location of query result** (Ubicación del resultado de la consulta). En el interior, debería haber una serie de carpetas que terminen con la fecha.

   Por ejemplo, debería ver algo similar a **s3://{{{{amzn-s3-demo-bucket}}}}/{{query-result-location}}/Unsaved/2021/10/07/**. Debería ver archivos `.csv` que contienen los resultados de la consulta `SELECT` que ejecutó. 

   Elija el archivo CSV con la última fecha de modificación. Descargue este archivo en su equipo local para el siguiente paso.

1. El archivo CSV generado contiene una fila de encabezado. Para utilizar este archivo CSV como entrada para un trabajo de S3 Batch Operations, debe quitar la fila de encabezado, porque Batch Operations no admite filas de encabezado en los manifiestos CSV. 

   Para eliminar la fila del encabezado, puede ejecutar uno de los siguientes comandos en el archivo. Reemplace {{`file.csv`}} con el nombre del archivo CSV. 

   **Para equipos macOS y Linux**, ejecute el comando `tail` en una ventana de terminal. 

   ```
   tail -n +2 {{file.csv}} > tmp.csv && mv tmp.csv {{file.csv}} 
   ```

   **Para máquinas Windows**, ejecute el script siguiente en una ventana de Windows PowerShell. Sustituya `{{File-location}}` por la ruta a su archivo y `{{file.csv}}` por el nombre del archivo.

   ```
   $ins = New-Object System.IO.StreamReader {{File-location}}\{{file.csv}}
   $outs = New-Object System.IO.StreamWriter {{File-location}}\temp.csv
   try {
       $skip = 0
       while ( !$ins.EndOfStream ) {
           $line = $ins.ReadLine();
           if ( $skip -ne 0 ) {
               $outs.WriteLine($line);
           } else {
               $skip = 1
           }
       }
   } finally {
       $outs.Close();
       $ins.Close();
   }
   Move-Item {{File-location}}\temp.csv {{File-location}}\{{file.csv}} -Force
   ```

1. Después de eliminar la fila de encabezado del archivo CSV, podrá utilizarla como manifiesto en un trabajo de S3 Batch Operations. Cargue el archivo CSV en un bucket de S3 o ubicación que elija y, a continuación, cree un trabajo de Batch Operations utilizando el archivo CSV como manifiesto.

   Para obtener más información acerca de cómo crear un trabajo de Batch Operations, consulte [Creación de trabajos de operaciones por lotes de S3](batch-ops-create-job.md).