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

8 minutos de lectura
0

Cuando consulto mi tabla de Amazon Athena, aparece el error «GENERIC_INTERNAL_ERROR».

Breve descripción

Estos son los distintos tipos de excepciones GENERIC_INTERNAL_ERROR y sus causas:

  • GENERIC_INTERNAL_ERROR: nulo: Esta excepción se puede mostrar en las siguientes situaciones:
  • Hay una discrepancia de esquema entre el tipo de datos de una columna en la definición de la tabla y el tipo de datos real del conjunto de datos.
  • Está ejecutando una consulta CREATE TABLE AS SELECT (CTAS) con una sintaxis imprecisa.
  • GENERIC_INTERNAL_ERROR: el generador principal es nulo: Esta excepción se puede mostrar al consultar una tabla con columnas del tipo array y el formato SerDe OpenCSVSerDe. El formato OpenCSVSerde no es compatible con el tipo de datos array.
  • GENERIC_INTERNAL_ERROR: el valor supera MAX_INT: Esta excepción se puede mostrar cuando la columna de datos de origen está definida con el tipo de datos INT y tiene un valor numérico superior a 2.147.483.647.
  • GENERIC_INTERNAL_ERROR: el valor supera MAX_BYTE: Esta excepción se puede mostrar cuando la columna de datos de origen tiene un valor numérico superior al tamaño permitido para el tipo de datos BYTE. El tipo de datos BYTE equivale a TINYINT. TINYINT es un ENTERO de 8 bits con signo en formato de complemento a 2 con un valor mínimo de -128 y un valor máximo de 127.
  • GENERIC_INTERNAL_ERROR: el número de valores de partición no coincide con el número de filtros: Esta excepción se puede mostrar si tiene particiones incoherentes en los datos de Amazon Simple Storage Service (Amazon S3). Podría tener particiones incoherentes en estas situaciones:
  • Las particiones en Amazon S3 han cambiado (ejemplo: se han añadido nuevas particiones).
  • El número de columnas de particiones de la tabla no coincide con el de los metadatos de la partición.
  • GENERIC_INTERNAL_ERROR: hay varias entradas con la misma clave: Esta excepción debida a las claves (columnas) de los datos de JSON se puede mostrar cuando:
  • Se utiliza el mismo nombre dos veces.
  • Se utiliza el mismo nombre con todas las letras convertidas en minúsculas.

Solución

GENERIC_INTERNAL_ERROR:null

Los tipos de datos de las columnas no coinciden: Asegúrese de que el tipo de datos de columna de la definición de la tabla sea compatible con el tipo de datos de columna de los datos de origen. Athena utiliza una tecnología de lectura de esquemas. Esto significa que las definiciones de las tablas se aplican a los datos en Amazon S3 cuando se procesan las consultas.

Por ejemplo, cuando se crea una tabla en archivos de Parquet:

  • Athena lee el esquema de los archivos
  • A continuación, Athena valida el esquema con la definición de la tabla en la que se consulta el archivo de Parquet.

Si el tipo de datos subyacente de una columna no coincide con el tipo de datos mencionado durante la definición de la tabla, se muestra el error El tipo de datos de la columna no coincide.

Para solucionar este problema, compruebe que los archivos de datos de origen no estén dañados. Si hay una discrepancia de esquema entre los archivos de datos de origen y la definición de la tabla, realice una de las siguientes acciones:

  • Actualice el esquema mediante el Catálogo de datos de AWS Glue.
  • Cree una tabla nueva con la definición de tabla actualizada.

Si los archivos de datos de origen están dañados, elimínelos y, a continuación, consulte la tabla.

Sintaxis imprecisa: El error «GENERIC_INTERNAL_ERROR:null» se puede mostrar si se cumplen las dos condiciones siguientes:

Con el fin de evitar este error, debe utilizar nombres de columna distintos para las propiedades partitioned_by y bucketed_by cuando utilice la consulta CTAS. Para solucionar este error, cree una tabla mediante la selección de nombres de columna distintos para las propiedades partitioned_by y bucketed_by.

GENERIC_INTERNAL_ERROR: el generador principal es nulo

Para solucionar este error, busque la columna con el tipo de datos array y, a continuación, cambie el tipo de datos de esta columna a string. Para cambiar el tipo de datos de la columna a string, realice una de las siguientes acciones:

  • Actualice el esquema en el catálogo de datos.
  • Cree una tabla mediante la selección del tipo de datos string para la columna.

Ejecute el comando SHOW CREATE TABLE para generar la consulta que creó la tabla. A continuación, muestre el tipo de datos de todas las columnas en el resultado de este comando. Busque la columna con el tipo de datos array y, a continuación, cambie el tipo de datos a string.

