Conversion de chaînes d’ID de version vides dans les rapports d’inventaire Amazon S3 en chaînes null - Amazon Simple Storage Service

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Conversion de chaînes d’ID de version vides dans les rapports d’inventaire Amazon S3 en chaînes null

Note

La procédure suivante s’applique uniquement aux rapports d’inventaire Amazon S3 qui incluent toutes les versions, et uniquement si les rapports « toutes les versions » sont utilisés comme manifestes pour S3 Batch Operations sur des compartiments sur lesquels la gestion des versions S3 est activée. Il n’est pas nécessaire de convertir des chaînes pour les rapports d’inventaire S3 qui spécifient uniquement la version actuelle.

Vous pouvez utiliser les rapports d’inventaire S3 en tant que manifestes pour S3 Batch Operations. Toutefois, si la gestion des versions S3 est activée sur un compartiment, les rapports d’inventaire S3 qui incluent toutes les versions marquent tous les objets versionnés NULL avec des chaînes vides dans le champ d’ID de version. Lorsqu'un rapport d'inventaire inclut toutes les versions de l'objet IDs, Batch Operations reconnaît null les chaînes comme des versions IDs, mais pas les chaînes vides.

Si une tâche S3 Batch Operations utilise un rapport d’inventaire S3 « toutes les versions » comme manifeste, il échoue toutes les tâches sur les objets dont la chaîne est vide dans le champ d’ID de version. Pour convertir des chaînes vides dans le champ d’ID de version du rapport d’inventaire S3 en chaînes null pour Batch Operations, suivez la procédure suivante.

Mise à jour d’un rapport d’inventaire Amazon S3 pour l’utiliser avec Batch Operations
  1. Connectez-vous à la console Amazon S3 AWS Management Console et ouvrez-la à l'adresse https://console.aws.amazon.com/s3/.

  2. Accédez à votre rapport d’inventaire S3. Le rapport d’inventaire se trouve dans le compartiment de destination que vous avez spécifié lors de la configuration de votre rapport d’inventaire. Pour de plus amples informations sur la manière de trouver les rapports d’inventaire, consultez Localisation de votre liste d’inventaire.

    1. Choisissez le compartiment de destination.

    2. Choisissez le dossier. Le dossier porte le nom du compartiment source d’origine.

    3. Choisissez le dossier nommé d’après la configuration d’inventaire.

    4. Cochez la case en regard du dossier nommé hive. En haut de la page, choisissez Copy S3 URI (Copier l’URI S3) pour copier l’URI S3 du dossier.

  3. Ouvrez la console Amazon Athena à l'adresse. https://console.aws.amazon.com/athena/

  4. Dans l’éditeur de requête, choisissez Settings (Paramètres), puis Manage (Gérer). Sur la page Manage settings (Gérer les paramètres), pour Location of query result (Emplacement des résultats de la requête), choisissez un compartiment S3 dans lequel stocker les résultats de votre requête.

  5. Dans l’éditeur de requête, créez une table Athena pour contenir les données du rapport d’inventaire à l’aide de la commande suivante. Remplacez table_name par un nom de votre choix, et dans la clause LOCATION, insérez l’URI S3 que vous avez copié précédemment. Choisissez ensuite Run (Exécuter) pour exécuter la requête.

    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. Pour effacer l’éditeur de requête, cliquez sur Clear (Effacer). Ensuite, chargez le rapport d’inventaire dans la table à l’aide de la commande suivante. Remplacez table_name par le nom que vous avez choisi lors de l’étape précédente. Choisissez ensuite Run (Exécuter) pour exécuter la requête.

    MSCK REPAIR TABLE table_name;
  7. Pour effacer l’éditeur de requête, cliquez sur Clear (Effacer). Exécutez la SELECT requête suivante pour récupérer toutes les entrées du rapport d'inventaire d'origine et remplacez toute version vide par IDs des null chaînes. Remplacez table_name par le nom que vous avez choisi précédemment, et remplacez YYYY-MM-DD-HH-MM dans la clause WHERE par la date du rapport d’inventaire à laquelle vous souhaitez que cet outil soit exécuté. Choisissez ensuite Run (Exécuter) pour exécuter la requête.

    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. Retournez à la console Amazon S3 (https://console.aws.amazon.com/s3/) et accédez au compartiment S3 que vous avez choisi pour Emplacement du résultat de la requête plus tôt. Il devrait contenir une série de dossiers se terminant par la date.

    Par exemple, vous devriez voir quelque chose comme s3 ://amzn-s3-demo-bucket/query-result-location/Unsaved/2021/10/07/. Vous devriez voir des fichiers .csv contenant les résultats de la requête SELECT que vous avez exécutée.

    Choisissez le fichier CSV avec la date de modification la plus récente. Téléchargez ce fichier sur votre ordinateur local pour la prochaine étape.

  9. Le fichier CSV généré contient une ligne d’en-tête. Pour utiliser ce fichier CSV en tant qu’entrée pour une tâche S3 Batch Operations, vous devez supprimer la ligne d’en-tête, car Batch Operations ne prend pas en charge les lignes d’en-tête sur les manifestes CSV.

    Pour supprimer la ligne d’en-tête, vous pouvez exécuter l’une des commandes suivantes sur le fichier. Remplacez file.csv par le nom de votre fichier CSV.

    Pour les machines macOS et Linux, exécutez la commande tail dans une fenêtre Terminal.

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

    Pour les machines Windows, exécutez le script suivant dans une PowerShell fenêtre Windows. Remplacez File-location par le chemin de votre fichier et file.csv par le nom du fichier.

    $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. Après avoir supprimé la ligne d’en-tête du fichier CSV, vous êtes prêt à utiliser ce dernier comme manifeste dans une tâche S3 Batch Operations. Chargez le fichier CSV dans un compartiment S3 ou un emplacement de votre choix, puis créez une tâche Batch Operations en utilisant le fichier CSV comme manifeste.

    Pour de plus amples informations sur la création d’une tâche Batch Operations, consultez Création d’une tâche d’opérations par lot S3.