Atualizações em tabelas com partições - Amazon Athena

Atualizações em tabelas com partições

No Athena, uma tabela e suas partições devem usar os mesmos formatos de dados, mas os esquemas podem ser diferentes. Quando você cria uma nova partição, essa partição geralmente herda o esquema da tabela. Com o passar do tempo, os esquemas podem começar a ser diferentes. Os motivos para isso incluem:

  • Se o esquema da tabela é alterado, os esquemas para as partições não são atualizados para permanecer em sincronia com o esquema da tabela.

  • O Crawler do AWS Glue permite que você descubra dados em partições com esquemas diferentes. Isso significa que, se você criar uma tabela no Athena com o AWS Glue, depois que o crawler concluir o processamento, os esquemas da tabela e suas partições poderão ser diferentes.

  • Se você adicionar partições diretamente usando uma API da AWS.

O Athena processará tabelas com partições com êxito se elas estiverem de acordo com as restrições a seguir. Se essas restrições não forem atendidas, o Athena emitirá um erro HIVE_PARTITION_SCHEMA_MISMATCH.

  • Cada esquema de partição é compatível com o esquema da tabela.

  • O formato de dados da tabela permite o tipo de atualização que você deseja executar: adicionar, excluir, reclassificar colunas ou alterar um tipo de dados da coluna.

    Por exemplo, para os formatos CSV e TSV, você pode renomear colunas, adicionar novas colunas no final da tabela e alterar o tipo de dados de uma coluna se os tipos forem compatíveis, mas você não pode remover colunas. Para outros formatos, você pode adicionar ou remover colunas ou alterar o tipo de dados de uma coluna para outro se os tipos forem compatíveis. Para obter informações, consulte Resumo: atualizações e formatos de dados no Athena.

Evitar erros de não correspondência de esquema para tabelas com partições

No início da execução da consulta, o Athena verifica o esquema da tabela confirmando se cada tipo de dados da coluna é compatível entre a tabela e a partição.

  • Para os tipos de armazenamento de dados ORC e Parquet, o Athena usa os nomes das colunas para a verificação de esquema com base no nome da coluna. Isso elimina erros HIVE_PARTITION_SCHEMA_MISMATCH nas tabelas com partições nos tipos Parquet e ORC. (Isso será verdadeiro no ORC se a propriedade SerDe for definida para acessar o índice por nome: orc.column.index.access=FALSE. Por padrão, o Parquet lê o índice por nome).

  • Para CSV, JSON e AVRO, o Athena usa uma verificação de esquema com base no índice. Isso significa que, se você encontrar um erro de incompatibilidade de esquema, deverá descartar a partição que está causando essa incompatibilidade e recriá-la, de modo que o Athena possa consultá-la sem falhas.

O Athena compara o esquema da tabela com os esquemas da partição. Se você criar uma tabela em CSV, JSON e AVRO no Athena com o crawler do AWS Glue, depois que o crawler concluir o processamento, os esquemas da tabela e suas partições poderão ser diferentes. Se houver incompatibilidade entre os esquemas da tabela e da partição, haverá falha nas consultas no Athena devido a um erro de verificação de esquema semelhante a este: 'crawler_test.click_avro' is declared as type 'string', but partition 'partition_0=2017-01-17' declared column 'col68' as type 'double'.

Uma solução comum para esses erros é eliminar a partição que está causando o erro e recriá-la. Para ter mais informações, consulte ALTER TABLE DROP PARTITION e ALTER TABLE ADD PARTITION.