Por que minha consulta do Athena falha com o erro “HIVE_INVALID_METADATA: Os metadados do Hive para a tabela são inválidos: O descritor de tabela contém colunas duplicadas”?
Minha consulta do Amazon Athena falha com o erro “HIVE_INVALID_METADATA: Os metadados do Hive para a tabela sample_table são inválidos: O descritor de tabela contém colunas duplicadas”.
Breve descrição
Esse erro ocorre quando o esquema de tabela do AWS Glue contém nomes de coluna duplicados ou colunas com o mesmo nome das colunas de partição.
Resolução
Verifique se há nomes de colunas duplicados
Para identificar a coluna duplicada, execute SHOW CREATE TABLE para recuperar o esquema da tabela. Ou veja o esquema da tabela no console do AWS Glue. No exemplo a seguir, há duas colunas denominadas “coluna1”.
CREATE EXTERNAL TABLE `athenatestingduplicatecolumn_athenatesting`( `column1` bigint, `column2` bigint, `column3` bigint, `column1` bigint) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' STORED AS INPUTFORMAT 'org.apache.hadoop.mapred.TextInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat' LOCATION 's3://doc-example-bucket/athenatesting/' TBLPROPERTIES ( 'classification'='csv', 'skip.header.line.count'='1' )
Para resolver o erro, execute CREATE TABLE para recriar a tabela Athena com nomes de coluna exclusivos. Ou use o console do AWS Glue para renomear as colunas duplicadas:
- Abra o console do AWS Glue.
- Escolha o nome da tabela na lista e escolha Editar esquema.
- Escolha o nome da coluna, insira um novo nome e escolha Salvar.
Verifique se há colunas de tabela e colunas de partição que tenham o mesmo nome
Para verificar se há nomes duplicados de colunas de partição e colunas de tabela, visualize o esquema da tabela no console do AWS Glue. No exemplo a seguir, a coluna da partição e a coluna da tabela são denominadas “id”.
Dados de exemplo:
{ "id" : 50, "name":"John" }{ "id" : 51, "name":"Jane" } { "id" : 53, "name":"Jill" }
Definição da tabela:
Nome da coluna | Tipo de dados | Chave de partição |
id | int | |
name | string | |
id | string | Partition (0) |
Use uma das seguintes opções para resolver o problema:
- Renomeie a coluna de partição no caminho do Amazon Simple Storage Service (Amazon S3).
- Renomeie o nome da coluna nos dados e na definição da tabela do AWS Glue.
- Se os dados de origem forem JSON, use a função de mapeamento em vez do crawler do AWS Glue para recriar manualmente a tabela. Em seguida, adicione partições no Athena. No exemplo a seguir, a tabela do AWS Glue aponta para s3://doc-example-bucket/athenajsontesting/, que tem essa estrutura de partição: s3://doc-example-bucket/athenajsontesting/id=12. Depois de criar a tabela, use MSCK REPAIR TABLE para carregar a partição.
CREATE EXTERNAL TABLE `athenajsontest_athenajsontesting2`( `id1` int COMMENT 'from deserializer', `name` string COMMENT 'from deserializer') PARTITIONED BY ( `id` string) ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe' WITH SERDEPROPERTIES ( 'mapping.id1'='id') STORED AS INPUTFORMAT 'org.apache.hadoop.mapred.TextInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat' LOCATION 's3://doc-example-bucket/athenajsontesting' TBLPROPERTIES ( 'classification'='json', 'transient_lastDdlTime'='1578399113')
Verifique se há chaves duplicadas nos dados de origem JSON
Se os dados de origem JSON contiverem nomes de colunas que diferem somente em maiúsculas e minúsculas (por exemplo, {"Username”: “bob1234", “username”: “bob”}), consulte Por que recebo erros quando tento ler dados JSON no Amazon Athena? Por padrão, o Athena não diferencia maiúsculas de minúsculas. O Athena trata “Username” e “username” como chaves duplicadas, a menos que você use o OpenX SerDe e defina a propriedade case.insensitive como false.
Verifique se há chaves duplicadas nos dados de origem do Parquet
Se a fonte de dados estiver no formato Parquet e a tabela tiver uma coluna duplicada, altere um dos nomes das colunas. Defina a propriedade serDe parquet.column.index.access como true. O Parquet acessa colunas por nome e ORC por índice.
Para obter mais informações, consulte Tratamento de atualizações do esquema.
Informações relacionadas
Conteúdo relevante
- AWS OFICIALAtualizada há 10 meses
- AWS OFICIALAtualizada há um ano
- AWS OFICIALAtualizada há 2 anos
- AWS OFICIALAtualizada há 9 meses