

# Converter strings de ID de versão vazias nos relatórios do Amazon S3 Inventory em cadeias de caracteres null
<a name="inventory-configure-bops"></a>

**nota**  
**O procedimento a seguir se aplica somente aos relatórios do Amazon S3 Inventory que incluem todas as versões e somente se os relatórios “todas as versões” forem usados como manifestos para o S3 Batch Operations em buckets que têm o versionamento do S3 habilitado.** Não é necessário converter strings para relatórios do S3 Inventory que especificam somente a versão atual.

Você pode usar relatórios do S3 Inventory como manifestos para o S3 Batch Operations. Porém, quando o versionamento S3 está habilitado em um bucket, os relatórios do S3 Inventory que incluem todas as versões marcam qualquer objeto com versionamento nulo com strings vazias no campo de ID da versão. Quando um relatório de inventário inclui todas as IDs de versão do objeto, o Batch Operations reconhece strings `null` como IDs de versão, mas não strings vazias. 

Quando um trabalho do S3 Batch Operations usa um relatório “all versions” (todas as versões) do S3 Inventory como manifesto, ele falha em todas as tarefas em objetos que têm uma string vazia no campo de ID da versão. Para converter cadeias de caracteres vazias no campo ID da versão do relatório do S3 Inventory para strings `null` do Batch Operations, use o procedimento a seguir.

**Atualize um relatório do Amazon S3 Inventory para uso com o Batch Operations**

1. Faça login no Console de gerenciamento da AWS e abra o console do Amazon S3 em [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/).

1. Navegue até o relatório do S3 Inventory. O relatório de inventário está localizado no bucket de destino especificado durante a configuração do relatório de inventário. Para obter mais informações sobre a localização de relatórios de inventário, consulte [Localização de lista de inventário](storage-inventory-location.md).

   1. Escolha o bucket de destino.

   1. Escolha a pasta . A pasta tem o nome do bucket de origem original.

   1. Escolha a pasta com o nome da configuração do inventário.

   1. Marque a caixa de seleção ao lado da pasta chamada **hive**. Na parte superior da página, escolha **Copy S3 URI** (Copiar URI do S3) para copiar a URI do S3 para a pasta.

1. Abra o console do Amazon Athena em [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home). 

1. No editor de consultas, escolha **Settings** (Configurações) e escolha **Manage** (Gerenciar). Na página **Manage settings** (Gerenciar configurações), em **Location of query result** (Local do resultado da consulta), escolha um bucket do S3 para armazenar os resultados da consulta.

1. No editor de consultas, crie uma tabela do Athena para manter os dados no relatório de inventário usando o comando a seguir. Substitua `table_name` pelo nome de sua preferência, e na cláusula `LOCATION`, insira a URI do S3 que você copiou anteriormente. Em seguida, escolha **Run** (Executar) para executar a 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 limpar o editor de consultas, escolha **Clear** (Limpar). Então carregue o relatório de inventário na tabela usando o comando a seguir. Substitua `table_name` pelo que você escolheu na etapa anterior. Em seguida, escolha **Run** (Executar) para executar a consulta.

   ```
   MSCK REPAIR TABLE table_name;
   ```

1. Para limpar o editor de consultas, escolha **Clear** (Limpar). Execute a seguinte consulta `SELECT` para recuperar todas as entradas no relatório de inventário original e substituir quaisquer IDs de versão vazias por strings `null`. Substitua `table_name` pelo que você escolheu anteriormente e substitua `YYYY-MM-DD-HH-MM` na cláusula `WHERE` pela data do relatório de inventário em que você deseja que essa ferramenta seja executada. Em seguida, escolha **Run** (Executar) para executar a 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. Retorne ao console do Amazon S3 ([https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)) e navegue até o bucket do S3 que você escolheu para **Location of query result** (Local do resultado da consulta) anteriormente. Dentro dele, deve haver uma série de pastas terminando com a data.

   Por exemplo, você verá algo parecido com **s3://**amzn-s3-demo-bucket**/*query-result-location*/Unsaved/2021/10/07/**. Haverá arquivos `.csv` contendo os resultados da consulta `SELECT` que você executou. 

   Escolha o arquivo CSV com a data de modificação mais recente. Baixe esse arquivo na máquina local para a próxima etapa.

1. O arquivo CSV gerado contém uma linha de cabeçalho. Para usar esse arquivo CSV como entrada para um trabalho do S3 Batch Operations, é necessário remover a linha de cabeçalho, pois o Batch Operations não é compatível com linhas de cabeçalho em manifestos CSV. 

   Para remover a linha do cabeçalho, execute um dos comandos a seguir no arquivo. Substitua *`file.csv`* pelo nome de seu arquivo CSV. 

   **Para máquinas macOS e Linux**, execute o comando `tail` em uma janela Terminal. 

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

   **Para máquinas Windows**, execute o script a seguir em uma janela do Windows PowerShell. Substitua `File-location` pelo caminho do arquivo e `file.csv` pelo nome do arquivo.

   ```
   $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. Depois de remover a linha de cabeçalho do arquivo CSV, você estará pronto para usá-lo como manifesto em um trabalho do S3 Batch Operations. Carregue o arquivo CSV para um bucket do S3 ou local de sua preferência e crie um trabalho do Batch Operations usando o arquivo CSV como manifesto.

   Para obter mais informações sobre como criar um trabalho do Batch Operations, consulte [Criar um trabalho de operações em lote do S3](batch-ops-create-job.md).