Particiones de datos - AWS Glue

Particiones de datos

¿Qué es la partición de datos?

La partición de datos es una técnica que divide grandes conjuntos de datos en segmentos más pequeños y gestionables denominados particiones. En el contexto de las integraciones sin ETL de AWS Glue, la partición organiza los datos en la ubicación de destino en función de valores de columna específicos o de las transformaciones de esos valores.

Ventajas de la partición de datos

La partición efectiva de los datos ofrece varios beneficios clave para las cargas de trabajo de análisis:

  • Mayor rendimiento de las consultas: Las consultas pueden omitir particiones irrelevantes (poda de particiones), lo que reduce la cantidad de datos que deben analizarse.

  • Costos reducidos: Mediante el análisis de datos, puede reducir los costos informáticos y de E/S de sus consultas de análisis.

  • Mayor escalabilidad: La partición permite el procesamiento paralelo de los segmentos de datos, lo que permite un escalado más eficiente de las cargas de trabajo de análisis.

  • Gestión simplificada del ciclo de vida de los datos: Puede gestionar las políticas de retención a nivel de partición, lo que facilita el archivado o la eliminación de datos antiguos.

Conceptos clave relacionados con la partición

Columnas de partición

Columnas en sus datos que se utilizan para determinar cómo se organizan los registros en particiones. Las columnas de partición efectivas deben alinearse con los patrones de consulta comunes y tener la cardinalidad adecuada.

Funciones de partición

Las transformaciones que se aplican a los valores de las columnas de partición para crear los límites de partición reales. Algunos ejemplos son la identidad (usando el valor bruto) y funciones basadas en el tiempo (año, mes, día, hora).

Utilizar la poda de particiones

El proceso en el que el motor de consultas identifica y omite las particiones que no contienen datos relevantes para una consulta, lo que mejora considerablemente el rendimiento.

Grado de detalle de la partición

El nivel de detalle con el que se particionan los datos. Una granularidad más fina (más particiones) puede mejorar el rendimiento de las consultas, pero puede aumentar la sobrecarga de metadatos. Una granularidad más gruesa (menos particiones) reduce la sobrecarga de metadatos, pero puede resultar en el análisis de más datos de los necesarios.

Partición en integraciones sin ETL de AWS Glue

Las integraciones sin ETL de AWS Glue utilizan el formato de tabla Apache Iceberg, que proporciona capacidades avanzadas de partición. Cuando crea una integración sin ETL, puede hacer lo siguiente:

  • Utilizar estrategias de partición predeterminadas optimizadas para su origen de datos

  • Definir especificaciones de partición personalizadas adaptadas a sus patrones de consulta

  • Aplicar transformaciones a las columnas de partición (en especial, esto es útil para particiones basadas en marcas de tiempo)

  • Combinar varias estrategias de partición para crear particiones de varios niveles

Las configuraciones de partición se especifican a través de la API de CreateIntegrationTableProperty cuando se configura la integración sin ETL. Una vez configurada, AWS Glue aplica automáticamente estas estrategias de partición para organizar sus datos en la ubicación de destino.

Referencia de la API de especificación de particiones

Utilice los siguientes parámetros en la API CreateIntegrationTableProperties para configurar el particionamiento:

PartitionSpec

Una matriz de especificaciones de partición que define cómo se particionan los datos en la ubicación de destino.

{ "partitionSpec": [ { "fieldName": "timestamp_col", "functionSpec": "month", "conversionSpec": "epoch_milli" }, { "fieldName": "category", "functionSpec": "identity" } ] }
FieldName

Cadena UTF-8 (de 1 a 128 bytes) que especifica el nombre de la columna que se va a utilizar para el particionamiento.

FunctionSpec

Especifica la función de particionamiento. Valores válidos:

  • identity: Utiliza los valores de origen directamente sin transformarlos

  • year: Extrae el año de los valores de marca de tiempo (por ejemplo, 2023)

  • month: Extrae el mes de los valores de marca de tiempo (por ejemplo, 2023-01)

  • day: Extrae el día de los valores de la marca de tiempo (por ejemplo, 2023-01-15)

  • hour: Extrae la hora de los valores de la marca de tiempo (por ejemplo, 2023-01-15-14)

nota

Las funciones basadas en el tiempo (year, month, day, hour) requieren que el parámetro ConversionSpec especifique el formato de la marca de tiempo de origen.

ConversionSpec

Cadena UTF-8 que especifica el formato de marca de tiempo de los datos de origen. Los valores válidos son:

  • epoch_sec: marca de tiempo en formato de época Unix (segundos)

  • epoch_milli: marca de tiempo en formato de época Unix (milisegundos)

  • iso: marca de tiempo en formato ISO 8601

Estrategias de partición

Particionamiento predeterminado

Cuando no se especifica una columna de partición, la integración sin ETL de AWS Glue aplica estrategias de partición predeterminadas optimizadas para su origen de datos:

  • Partición basada en la clave principal: En el caso de los orígenes con claves principales (como las tablas de DynamoDB), la integración sin ETL de AWS Glue divide automáticamente los datos mediante la clave principal con agrupamientos para evitar la explosión de la partición.

La partición predeterminada está diseñada para funcionar bien con los patrones de consulta más comunes sin necesidad de una configuración manual. Sin embargo, para patrones de consulta o requisitos de rendimiento específicos, es posible que desee definir estrategias de partición personalizadas.

Estrategias de partición definidas por el usuario

La integración sin ETL de AWS Glue le permite definir estrategias de partición personalizadas con el parámetro PartitionSpec. Puede especificar una o más columnas de partición y aplicar diferentes funciones de partición a cada columna.

