¿Cómo puedo resolver el error «HIVE_METASTORE_ERROR» cuando consulto una tabla en Amazon Athena?

5 minutos de lectura
0

Aparece el error «HIVE_METASTORE_ERROR» cuando consulto mi tabla de Amazon Athena.

Resolución

Consulte los siguientes tipos de errores de «HIVE_METASTORE_ERROR» y la resolución.

Nota: Si se muestran errores al ejecutar comandos de la Interfaz de la línea de comandos de AWS (AWS CLI), consulte Troubleshoot AWS CLI errors. Además, asegúrese de utilizar la versión más reciente de la AWS CLI.

«HIVE_METASTORE_ERROR: com.facebook.presto.spi.PrestoException: Error: : expected at the position 1234 of struct<test_column> but '/' is found. (Service: null; Status Code: 0; Error Code: null; Request ID: null)»

-o-

«HIVE_METASTORE_ERROR: com.amazonaws.services.datacatalog.model.InvalidInputException: Error: : expected at the position 11884 of ... but '#' is found»

El nombre de una columna de la tabla consultada, o el nombre de una columna del esquema de partición, incluye un carácter especial. Athena no admite caracteres especiales aparte del guion bajo. Para obtener más información, consulte Nombres de tablas, bases de datos y columnas.

Para resolver este error, debe reemplazar el carácter especial del nombre de la columna por un carácter de guion bajo. A continuación, edite el esquema existente de la tabla.

El siguiente ejemplo de tabla de AWS Glue contiene un archivo de datos denominado «a.txt» con el carácter especial «/»:

col/1,col_2,col/3
data1,data2,data3
data4,data5,data6
  1. Para reemplazar el carácter especial «/» por un guión bajo «_», ejecute el siguiente script:

    string = open('a.txt').readlines()
    string[0] = string[0].replace('/', '_')
    open('b.txt', 'w').write(string)

    Ejemplo de salida con un nuevo archivo de datos «b.txt»:

    col_1,col_2,col_3
    data1,data2,data3
    data4,data5,data6
  2. Edite el esquema existente de la tabla desde la consola de AWS Glue y, a continuación, sustituya «/» por cualquier otro carácter que sea compatible con Athena.

«HIVE_METASTORE_ERROR: com.facebook.presto.spi.PrestoException: Required Table Storage Descriptor is not populated»

-o-

«HIVE_METASTORE_ERROR: Table is missing storage descriptor»

El parámetro StorageDescriptor contiene información sobre el almacenamiento físico de la tabla. Aparece este error si una o más particiones de la tabla no tienen establecida la ubicación de la partición debido a que las particiones están dañadas.

Para resolver este error, elija una o más de las siguientes soluciones:

  • Si la tabla ya está particionada y los datos están cargados en el formato de partición Hive de Amazon Simple Storage Service (Amazon S3), cargue las particiones. Ejecute un comando similar al siguiente ejemplo:
    Nota: Asegúrese de reemplazar doc_example_table por el nombre de su tabla.

    MSCK REPAIR TABLE doc_example_table
  • Si el comando MSCK REPAIR TABLE no resuelve el problema, elimine la tabla y cree una tabla nueva con la misma definición. A continuación, ejecute el comando MSCK REPAIR TABLE en la nueva tabla.

  • Cree una carpeta independiente en el bucket de Amazon S3 y mueva los archivos de datos que quiera consultar a esa carpeta. Cree un rastreador de AWS Glue que apunte a esa carpeta en lugar del bucket.

«HIVE_METASTORE_ERROR: com.facebook.presto.spi.PrestoException: java.io.IOException: Response payload size (11112222 bytes) exceeded maximum allowed payload size (6291556 bytes)»

Utiliza una función de AWS Lambda para ejecutar consultas de Athena en un Catálogo de datos de AWS Glue entre cuentas o en un metaalmacén de Hive externo. Sin embargo, Lambda tiene un límite de carga de invocación de 6 MB. Aparece este error cuando el tamaño del objeto que devuelve Lambda es superior a 6 MB. El límite de carga de Lambda es un límite máximo y no se puede aumentar. Para obtener más información, consulte Cuotas de Lambda.

Para resolver este error, elija una o más de las siguientes soluciones:

  • Cargue la carga útil de respuesta de la función de Lambda como un objeto en un bucket de Amazon S3. A continuación, incluya este objeto como carga en la respuesta de la función de Lambda. Para obtener información sobre cómo generar una URL prefirmada para el objeto, consulte Uso compartido de objetos con URL prefirmadas.
  • Si la tabla está particionada y su caso de uso lo permite, consulte solo la partición específica.
  • Al crear la función de Lambda, especifique la ubicación de desbordamiento en Amazon S3. Las respuestas que superan el umbral se desbordan en la ubicación de S3 especificada.

«HIVE_METASTORE_ERROR: Failed to fetch partitions from Glue Data Catalog»

Este error se produce por uno de los siguientes motivos:

  • El nombre de la columna presente en los metadatos de la partición contiene caracteres especiales distintos del carácter de guion bajo. Para obtener más información, consulte Nombres de tablas, bases de datos y columnas.
  • Falta la información de SerDe en el parámetro StorageDescriptor definido en los metadatos de la partición.

Para identificar la partición con el problema, realice una de las siguientes acciones:

Para resolver el problema de la partición, ejecute la instrucción DDL ALTER TABLE DROP PARTITION para eliminar la partición. A continuación, realice una de las siguientes acciones:

Información relacionada

Troubleshooting in Athena

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace un año