Como posso resolver o erro “HIVE_METASTORE_ERROR” ao consultar uma tabela no Amazon Athena?
Eu recebo o erro “HIVE_METASTORE_ERROR” quando consulto minha tabela do Amazon Athena.
Resolução
Consulte os seguintes tipos de erros "HIVE_METASTORE_ERROR" para conhecer a causa e a resolução.
Observação: se você receber erros ao executar comandos da AWS Command Line Interface (AWS CLI), consulte Solucionar erros da AWS CLI. Além disso, verifique se você está usando a versão mais recente da AWS CLI.
"HIVE_METASTORE_ERROR: com.facebook.presto.spi.PrestoException: Erro: esperado na posição 1234 da estrutura<test_column> mas '/' foi encontrado. (Serviço: null; Código de status: 0; Código de erro: null; ID da solicitação: null)"
-ou-
"HIVE_METASTORE_ERROR: com.amazonaws.services.datacatalog.model.InvalidInputException: Error: : expected at the position 11884 of ... but '#' is found"
Um nome de coluna na tabela consultada inclui um caractere especial, ou um nome de coluna no esquema de partição inclui um caractere especial. O Athena não suporta caracteres especiais além do sublinhado. Para mais informações, consulte Nomes de tabelas, bancos de dados e colunas.
Para resolver esse erro, você deve substituir o caractere especial no nome da coluna por um sublinhado. Em seguida, edite o esquema existente da tabela.
O exemplo de tabela do AWS Glue a seguir contém um arquivo de dados chamado "a.txt" com o caractere especial "/":
col/1,col_2,col/3 data1,data2,data3 data4,data5,data6
-
Para substituir o caractere especial "/" por um sublinhado "_", execute o seguinte script:
string = open('a.txt').readlines() string[0] = string[0].replace('/', '_') open('b.txt', 'w').write(string)
Exemplo de saída com um novo arquivo de dados "b.txt":
col_1,col_2,col_3 data1,data2,data3 data4,data5,data6
-
Edite o esquema existente da tabela no console do AWS Glue e substitua '/' por qualquer outro caractere compatível com o Athena.
"HIVE_METASTORE_ERROR: com.facebook.presto.spi.PrestoException: Required Table Storage Descriptor is not populated"
-ou-
"HIVE_METASTORE_ERROR: Table is missing storage descriptor"
O parâmetro StorageDescriptor contém informações sobre o armazenamento físico da tabela. Você receberá esse erro se uma ou mais partições na tabela não tiverem a localização da partição definida devido a partições corrompidas.
Para resolver esse erro, escolha uma ou mais das soluções a seguir:
-
Se sua tabela já estiver particionada e os dados estiverem carregados no formato de partição Hive do Amazon Simple Storage Service (Amazon S3), carregue as partições. Execute um comando semelhante ao exemplo a seguir:
Observação: certifique-se de substituir doc_example_table pelo nome da sua tabela.MSCK REPAIR TABLE doc_example_table
-
Se o comando MSCK REPAIR TABLE não resolver o problema, elimine a tabela e crie uma nova tabela com a mesma definição. Em seguida, execute o comando MSCK REPAIR TABLE na nova tabela.
-
Crie uma pasta separada no bucket do Amazon S3 e, em seguida, mova os arquivos de dados que você deseja consultar para essa pasta. Crie um crawler do AWS Glue que aponte para essa pasta em vez do bucket.
"HIVE_METASTORE_ERROR: com.facebook.presto.spi.PrestoException: java.io.IOException: Response payload size (11112222 bytes) exceeded maximum allowed payload size (6291556 bytes)"
Você usa uma função do AWS Lambda para executar consultas do Athena em um Catálogo de Dados do AWS Glue entre contas ou em um metastore externo do Hive. No entanto, o Lambda tem um limite de carga útil de invocação de 6 MB. Você recebe esse erro quando o tamanho do objeto retornado do Lambda é maior que 6 MB. O limite de carga útil do Lambda é fixo e não pode ser aumentado. Para obter mais informações, consulte Cotas do Lambda.
Para resolver esse erro, escolha uma ou mais das soluções a seguir:
- Faça o upload da carga útil de resposta da função do Lambda como um objeto em um bucket do Amazon S3. Em seguida, inclua esse objeto como carga útil na resposta da função do Lambda. Para obter informações sobre como gerar um URL pré-assinado para seu objeto, consulte Compartilhar objetos com URLs pré-assinados.
- Se sua tabela estiver particionada e seu caso de uso permitir, consulte somente a partição específica.
- Ao criar a função do Lambda, especifique o local do vazamento no Amazon S3. As respostas maiores do que o limite se espalham para o local especificado do S3.
"HIVE_METASTORE_ERROR: Failed to fetch partitions from Glue Data Catalog"
Esse erro ocorre por um dos seguintes motivos:
- O nome da coluna presente nos metadados da partição contém caracteres especiais além de um sublinhado. Para mais informações, consulte Nomes de tabelas, bancos de dados e colunas.
- As informações de SerDe estão ausentes no StorageDescriptor definido nos metadados da partição.
Para identificar a partição com o problema, faça o seguinte:
- Verifique o histórico de eventos do AWS CloudTrail para ver as chamadas das APIs CreatePartition e BatchCreatePartition após a última consulta executada com sucesso.
- Execute o comando get-partitions da AWS CLI na sua tabela do Glue para obter as informações da partição do Catálogo do AWS Glue.
Para resolver o problema da partição, execute a instrução DDL ALTER TABLE DROP PARTITION para eliminar a partição. Em seguida, faça um dos seguintes:
- Execute o comando create-partition da AWS CLI para recriar a partição.
- Crie um crawler do Glue para a localização das tabelas no Amazon S3. Certifique-se de definir a opção de configuração do crawler para atualizar todas as partições novas e existentes com metadados da tabela.
Informações relacionadas
Conteúdo relevante
- AWS OFICIALAtualizada há 4 anos
- AWS OFICIALAtualizada há um ano
- AWS OFICIALAtualizada há 10 meses
- AWS OFICIALAtualizada há 2 anos