La partición de identidad utiliza los valores sin procesar de una columna para crear particiones. Esta estrategia es útil para las columnas con cardinalidad baja a media, como los campos de categoría, región o estado.

ejemplo Ejemplo de partición de identidad
{ "partitionSpec": [ { "fieldName": "category", "functionSpec": "identity" } ] }

Esto crea particiones independientes para cada valor único de la columna “categoría”.

aviso

Evite el uso de la partición de identidad con columnas de alta cardinalidad (como claves principales o marcas de tiempo), ya que puede provocar una explosión de particiones, lo que degradaría el rendimiento y aumentaría la sobrecarga de metadatos.

La partición basada en el tiempo organiza los datos según los valores de la marca de tiempo en diferentes granularidades (año, mes, día u hora). Esta estrategia es ideal para datos de serie temporal y permite realizar consultas eficientes en intervalos de tiempo.

Mediante el uso de la partición basada en el tiempo, la integración sin ETL e AWS Glue puede convertir automáticamente varios formatos de marcas de tiempo a un formato estandarizado antes de aplicar la función de partición. Esta conversión se especifica con el parámetro ConversionSpec.

ejemplo Ejemplo de partición basada en el tiempo
{ "partitionSpec": [ { "fieldName": "created_at", "functionSpec": "month", "conversionSpec": "epoch_milli" } ] }

Esto divide los datos por mes en función de la columna “created_at”, que contiene las marcas de tiempo en formato de época Unix en milisegundos.

La integración sin ETL de AWS Glue admite las siguientes funciones de partición basadas en el tiempo:

  • año: Divide los datos por año (por ejemplo, 2023, 2024)

  • mes: Divide los datos por mes (por ejemplo, 2023-01, 2023-02)

  • día: Divide los datos por día (por ejemplo, 2023-01-01, 2023-01-02)

  • hora: Divide los datos por hora (por ejemplo, 2023-01-01-01, 2023-01-01-02)

La integración sin ETL de AWS Glue admite los siguientes formatos de marca de tiempo a través del parámetro: ConversionSpec

  • epoch_sec: Marcas de tiempo en formato de época Unix en segundos

  • epoch_milli: Marcas de tiempo en formato de época Unix en milisegundos

  • iso: Marcas de tiempo en formato ISO 8601

nota

Los valores de las columnas originales permanecerán sin cambios en los datos de origen. AWS Glue solo transforma los valores de las columnas de partición al tipo marca de tiempo en la tabla de la base de datos de destino. Las transformaciones solo se aplican al proceso de partición.

La partición de varios niveles combina varias estrategias de partición para crear un esquema de partición jerárquico. Esto resulta útil para optimizar diferentes tipos de consultas en el mismo conjunto de datos.

ejemplo Ejemplo de partición de varios niveles
{ "partitionSpec": [ { "fieldName": "created_at", "functionSpec": "month", "conversionSpec": "iso" }, { "fieldName": "region", "functionSpec": "identity" } ] }

Esto crea un esquema de partición de tres niveles: primero por mes (desde la columna “created_at”), y luego por región. Esto permite realizar consultas eficientes que se filtran por intervalos de fechas, regiones específicas o cualquier combinación de estas dimensiones.

Cuando diseñe esquemas de partición de varios niveles, tenga en cuenta lo siguiente:

  • Coloque las columnas de mayor selectividad en primer lugar en la jerarquía de particiones

  • Equilibre la granularidad de la partición con la cantidad de particiones

  • Alinee el esquema de particiones con los patrones de consulta más comunes

Prácticas recomendadas

Selección de la columna de partición

  • No utilice columnas de alta cardinalidad con la función de partición identity. El uso de columnas de alta cardinalidad con particionamiento por identidad crea muchas particiones pequeñas, lo que puede degradar significativamente el rendimiento de la ingestión. Las columnas de alta cardinalidad pueden incluir:

    • Claves principales

    • Campos de marca de tiempo (como LastModifiedTimestamp, CreatedDate)

    • Marcas de tiempo generadas por el sistema

  • No seleccione varias particiones de marca de tiempo en la misma columna. Por ejemplo:

    "partitionSpec": [ {"fieldName": "col1", "functionSpec": "year", "conversionSpec" : "epoch_milli"}, {"fieldName": "col1", "functionSpec": "month", "conversionSpec" : "epoch_milli"}, {"fieldName": "col1", "functionSpec": "day", "conversionSpec" : "epoch_milli"}, {"fieldName": "col1", "functionSpec": "hour", "conversionSpec" : "epoch_milli"} ]

Selección de FunctionSpec y ConversionSpec para particionamiento

  • Especifique el ConversionSpec correcto (epoch_sec | epoch_milli | iso) que representa el formato de los valores de columna seleccionados para el particionamiento basado en marca de tiempo al usar funciones de partición basadas en marca de tiempo. AWS Glue sin ETL usa este parámetro para transformar correctamente los datos de origen al formato de marca de tiempo antes de aplicar la partición.

  • Utilice el nivel de detalle adecuado (año/mes/día/hora) en función del volumen de datos.

  • Tenga en cuenta las implicaciones de la zona horaria al utilizar las marcas de tiempo en formato ISO. AWS Glue sin ETL completa todos los valores de registro de la columna de marca de tiempo elegida con la zona horaria UTC.

Gestión de errores

Estado NEEDS_ATTENTION

Una integración pasa al estado NEEDS_ATTENTION cuando:

  • Las columnas de partición especificadas no existen en el origen

  • La conversión a marca de tiempo falla en las columnas de partición