MSCK REPAIR TABLE
Utilice el comando MSCK REPAIR TABLE
para actualizar los metadatos del catálogo después de agregar particiones compatibles con Hive.
El comando MSCK REPAIR TABLE
analiza un sistema de archivos como Amazon S3 en busca de particiones compatibles con Hive que se agregaron al sistema de archivos después de crear la tabla. MSCK REPAIR TABLE
compara las particiones en los metadatos de la tabla y las particiones en S3. Si hay nuevas particiones en la ubicación de S3 que especificó al crear la tabla, agrega esas particiones a los metadatos y a la tabla Athena.
Al agregar particiones físicas, los metadatos del catálogo se vuelven incoherentes con el diseño de los datos en el sistema de archivos, y la información sobre las nuevas particiones debe agregarse al catálogo. Para actualizar los metadatos, ejecute MSCK REPAIR TABLE
para consultar los datos en las nuevas particiones de Athena.
nota
MSCK REPAIR TABLE
solo agrega particiones a los metadatos; no las elimina. Para eliminar particiones de los metadatos después de haber eliminado las particiones manualmente en Amazon S3, ejecute el comando ALTER TABLE
. Para obtener más información, consulte ALTER TABLE DROP
PARTITION. table-name
DROP
PARTITION
Consideraciones y limitaciones
Al utilizar MSCK REPAIR TABLE
, tenga en cuenta los siguientes puntos:
-
Es posible que tarde un tiempo en añadir todas las particiones. Si esta operación agota el tiempo de espera, se encontrará en un estado incompleto en el que solo se habrán añadido unas cuantas particiones al catálogo. Debe ejecutar
MSCK REPAIR TABLE
en la misma tabla hasta que se hayan agregado todas las particiones. Para obtener más información, consulte Partición de datos. -
En el caso de las particiones que no son compatibles con Hive, utilice ALTER TABLE ADD PARTITION para cargar las particiones de modo que pueda consultar los datos.
-
Las ubicaciones de partición que se van a utilizar con Athena deben utilizar el protocolo
s3
(por ejemplo,s3://amzn-s3-demo-bucket/
). En Athena, las ubicaciones que utilizan otros protocolos (por ejemplo,folder
/s3a://
) producirán errores de consulta cuando se ejecuten consultasbucket
/folder
/MSCK REPAIR TABLE
en las tablas que contienen. -
Dado que
MSCK REPAIR TABLE
analiza una carpeta y sus subcarpetas para encontrar un esquema de partición coincidente, asegúrese de mantener los datos de tablas separadas en jerarquías de carpetas separadas. Por ejemplo, supongamos que tiene los datos de la tabla 1 ens3://amzn-s3-demo-bucket1
y los datos de la tabla 2 ens3://amzn-s3-demo-bucket1/table-2-data
. Si ambas tablas están particionadas por cadena,MSCK REPAIR TABLE
agregará las particiones de la tabla 2 a la tabla 1. Para evitarlo, utilice estructuras de carpetas independientes, comos3://amzn-s3-demo-bucket1
ys3://amzn-s3-demo-bucket2
en su lugar. Tenga en cuenta que este comportamiento es coherente con Amazon EMR y Apache Hive. -
Debido a un problema conocido,
MSCK REPAIR TABLE
falla silenciosamente cuando los valores de partición contienen el carácter de dos puntos (:
) (por ejemplo, cuando el valor de la partición es una marca de tiempo). Como alternativa, utilice ALTER TABLE ADD PARTITION. -
MSCK REPAIR TABLE
no agrega nombres de columnas de particiones que comiencen por un carácter de guion bajo (_). Para evitar este límite, utilice ALTER TABLE ADD PARTITION.
Sinopsis
MSCK REPAIR TABLE table_name
Ejemplos
MSCK REPAIR TABLE orders;
Resolución de problemas
Después de ejecutar MSCK REPAIR TABLE
, si Athena no agrega las particiones a la tabla en AWS Glue Data Catalog, verifique lo siguiente:
-
Acceso a AWS Glue: asegúrese de que el rol de AWS Identity and Access Management (IAM) tenga una política que permita la acción
glue:BatchCreatePartition
. Para obtener más información, consulte Permitir glue:BatchCreatePartition en la política de IAM más adelante en este documento. -
Acceso a Amazon S3: asegúrese de que el rol tenga una política con permisos suficientes para acceder a Amazon S3, incluida la acción
s3:DescribeJob
. Para obtener un ejemplo de las acciones de Amazon S3 que debe permitir, consulte el ejemplo de política de bucket en Configuración del acceso entre cuentas en Athena a los buckets de Amazon S3. -
Mayúsculas en las claves de objeto en Amazon S3: asegúrese de que la ruta de Amazon S3 esté escrita en minúsculas en lugar de una combinación de mayúsculas y minúsculas (por ejemplo,
userid
en lugar deuserId
) o useALTER TABLE ADD PARTITION
para especificar los nombres de las claves de objeto. Para obtener más información, consulte Cambiar o redefinir la ruta de Amazon S3 más adelante en este documento. -
Tiempos de espera de consulta:
MSCK REPAIR TABLE
se utiliza mejor al crear una tabla por primera vez o cuando hay incertidumbre acerca de la paridad entre los datos y los metadatos de partición. Si utilizaMSCK REPAIR TABLE
para agregar particiones nuevas con frecuencia (por ejemplo, a diario) y experimentan tiempos de espera de consulta, considere usar ALTER TABLE ADD PARTITION. -
Faltan particiones en el sistema de archivos: si elimina una partición de forma manual en Amazon S3 y, a continuación, ejecuta
MSCK REPAIR TABLE
, puede recibir el mensaje de errorFaltan particiones en el sistema de archivos
. Esto sucede porqueMSCK REPAIR TABLE
no elimina particiones obsoletas de los metadatos de la tabla. Para quitar las particiones eliminadas de los metadatos de la tabla, ejecute ALTER TABLE DROP PARTITION en su lugar. Tenga en cuenta que SHOW PARTITIONS (Mostrar particiones) muestra de manera similar solo las particiones en los metadatos, no las particiones en el sistema de archivos. -
Error “NullPointerException name is null” (El nombre NullPointerException es nulo)
Si utiliza la operación de la API CreateTable de AWS Glue o la plantilla
AWS::Glue::Table
de AWS CloudFormation para crear una tabla para su uso en Athena sin especificar la propiedadTableType
, y luego ejecuta una consulta DDL comoSHOW CREATE TABLE
oMSCK REPAIR TABLE
, puede recibir el mensaje de errorFAILED: NullPointerException Name is null
(ERROR: el nombre NullPointerException es nulo).Para resolver el error, especifique un valor para el atributo
TableType
TableInput como parte de la llamada a la APICreateTable
de AWS Glue o la plantilla AWS CloudFormation. Entre los valores posibles paraTableType
, se incluyenEXTERNAL_TABLE
oVIRTUAL_VIEW
.Este requisito se aplica únicamente cuando se crea una tabla mediante la operación de la API
CreateTable
de AWS Glue o la plantillaAWS::Glue::Table
. Si crea una tabla para Athena mediante una instrucción DDL o un rastreador de AWS Glue, la propiedadTableType
se define automáticamente.
Las secciones siguientes proporcionan algunos detalles adicionales.
Permitir glue:BatchCreatePartition en la política de IAM
Revise las políticas de IAM asociadas al rol que utiliza para ejecutar MSCK
REPAIR TABLE
. Cuando utiliza AWS Glue Data Catalog con Athena, la política de IAM debe permitir la acción glue:BatchCreatePartition
. Para obtener un ejemplo de una política de IAM que permita la acción glue:BatchCreatePartition
, consulte Política administrada de AWS: AmazonAthenaFullAccess.
Cambiar o redefinir la ruta de Amazon S3
Si una o más claves de objeto de la ruta de Amazon S3 están en mayúsculas y minúsculas y no solo en minúsculas, MSCK REPAIR TABLE
podría no agregar las particiones a AWS Glue Data Catalog. Por ejemplo, si la ruta de Amazon S3 incluye el nombre de la clave del objeto userId
, es posible que las siguientes particiones no se agreguen al AWS Glue Data Catalog:
s3://amzn-s3-demo-bucket/path/userId=1/ s3://amzn-s3-demo-bucket/path/userId=2/ s3://amzn-s3-demo-bucket/path/userId=3/
Para resolver este problema, siga uno de estos pasos:
-
Utilice minúsculas en lugar de una combinación de mayúsculas y minúsculas cuando cree las claves de objeto de Amazon S3:
s3://amzn-s3-demo-bucket/path/userid=1/ s3://amzn-s3-demo-bucket/path/userid=2/ s3://amzn-s3-demo-bucket/path/userid=3/
-
Use ALTER TABLE ADD PARTITION para redefinir la ubicación, como en el siguiente ejemplo:
ALTER TABLE table_name ADD [IF NOT EXISTS] PARTITION (userId=1) LOCATION 's3://amzn-s3-demo-bucket/path/userId=1/' PARTITION (userId=2) LOCATION 's3://amzn-s3-demo-bucket/path/userId=2/' PARTITION (userId=3) LOCATION 's3://amzn-s3-demo-bucket/path/userId=3/'
Tenga en cuenta que, aunque los nombres de las claves de objeto de Amazon S3 pueden estar en mayúsculas, los nombres de los buckets de Amazon S3 deben estar siempre en minúsculas. Para obtener más información, consulte las pautas de nomenclatura de claves de objeto y las reglas de nomenclatura de buckets en la Guía del usuario de Amazon S3.