Como posso resolver o erro “HIVE_METASTORE_ERROR” ao consultar uma tabela no Amazon Athena?

4 minuto de leitura
0

Eu recebo o erro “HIVE_METASTORE_ERROR” quando consulto minha tabela do Amazon Athena.

Breve descrição

Veja os seguintes tipos de erros “HIVE_METASTORE_ERROR” e suas causas:

  • **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):**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 Names for tables, databases, and columns (Nomes para tabelas, bancos de dados e colunas).
  • HIVE_METASTORE_ERROR: com.facebook.presto.spi.PrestoException: O descritor de armazenamento de tabela obrigatório não está preenchido:
    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.
  • HIVE_METASTORE_ERROR: com.facebook.presto.spi.PrestoException: java.io.IOException: O tamanho da carga útil de resposta (11112222 bytes) excedeu o tamanho máximo permitido da carga útil (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 mais informações, consulte Cotas do Lambda.

Resolução

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)

Para resolver esse erro, conclua as seguintes etapas:

  • Para substituir o caractere especial no nome da coluna por um sublinhado, execute o seguinte script personalizado em seus dados:
import re
string = open('a.txt').read()
new_str = re.sub('/', '_', string)
open('b.txt', 'w').write(new_str)

HIVE_METASTORE_ERROR: com.facebook.presto.spi.PrestoException: O descritor de armazenamento de tabela obrigatório não está preenchido

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: O tamanho da carga útil de resposta (11112222 bytes) excedeu o tamanho máximo permitido da carga útil (6291556 bytes)

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 informações sobre como gerar um URL pré-assinado para seu objeto, consulte Sharing objects using presigned URLs (Compartilhamento de objetos usando 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.

Informações relacionadas

Solução de problemas no Athena

AWS OFICIAL
AWS OFICIALAtualizada há um ano