ALTER TABLE ADD PARTITION - Amazon Athena

ALTER TABLE ADD PARTITION

Crea una o varias columnas de partición para la tabla. Cada partición se compone de una o varias combinaciones diferenciadas de nombre y valor de columna. Se crea un directorio de datos independiente por cada combinación especificada, lo que puede mejorar el rendimiento de la consulta en algunas circunstancias. Las columnas con particiones no existen en la tabla de datos en sí, de modo que si utiliza un nombre de columna que tiene el mismo nombre que una columna de la tabla, obtendrá un error. Para obtener más información, consulte Partición de datos.

En Athena, una tabla y sus particiones deben utilizar los mismos formatos de datos, pero sus esquemas pueden ser diferentes. Para obtener más información, consulte Actualización de tablas con particiones.

Para obtener información sobre los permisos de nivel de recursos requeridos en las políticas de IAM (incluido glue:CreatePartition), consulte Permisos de la API de AWS Glue: Referencia de recursos y acciones y Configuración del acceso a las bases de datos y tablas en el AWS Glue Data Catalog. Para obtener información sobre la solución de problemas de permisos al utilizar Athena, consulte la sección Permisos del tema Solución de problemas en Athena.

Sinopsis

ALTER TABLE table_name ADD [IF NOT EXISTS] PARTITION (partition_col1_name = partition_col1_value [,partition_col2_name = partition_col2_value] [,...]) [LOCATION 'location1'] [PARTITION (partition_colA_name = partition_colA_value [,partition_colB_name = partition_colB_value [,...])] [LOCATION 'location2'] [,...]

Parámetros

Cuando agrega una partición, especifica uno o más pares de nombre y valor de columna para la partición y la ruta de acceso de Amazon S3 donde residen los archivos de datos de esa partición.

[IF NOT EXISTS]

Hace que se suprima el error si ya existe una partición con la misma definición.

PARTITION (partition_col_name = partition_col_value [,...])

Crea una partición con las combinaciones de nombre y valor de columna que especifica. Ponga partition_col_value entre caracteres de cadena solo si el tipo de datos de la columna es una cadena.

[LOCATION 'location']

Especifica el directorio en el que se va a almacenar la partición definida mediante la instrucción anterior. La cláusula LOCATION es opcional cuando los datos están particionados al estilo Hive (pk1=v1/pk2=v2/pk3=v3). Con la partición al estilo Hive, el URI completo de Amazon S3 se crea automáticamente a partir de la ubicación de la tabla, los nombres de las claves de partición y los valores de las claves de partición. Para obtener más información, consulte Partición de datos.

Consideraciones

Amazon Athena no le impone un límite específico al número de particiones que se pueden añadir en una sola instrucción DDL ALTER TABLE ADD PARTITION. Sin embargo, si necesita añadir un número significativo de particiones, considere la posibilidad de dividir la operación en lotes más pequeños para evitar posibles problemas de rendimiento. En el siguiente ejemplo, se utilizan comandos sucesivos para añadir particiones de forma individual y se utiliza IF NOT EXISTS para evitar añadir duplicados.

ALTER TABLE table_name ADD IF NOT EXISTS PARTITION (ds='2023-01-01') ALTER TABLE table_name ADD IF NOT EXISTS PARTITION (ds='2023-01-02') ALTER TABLE table_name ADD IF NOT EXISTS PARTITION (ds='2023-01-03')

Cuando trabaje con particiones en Athena, también tenga en cuenta los siguientes puntos:

  • Aunque Athena admite consultas de tablas de AWS Glue que tienen 10 millones de particiones, no puede leer más de 1 millón de particiones en un solo escaneo.

  • Para optimizar sus consultas y reducir el número de particiones escaneadas, considere estrategias como la eliminación de particiones o el uso de índices de particiones.

Para obtener información adicional sobre el trabajo con particiones en Athena, consulte Partición de datos.

Ejemplos

En el siguiente ejemplo, se agrega una sola partición a una tabla para datos particionados al estilo Hive.

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

En el siguiente ejemplo, se agregan varias particiones a una tabla para datos particionados al estilo Hive.

ALTER TABLE orders ADD PARTITION (dt = '2016-05-31', country = 'IN') PARTITION (dt = '2016-06-01', country = 'IN');

Si la tabla no es para datos particionados al estilo Hive, la cláusula LOCATION es obligatoria y debe ser el URI completo de Amazon S3 del prefijo que contiene los datos de la partición.

ALTER TABLE orders ADD PARTITION (dt = '2016-05-31', country = 'IN') LOCATION 's3://amzn-s3-demo-bucket/path/to/INDIA_31_May_2016/' PARTITION (dt = '2016-06-01', country = 'IN') LOCATION 's3://amzn-s3-demo-bucket/path/to/INDIA_01_June_2016/';

Para ignorar los errores cuando la partición ya existe, utilice la cláusula IF NOT EXISTS, como en el siguiente ejemplo.

ALTER TABLE orders ADD IF NOT EXISTS PARTITION (dt = '2016-05-14', country = 'IN');

Archivos _$folder$ sin bytes

Si ejecuta una declaración ALTER TABLE ADD PARTITION y especifica erróneamente una partición que ya existe y una ubicación de Amazon S3 incorrecta, se crean archivos de marcador de posición de cero bytes del formato partition_value_$folder$ en Amazon S3. Debe eliminar esos archivos en forma manual.

Para evitar que esto ocurra, utilice la sintaxis ADD IF NOT EXISTS de la instrucción ALTER TABLE ADD PARTITION, como se muestra en el siguiente ejemplo.

ALTER TABLE table_name ADD IF NOT EXISTS PARTITION […]