Ao usar o AWS re:Post, você concorda com os AWS re:Post Termos de uso

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

5 minuto de leitura
0

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
  1. 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
  2. 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:

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:

Informações relacionadas

Solução de problemas no Athena

AWS OFICIAL
AWS OFICIALAtualizada há 9 meses