Convertir cadenas de ID de versión vacías de informes de Amazon S3 Inventory en cadenas nulas - Amazon Simple Storage Service

Convertir cadenas de ID de versión vacías de informes de Amazon S3 Inventory en cadenas nulas

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 AWS Management Console y abra la consola de Amazon S3 en https://console.aws.amazon.com/s3/.

  2. 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.

    1. Elija el del bucket de destino.

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

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

    4. 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.

  3. Abra la consola de Amazon Athena en https://console.aws.amazon.com/athena/.

  4. 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.

  5. 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';
  6. 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;
  7. 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';
  8. Regrese a la consola de Amazon 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://DOC-EXAMPLE-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.

  9. 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
  10. 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.