Compartir a través de


¿Qué es Apache Iceberg en Azure Databricks?

Important

Tablas Iceberg administradas por Unity Catalog están disponibles en versión preliminar pública en Databricks Runtime 16.4 LTS y versiones posteriores. Las tablas extranjeras de Iceberg también están en Public Preview en Databricks Runtime 16.4 LTS y superior.

Las características de Iceberg v3 están disponibles en versión preliminar pública en Databricks Runtime 18.0 y versiones posteriores. Consulte Uso de las características de Apache Iceberg v3.

Apache Iceberg es un formato de tabla de código abierto para cargas de trabajo de análisis. Admite características como la evolución del esquema, el viaje en el tiempo y la creación de particiones ocultas. Al igual que Delta Lake, Iceberg proporciona una capa de abstracción que permite transacciones ACID en datos almacenados en almacenamiento de objetos. Azure Databricks es compatible con las tablas de Iceberg que usan el formato de archivo Apache Parquet. Iceberg mantiene la atomicidad y la coherencia escribiendo nuevos archivos de metadatos para cada cambio de tabla.

Un catálogo de Iceberg es la capa de nivel más alto de la arquitectura de la tabla Iceberg. Controla las operaciones como crear, quitar y cambiar el nombre de las tablas. Su responsabilidad principal es proporcionar los metadatos actuales cuando se carga una tabla. Azure Databricks admite tablas de Iceberg administradas por:

Todas las tablas de Iceberg de Azure Databricks siguen la especificación del formato de tabla Iceberg abierto. Consulte la especificación de la tabla de Iceberg.

Creación de tablas de Iceberg en el catálogo de Unity

Las tablas Iceberg creadas en el catálogo de Unity son tablas de Iceberg administradas. Puede crear estas tablas mediante:

Las tablas de Iceberg administradas están totalmente integradas con las características de la plataforma Azure Databricks. Unity Catalog administra tareas de ciclo de vida como la expiración de instantáneas y la compactación de archivos en estas tablas. Las tablas Iceberg administradas también admiten clustering líquido, que mejora el rendimiento de las consultas. La optimización predictiva automatiza estas tareas para reducir los costos de almacenamiento y mejorar la velocidad de las consultas. Databricks recomienda usar los clientes de Iceberg 1.9.2 y versiones posteriores para leer y escribir en el catálogo de Unity.

Leer tablas de Iceberg administradas por otros catálogos

Una tabla externa de Iceberg es una tabla de Iceberg administrada por un catálogo fuera del catálogo de Unity. El catálogo externo almacena los metadatos actuales de la tabla. Azure Databricks usa Lakehouse Federation para recuperar metadatos y leer la tabla del almacenamiento de objetos.

Las tablas Iceberg extranjeras son de solo lectura en Azure Databricks y cuentan con soporte limitado en la plataforma.

Obtener acceso a tablas de Iceberg mediante sistemas externos

Puede tener acceso a todas las tablas de Iceberg en el catálogo de Unity mediante la API de catálogo REST de Iceberg. Esta API abierta admite operaciones de lectura y escritura desde motores de Iceberg externos en diferentes lenguajes y plataformas. Consulte Cómo acceder a tablas de Azure Databricks desde clientes de Apache Iceberg.

El catálogo REST admite el provisionamiento de credenciales, que entrega credenciales temporales a mecanismos externos para acceder al almacenamiento subyacente. Para obtener más información, consulte Venta de credenciales de Unity Catalog para el acceso a sistemas externos.

Advertencia

La distribución de credenciales no se admite en espacios de trabajo que utilizan almacenamiento predeterminado. Consulte Limitaciones.

Evolución de las particiones

Con la evolución de las particiones, puede cambiar el esquema de creación de particiones de una tabla de Apache Iceberg existente sin volver a escribir datos. Los nuevos datos se escriben con el diseño de partición actualizado y los datos existentes conservan su diseño de partición original. Apache Iceberg realiza un seguimiento de las especificaciones de partición y aplica el filtro correcto en el momento de la consulta. Consulte la evolución de las particiones para Apache Iceberg.

Nota:

La evolución de las particiones se admite en las tablas administradas mediante motores externos de Iceberg utilizando el catálogo REST de Iceberg, pero no a través de Databricks SQL. Las transformaciones de partición basadas en expresiones, como years() y, bucket() no se admiten para las tablas administradas de Iceberg. Consulte Limitaciones de la tabla de Iceberg.

