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.