Actualizaciones en tablas con particiones
En Athena, una tabla y sus particiones deben utilizar los mismos formatos de datos, pero sus esquemas pueden ser diferentes. Al crear una partición, esta normalmente hereda el esquema de la tabla. Con el tiempo, los esquemas puede comenzar a ser diferentes. Los motivos pueden ser:
-
Si se modifica el esquema de la tabla, los esquemas de las particiones no se actualizan para continuar sincronizados con el esquema de la tabla.
-
El rastreador de AWS Glue permite descubrir datos en particiones con esquemas distintos. Esto significa que, si se crea una tabla en Athena con AWS Glue, cuando el rastreador finalice el procesamiento, los esquemas de la tabla y los de sus particiones podrán ser distintos.
-
Si se agregan particiones directamente a través de una API de AWS.
Athena procesa correctamente las tablas con particiones si se cumplen las restricciones siguientes. Si no se cumplen estas restricciones, Athena genera un error HIVE_PARTITION_SCHEMA_MISMATCH
.
-
El esquema de cada partición es compatible con el esquema de la tabla.
-
El formato de datos de la tabla permite del tipo de actualización que se desea realizar: añadir, eliminar, cambiar el orden de las columnas o cambiar el tipo de datos de una columna.
Por ejemplo, en el caso de los formato CSV y TSV, solo se puede cambiar el nombre de las columnas, añadir columnas al final de la tabla y cambiar el tipo de datos de una columna si los tipos son compatibles, pero no se pueden eliminar columnas. Para otros formatos, se pueden añadir o eliminar columnas, o cambiar el tipo de datos de una columna por otro si los tipos son compatibles. Para obtener información, consulte Resumen: Actualizaciones y formatos de datos en Athena.
Cómo evitar los errores de discrepancia de esquemas para las tablas con particiones
Al principio de la ejecución de las consultas, Athena verifica el esquema de la tabla verificando que el tipo de datos de cada columna es compatible entre la tabla y la partición.
-
Para los tipos de almacenamiento de datos Parquet y ORC, Athena tiene en cuenta los nombres de las columnas y los utiliza para la verificación de esquemas basada en el nombre de las columnas. Esto elimina los errores
HIVE_PARTITION_SCHEMA_MISMATCH
para las tablas con particiones en Parquet y ORC. (Esto es válido para ORC si la propiedad del SerDe está establecida para obtener acceso al índice por nombre:orc.column.index.access=FALSE
. Parquet lee el índice por nombre de forma predeterminada). -
Para CSV, JSON y Avro, Athena utiliza una verificación de esquemas basada en índices. Esto significa que, si detecta un error de discrepancia de esquemas, debe eliminar la partición que está provocando la discrepancia y volver a crearla para que Athena pueda consultarla sin que se produzcan errores.
Athena compara el esquema de la tabla con los esquemas de las particiones. Si se crea una tabla con formato CSV, JSON y AVRO en Athena usando el rastreador de AWS Glue, cuando el rastreador finalice el procesamiento los esquemas de la tabla y los de sus particiones podrán ser distintos. Si hay una discrepancia entre el esquema de la tabla y los esquemas de las particiones, las consultas de Athena generan errores de verificación de esquema similares a este: 'crawler_test.click_avro' is declared as type 'string', but partition 'partition_0=2017-01-17' declared column 'col68' as type 'double'
('crawler_test.click_avro' se ha declarado como de tipo 'cadena', pero la partición 'partition_0=2017-01-17' ha declarado la columna 'col68' como de tipo 'doble').
Una solución típica para este tipo de errores consiste en eliminar la partición que provoca el error y volver a crearla. Para obtener más información, consulte ALTER TABLE DROP PARTITION y ALTER TABLE ADD PARTITION.