¿Qué es la creación de particiones? - Amazon Athena

¿Qué es la creación de particiones?

Crear particiones significa organizar los datos en directorios (o “prefijos”) en Amazon S3 en función de una propiedad concreta de los datos. Estas propiedades se denominan claves de partición. Una clave de partición común es la fecha o alguna otra unidad de tiempo, como el año o el mes. Sin embargo, un conjunto de datos se puede particionar en más de una clave. Por ejemplo, los datos sobre las ventas de productos pueden particionarse por fecha, categoría de producto y mercado.

Decidir cómo crear particiones

Las propiedades que se utilizan siempre o con frecuencia en las consultas y que tienen una cardinalidad baja son buenas candidatas para las claves de partición. Hay una disyuntiva entre tener demasiadas particiones y tener muy pocas. Con demasiadas particiones, el aumento del número de archivos genera una sobrecarga. El filtrado de las propias particiones también supone una sobrecarga. Con muy pocas particiones, las consultas suelen tener que analizar más datos.

Creación de una tabla particionada

Cuando un conjunto de datos está particionado, puede crear una tabla particionada en Athena. Una tabla particionada es una tabla que tiene claves de partición. Cuando se utiliza CREATE TABLE, se agregan particiones a la tabla. Cuando se utiliza CREATE TABLE AS, las particiones que se crean en Amazon S3 se agregan automáticamente a la tabla.

En una instrucción CREATE TABLE, se especifican las claves de partición en la cláusula PARTITIONED BY (column_name data_type). En una instrucción CREATE TABLE AS, se especifican las claves de partición en una cláusula WITH (partitioned_by = ARRAY['partition_key']) o WITH (partitioning = ARRAY['partition_key']) en las tablas de Iceberg. Por motivos de rendimiento, las claves de partición siempre deben ser del tipo STRING. Para obtener más información, consulte Uso de una cadena como tipo de datos para las claves de partición.

Para obtener información adicional sobre la sintaxis de CREATE TABLE y CREATE TABLE AS, consulte CREATE TABLE y Propiedades de la tabla CTAS.

Consulta de tablas particionadas

Cuando se consulta una tabla particionada, Athena usa los predicados de la consulta para filtrar la lista de particiones. A continuación, utiliza las ubicaciones de las particiones coincidentes para procesar los archivos encontrados. Athena puede reducir de manera eficiente la cantidad de datos analizados simplemente al no leer los datos de las particiones que no coinciden con los predicados de la consulta.

Ejemplos

Supongamos que tiene una tabla particionada en sales_date y product_category y quiere saber los ingresos totales de una semana en una categoría específica. Debe incluir predicados en las columnas sales_date y product_category para garantizar que Athena analice solo la cantidad mínima de datos, como en el siguiente ejemplo.

SELECT SUM(amount) AS total_revenue FROM sales WHERE sales_date BETWEEN '2023-02-27' AND '2023-03-05' AND product_category = 'Toys'

Supongamos que tiene un conjunto de datos que está particionado por fecha, pero que también tiene una marca de tiempo detallada.

Con las tablas de Iceberg, puede declarar que una clave de partición tiene una relación con una columna, pero con las tablas de Hive, el motor de consultas no conoce las relaciones entre las columnas y las claves de partición. Por este motivo, debe incluir un predicado tanto en la columna como en la clave de partición de la consulta para asegurarse de que la consulta no analice más datos de los necesarios.

Por ejemplo, supongamos que la tabla sales del ejemplo anterior también tiene una columna sold_at del tipo de datos TIMESTAMP. Si desea obtener los ingresos solo para un intervalo de tiempo específico, debe escribir la consulta de la siguiente manera:

SELECT SUM(amount) AS total_revenue FROM sales WHERE sales_date = '2023-02-28' AND sold_at BETWEEN TIMESTAMP '2023-02-28 10:00:00' AND TIMESTAMP '2023-02-28 12:00:00' AND product_category = 'Toys'

Para obtener más información sobre esta diferencia entre las consultas de las tablas de Hive e Iceberg, consulte Cómo escribir consultas para campos de marca de tiempo que también se encuentren particionados por tiempo.