Apache Iceberg™ v3, ahora aprobado por la comunidad de Apache Iceberg™, introduce nuevas funciones avanzadas y tipos de datos. Iceberg v3 incluye mejoras importantes como vectores de eliminación, linaje de filas y nuevos tipos para datos semiestructurados y casos de uso geoespaciales. Estas funciones permiten a los clientes procesar y consultar datos de forma eficiente. Además, estas mejoras son coherentes en Delta Lake, Apache Parquet y Apache Spark™, por lo que los clientes pueden interoperar entre Delta y Apache Iceberg™ sin reescribir datos ni eliminar archivos a nivel de fila.
En esta entrada de blog, cubrimos las novedades de Iceberg v3:
Iceberg v3 introduce un nuevo formato para las eliminaciones a nivel de fila para mejorar el rendimiento de lectura: vectores de eliminación. Las eliminaciones a nivel de fila reducen significativamente la amplificación de escritura al optimizar cómo se almacenan y rastrean las filas eliminadas, lo que conduce a una ETL e ingesta más rápidas. En Iceberg v2, no se requería que los motores compactaran los archivos de eliminación durante las escrituras. La intención era que los clientes utilizaran el mantenimiento asíncrono. Sin embargo, muchos clientes no programaron los servicios de mantenimiento, por lo que sus tablas tenían demasiados archivos de eliminación sin mantener. Esto condujo a un rendimiento de lectura lento cuando los motores tenían que fusionar muchos archivos de eliminación a nivel de fila en la lectura.
Iceberg v3 introduce un nuevo formato de vector de eliminación y nuevos requisitos de compactación para los archivos de eliminación. Este nuevo formato evita la traducción entre los archivos Parquet y las representaciones en memoria utilizadas para aplicar las eliminaciones. Además, los motores deben mantener un único vector de eliminación por archivo en el momento de la escritura. Este requisito mejora el rendimiento y las estadísticas de los archivos de datos. Esto también facilita la comparación de las eliminaciones anteriores y actuales, lo que simplifica el procesamiento de los cambios a nivel de fila de una tabla como una transmisión.
Otra característica importante de Iceberg v3 es el linaje de filas, que se utiliza para simplificar el procesamiento incremental. Con el linaje de filas, los motores encuentran los cambios a nivel de fila haciendo coincidir las versiones de las filas entre las confirmaciones.
Iceberg v3 introduce el linaje de filas utilizando metadatos a nivel de fila: un ID de fila y el número de secuencia cuando la fila se modificó o añadió por última vez. Los ID identifican la misma fila en todas las versiones. Los números de secuencia anotan cuándo se cambiaron las filas por última vez, no solo se reubicaron entre archivos. Esto permite a los motores procesar los cambios de forma selectiva, lo que simplifica las actualizaciones posteriores con flujos de trabajo más rápidos y económicos.
La información del ID de fila es especialmente beneficiosa cuando se combina con objetos de procesamiento incremental como las vistas materializadas. Estos objetos están optimizados para calcular solo los datos nuevos o modificados desde el último ciclo de procesamiento.
Iceberg v3 también añade nuevos tipos de datos para datos semiestructurados y datos geoespaciales.
Los datos semiestructurados son difíciles de almacenar porque tienen esquemas variables, que no encajan en las columnas de tablas estructuradas. Una solución es extraer campos individuales de estos datos en un formato estructurado. Sin embargo, esto crea tablas extremadamente anchas con muchas columnas y valores NULL debido a esquemas inconsistentes. Otra alternativa es almacenar JSON en columnas de cadena. Desafortunadamente, esto resulta en un rendimiento de lectura deficiente porque los motores deben analizar los datos de estas cadenas. Sin tipos de datos semiestructurados, los motores no pueden insertar filtros, por lo que necesitan leer cada fila de cada archivo de datos. Iceberg v3 introduce VARIANT para representar los datos semiestructurados de forma eficiente. VARIANT codifica la estructura de los datos para mejorar el rendimiento al tiempo que mantiene la flexibilidad del esquema.
Del mismo modo, los datos geoespaciales (información asociada con ubicaciones en la superficie de la Tierra, como carreteras, parques o límites de ciudades) también son difíciles de trabajar y consultar de forma eficiente. Sin tipos geoespaciales, los clientes tenían que utilizar columnas binarias para almacenar ubicaciones de geodatos. Sin embargo, esta representación no admitía la búsqueda geográfica, ya que las columnas binarias no se pueden filtrar para encontrar objetos dentro de un área determinada. Iceberg v3 resuelve este problema introduciendo nuevos tipos de datos de geometría y geografía. Los tipos de geometría son para datos espaciales planos, mientras que los tipos de geografía son para datos globales que tienen en cuenta la curvatura de la tierra. Con estos tipos, los clientes encuentran fácilmente datos utilizando cuadros delimitadores que representan regiones geográficas y localizan eficientemente objetos geoespaciales.
Las nuevas funciones y tipos de datos de Iceberg v3 amplían la funcionalidad y mejoran el rendimiento. Estas características de Apache Iceberg también son importantes porque impulsan la interoperabilidad entre los formatos de lakehouse.
Históricamente, los clientes se han visto obligados a elegir entre dos de los formatos de lakehouse más populares: Delta Lake y Apache Iceberg. Esto se debe a que la mayoría de las plataformas solo admiten un formato. La reescritura de datos puede ser costosa y poco práctica a escala, lo que hace que esta elección sea a largo plazo. Los formatos son muy similares: ambos son capas de metadatos sobre archivos de datos Parquet para proporcionar semántica de tabla. Sin embargo, las pequeñas diferencias en los formatos de tabla causan problemas a los clientes.
Iceberg v3 unifica la capa de datos en todos los formatos. Con la unificación de datos, los clientes pueden interoperar entre Delta e Iceberg sin necesidad de reescribir datos ni eliminar archivos. Esto se debe a que las características de Iceberg v3 tienen implementaciones compatibles en Delta Lake, Apache Parquet y Apache Spark:
VARIANT y geodata se están desarrollando en las comunidades ascendentes de Apache Parquet y Apache Spark™, lo que se extiende a Apache Iceberg y Delta LakeAl tener características compatibles en todos los proyectos de código abierto, Iceberg v3 evita obligar a los clientes a elegir un formato. En cambio, los clientes pueden interoperar libremente entre formatos en una copia de sus datos.
Iceberg v3 hace avanzar a toda la industria hacia un mundo más eficiente, capaz e interoperable. Estamos integrando Iceberg v3 en la Databricks Data Intelligence Platform y esperamos que otros proveedores adopten Iceberg v3. El código abierto es un valor fundamental en Databricks, donde contribuimos activamente con características como los vectores de eliminación a Iceberg v3. Para fomentar una comunidad de código abierto próspera, apoyamos y fomentamos las contribuciones a Apache Iceberg. Para los nuevos colaboradores, recomendamos comenzar con un “buen primer problema”.
Para obtener información sobre cómo planeamos integrar las características de Iceberg v3 en nuestra oferta de tablas administradas y el futuro de los formatos de tabla abiertos, regístrese en el Data and AI Summit del 9 al 12 de junio de 2025.
(Esta entrada del blog ha sido traducida utilizando herramientas basadas en inteligencia artificial) Publicación original