Para configurar el acceso externo, consulte Acceder a las tablas de Azure Databricks desde clientes de Apache Iceberg.

En los ejemplos siguientes se muestra cómo usar la evolución de las particiones con Spark SQL y la extensión Docker. Para ver la sintaxis de evolución de las particiones de Apache Iceberg y las transformaciones admitidas, consulte DDL de Apache Spark.

Agregar un campo de partición

Para agregar un nuevo campo de partición a una tabla existente:

ALTER TABLE catalog.schema.table ADD PARTITION FIELD column_name;

Quitar un campo de partición

Para quitar un campo de partición existente de una tabla:

ALTER TABLE catalog.schema.table DROP PARTITION FIELD column_name;

Reemplazar un campo de partición

Para intercambiar un campo de partición por otro sin una repartición intermedia:

ALTER TABLE catalog.schema.table REPLACE PARTITION FIELD old_column WITH new_column;

Limitaciones de la tabla de Iceberg

Las siguientes limitaciones se aplican a las tablas de Iceberg en Azure Databricks y están sujetas a cambios:

  • Las tablas de Iceberg solo admiten el formato de archivo Apache Parquet.
  • Azure Databricks es compatible con las versiones 1, 2 y 3 de la especificación de Iceberg.
    • Para ver las limitaciones específicas de la versión 3, consulte Limitaciones.
  • No se admiten las eliminaciones por posición ni las eliminaciones basadas en igualdad de Iceberg V2. En su lugar, Azure Databricks admite vectores de eliminación de Iceberg v3 para eliminaciones de nivel de fila.
  • La ramificación y el etiquetado no son compatibles. Solo se puede acceder a la rama principal cuando se leen tablas Iceberg externas.
  • Particionamiento
    • La evolución de particiones solo se admite en tablas Iceberg administradas cuando se interactúa desde motores Iceberg externos.
    • Las tablas Iceberg extranjeras no admiten la evolución de particiones.
    • No se admite la creación de particiones por BINARY tipo.
  • No se admiten las vistas.
  • No se admiten los siguientes tipos de datos:
    • UUID
    • Fixed(L)
    • TIME
    • Anidación STRUCT con campos obligatorios

Limitaciones de las tablas Iceberg administradas

Las limitaciones siguientes se aplican específicamente a las tablas de Iceberg administradas:

  • No se admite la búsqueda vectorial.
  • Iceberg no admite el feed de cambios de datos. Como resultado, no se admite el procesamiento incremental al leer las tablas Iceberg administradas como origen para:
    • Vistas materializadas y tablas de streaming
    • Generación de perfiles de datos
    • Tablas en línea
    • Lakebase
    • Clasificación de datos
  • Las tablas de Iceberg administradas solo se pueden crear si la optimización predictiva está habilitada para el mantenimiento de tablas.
  • El catálogo de Unity administra las siguientes propiedades de tabla y no se puede establecer manualmente:
    • write.location-provider.impl
    • write.data.path
    • write.metadata.path
    • write.format.default
    • write.delete.format.default
  • No se admite el códec de compresión para cambiar la compresión de tabla. Todas las tablas usan Zstd de forma predeterminada.
  • No se admite la creación de particiones por expresiones (por ejemplo, years(), months(), days(), hours(), ). bucket()
  • Las características que no se admiten en Apache Iceberg tampoco están disponibles para las tablas de Iceberg administradas. Esto incluye columnas generadas de Delta Lake, restricciones en Azure Databricks y soporte de intercalación para Delta Lake.

Limitaciones de las tablas Iceberg externas

Las siguientes limitaciones se aplican específicamente a las tablas de Iceberg externas:

  • El viaje en el tiempo solo se admite para las instantáneas de Iceberg que se han leído anteriormente en Azure Databricks (es decir, instantáneas en las que se ejecutó una instrucción con SELECT).
  • El uso de funciones de transformación de cubos para la creación de particiones de Iceberg puede degradar el rendimiento de las consultas cuando se usan filtros condicionales.
  • Los productos de almacenamiento en la nube como Amazon S3 no están integrados con tablas Iceberg externas. El acceso a las tablas de Iceberg externas en Azure Databricks puede restaurar los datos archivados en niveles de almacenamiento de menor costo.
  • En clústeres de modo de acceso dedicado, las operaciones de lectura y REFRESH FOREIGN TABLE en tablas Iceberg requieren ALL PRIVILEGES.