Para actualizar el esquema de la tabla con el catálogo de datos, haga lo siguiente:

  1. Abra la consola de AWS Glue.
  2. En el panel de navegación, elija Tablas.
  3. Seleccione la tabla que desee actualizar.
  4. Elija Acción y, a continuación, Ver detalles.
  5. Elija Editar el esquema.
  6. Baje hasta la columna con el tipo de datos array y, a continuación, seleccione array.
  7. En la lista desplegable de Tipo de columna, elija string.
  8. Seleccione Actualizar.
  9. En la página Editar el esquema, seleccione Guardar.

GENERIC_INTERNAL_ERROR: el valor supera MAX_INT

Para solucionar este error, busque la columna con el tipo de datos int y, a continuación, actualice el tipo de datos de la columna de int a bigint. Para cambiar el tipo de datos de la columna, actualice el esquema en el catálogo de datos o cree una tabla con el esquema actualizado.

Ejecute el comando SHOW CREATE TABLE para generar la consulta que creó la tabla. A continuación, muestre el tipo de datos de todas las columnas en el resultado de este comando. Busque la columna con el tipo de datos int y, a continuación, cambie el tipo de datos a bigint.

Para actualizar el esquema de la tabla con el catálogo de datos, haga lo siguiente:

  1. Abra la consola de AWS Glue.
  2. En el panel de navegación, elija Tablas.
  3. Seleccione la tabla que desee actualizar.
  4. Elija Acción y, a continuación, Ver detalles.
  5. Elija Editar el esquema.
  6. Baje hasta la columna con el tipo de datos int y, a continuación, seleccione int.
  7. En la lista desplegable de Tipo de columna, elija bigint.
  8. Seleccione Actualizar.
  9. En la página Editar el esquema, seleccione Guardar.

GENERIC_INTERNAL_ERROR: el valor supera MAX_BYTE

Para solucionar este error, busque la columna con el tipo de datos tinyint. A continuación, cambie el tipo de datos de esta columna a smallint, int o bigint. Como alternativa, cree una tabla con el esquema actualizado para solucionar este error.

Ejecute el comando SHOW CREATE TABLE para generar la consulta que creó la tabla. A continuación, muestre el tipo de datos de todas las columnas en el resultado de este comando. Busque la columna con el tipo de datos tinyint y cambie el tipo de datos de la columna a smallint, bigint o int.

Para actualizar el esquema de la tabla con el catálogo de datos, haga lo siguiente:

  1. Abra la consola de AWS Glue.
  2. En el panel de navegación, elija Tablas.
  3. Seleccione la tabla que desee actualizar.
  4. Elija Acción y, a continuación, Ver detalles.
  5. Elija Editar el esquema.
  6. Baje hasta la columna con el tipo de datos tinyint y, a continuación, seleccione tinyint.
  7. En la lista desplegable de Tipo de columna, elija smallint, bigint o int.
  8. Seleccione Actualizar.
  9. En la página Editar el esquema, seleccione Guardar.

GENERIC_INTERNAL_ERROR: el número de valores de partición no coincide con el número de filtros

Para solucionar este error, realice una de las siguientes acciones:

  • Cree una tabla con un rastreador de AWS Glue.
  • Quite las particiones con la instrucción ALTER TABLE DROP PARTITION. A continuación, añada el mismo número de particiones que en la definición de la tabla con la instrucción ALTER TABLE ADD PARTITION. Por ejemplo, supongamos que tiene dos columnas de partición, date y country en la definición de la tabla y una partición que solo tiene una columna date. Quite la partición con la columna date y luego añada ambas particiones a la tabla.
ALTER TABLE doc_example_table DROP PARTITION (date = '2014-05-14');

ALTER TABLE doc_example_table ADD PARTITION (date = '2016-05-14', country = 'IN');

GENERIC_INTERNAL_ERROR: hay varias entradas con la misma clave

Si las filas tienen varias columnas con la misma clave, es necesario procesar previamente los datos para incluir un par clave-valor válido. Si solo tienen claves duplicadas algunos de los registros y no quiere ignorar estos registros, defina ignore.malformed.json como SERDEPROPERTIES en org.openx.data.jsonserde.JsonSerDe.

Si los nombres de las claves son iguales pero las mayúsculas y minúsculas no coinciden (por ejemplo: «Columna», «columna»), debe utilizar la asignación. Esto se debe a que Hive no admite columnas con distinción entre mayúsculas y minúsculas. Para ello, debe configurar SerDe de modo que ignore las mayúsculas y las minúsculas.

Haga lo siguiente:

CREATE TABLE mytable (  
  time1 string,
  time2 string)
 ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
WITH SERDEPROPERTIES (
"case.insensitive" = "false", --tells hive to ignore key case
"mapping.time1"= "time", -- lowercase 'time' mapped into 'time1'
"mapping.time2"= "Time") -- uppercase to 'time2'

Información relacionada

Tipos de datos en Amazon Athena

Particionar datos en Athena

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace un año