Converter strings de ID de versão vazias nos relatórios do Amazon S3 Inventory em cadeias de caracteres null - Amazon Simple Storage Service

Converter strings de ID de versão vazias nos relatórios do Amazon S3 Inventory em cadeias de caracteres null

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 AWS Management Console e abra o console do Amazon S3 em https://console.aws.amazon.com/s3/.

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

    1. Escolha o bucket de destino.

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

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

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

  3. Abra o console do Amazon Athena em https://console.aws.amazon.com/athena/.

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

  5. 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';
  6. 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;
  7. 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';
  8. Retorne ao console do Amazon 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://DOC-EXAMPLE-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.

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