Comparteix via


Modo de compatibilidad

Importante

Esta característica está en versión preliminar pública.

Con el modo de compatibilidad, puede leer tablas administradas de Unity Catalog, vistas materializadas y tablas de streaming desde sistemas externos, a la vez que mantiene un rendimiento óptimo en Azure Databricks. Esta característica genera automáticamente versiones de solo lectura de sus tablas a las que puede acceder cualquier cliente de Delta Lake o Iceberg.

Información general

Cuando se habilita en una tabla administrada, una tabla de streaming o una vista materializada, el modo de compatibilidad genera una versión de solo lectura de la tabla en una ubicación elegida. Esta versión de compatibilidad incluye metadatos v1 para los formatos Delta Lake y Iceberg, lo que proporciona las siguientes funcionalidades:

  • Interoperabilidad con cualquier cliente de Delta Lake: lea las tablas administradas, incluidas las tablas de streaming o las vistas materializadas, desde clientes como Amazon Athena, Microsoft Fabric, Snowflake y Amazon Redshift directamente desde el almacenamiento o a través de la API REST de Unity.
  • Interoperabilidad con cualquier cliente de Iceberg: lea las tablas administradas, incluidas las tablas de streaming o las vistas materializadas, desde clientes de Iceberg como Apache Spark, Apache Trino y Snowflake a través del catálogo REST de Iceberg.
  • Automatización automática: automatice las actualizaciones de datos y metadatos para las versiones de compatibilidad, con la capacidad de configurar intervalos de actualización a casi en tiempo real.

Prerrequisitos

Para habilitar el modo de compatibilidad en una tabla, debe usar el catálogo de Unity. Solo se admiten tablas de streaming de Catálogo de Unity, vistas materializadas de Unity Catalog y tablas administradas de Catálogo de Unity. No se admiten tablas externas del catálogo de Unity.

Además, compruebe que tiene una ubicación externa registrada en el catálogo de Unity con la configuración y los permisos adecuados:

  • La ubicación de destino debe existir en la cuenta de almacenamiento y estar vacía.
  • La ubicación de destino o cualquiera de sus carpetas primarias debe registrarse como una ubicación externa en el catálogo de Unity.
  • Debe tener CREATE EXTERNAL TABLE privilegios para la ubicación externa.
  • La ubicación de destino y las carpetas primarias o secundarias no deben haberse usado como ubicación del modo de compatibilidad para otra tabla en los últimos 7 días.

Habilitar el modo de compatibilidad en tablas

En el caso de las tablas de streaming, las vistas materializadas y los clones superficiales administrados, establezca las siguientes propiedades de tabla en el momento de la creación de la tabla.

CREATE [STREAMING TABLE | MATERIALIZED VIEW | TABLE] my_catalog.my_schema.my_table
TBLPROPERTIES(
  'delta.universalFormat.enabledFormats' = 'compatibility',
  'delta.universalFormat.compatibility.location' = '<location>'
)

Solo en el caso de las tablas administradas por el catálogo de Unity, también puede habilitar el modo de compatibilidad al modificar una tabla existente:

-- For existing managed tables
ALTER TABLE my_catalog.my_schema.my_table SET TBLPROPERTIES(
  'delta.universalFormat.enabledFormats' = 'compatibility',
  'delta.universalFormat.compatibility.location' = '<location>'
)

La primera vez tarda hasta una hora en generar una versión de compatibilidad. Puede actualizar manualmente la tabla inmediatamente para confirmar que funciona.

Nota:

Debe especificar el nombre completo de la tabla de tres partes (catalog.schema.table_name). Por ejemplo, para users.john.my_table, userses el catálogo y john es el esquema.

Comprobar si el modo de compatibilidad está habilitado

Para comprobar que el modo de compatibilidad está habilitado en la tabla, compruebe que la delta.universalFormat.enabledFormats = 'compatibility' propiedad table existe. Puede ver esta propiedad en la interfaz de usuario del Explorador de catálogos en la pestaña de detalles de la tabla.

También puede ejecutar los siguientes comandos SQL en un cuaderno:

DESC DETAIL my_catalog.my_schema.my_table
DESC EXTENDED my_catalog.my_schema.my_table

Busque estas propiedades en la salida:

  • delta.universalFormat.enabledFormats: "compatibility" : indica que el modo de compatibilidad está habilitado.
  • delta.universalFormat.compatibility.location : muestra la ubicación de la versión del modo de compatibilidad.

Configurar intervalos de actualización

En el caso de las tablas administradas por el catálogo de Unity, puede configurar la frecuencia con la que se actualiza la versión del modo de compatibilidad estableciendo el intervalo de actualización:

-- Evaluate whether a refresh is needed after every commit (fastest)
ALTER TABLE my_catalog.my_schema.my_table SET TBLPROPERTIES(
  'delta.universalFormat.enabledFormats' = 'compatibility',
  'delta.universalFormat.compatibility.location' = '<location>',
  'delta.universalFormat.compatibility.targetRefreshInterval' = '0 MINUTES'
)

-- Refresh hourly (default)
ALTER TABLE my_catalog.my_schema.my_table SET TBLPROPERTIES(
  'delta.universalFormat.enabledFormats' = 'compatibility',
  'delta.universalFormat.compatibility.location' = '<location>',
  'delta.universalFormat.compatibility.targetRefreshInterval' = '1 HOUR'
)

El intervalo de actualización predeterminado es 1 HOUR. No se recomienda establecer el intervalo de actualización inferior a 1 hora y no hará que las actualizaciones se produzcan con más frecuencia. La excepción es cuando se establece el intervalo de actualización en 0 MINUTES. En este caso, Azure Databricks comprueba si hay cambios después de cada confirmación y desencadena una actualización si es necesario.

En el caso de las tablas de streaming y las vistas materializadas, no se requiere un intervalo de actualización. El valor predeterminado es 0 MINUTES.

Nota:

Los cambios que afectan significativamente a los tiempos de actualización (como el cambio de nombre de columna o la habilitación de la ampliación de tipos) se realizan cada hora independientemente del intervalo de actualización de destino.

Actualización manual

Para desencadenar manualmente una actualización de la versión de compatibilidad:

REFRESH [TABLE | STREAMING TABLE | MATERIALIZED VIEW] my_catalog.my_schema.my_table SYNC UNIFORM

La actualización manual es útil para probar que el modo de compatibilidad funciona correctamente o para garantizar que la versión de compatibilidad esté up-to-date antes de una lectura posterior. Sin embargo, esperar las actualizaciones automáticas puede ser más rentable.

Supervisión del estado de generación de datos y metadatos

El modo de compatibilidad genera datos y metadatos de forma automática y asincrónica. En el caso de las tablas administradas por el catálogo de Unity, la generación se produce cada hora de forma predeterminada o en función del intervalo de actualización configurado. En el caso de las tablas de streaming y las vistas materializadas, la generación se produce después de las actualizaciones de la tabla cuando hay nuevas confirmaciones.

Para comprobar si los datos y metadatos se han generado correctamente:

  1. Use DESCRIBE HISTORY para buscar la versión más reciente de la tabla de origen:

    DESC HISTORY my_catalog.my_schema.my_table
    

    DESCRIBE HISTORY comando para comprobar la versión más reciente de la tabla de origen

    Este comando devuelve el historial de actualizaciones al modo de compatibilidad, incluida la versión y la marca de tiempo de Delta Lake. La fila superior contiene la versión más reciente y la marca de tiempo.

  2. Use DESCRIBE EXTENDED para buscar la versión correspondiente del modo de compatibilidad:

    DESC EXTENDED my_catalog.my_schema.my_table
    

    Describe el comando EXTENDED para comprobar la versión del modo de compatibilidad

    Busque campos en Información uniforme de compatibilidad:

    • Última versión actualizada: la versión de Delta Lake que se actualizó por última vez con el modo de compatibilidad
    • Última actualización: marca de tiempo de la última actualización

    El Modo de Compatibilidad está actualizado si la versión de la tabla coincide con la versión que se encuentra en el paso 1.

  3. Utilice DESC HISTORY directamente en la versión de compatibilidad.

    DESC HISTORY delta.\`<compatibility_location>\`
    

    DESCRIBE HISTORY comando para comprobar el historial de versiones de compatibilidad

  4. En el Explorador de catálogos, vea los campos de metadatos de la versión de compatibilidad. El modo de compatibilidad está actualizado si la versión de Delta Lake coincide con la versión que se encuentra en el paso 3.

    Comprobación de la versión de metadatos de tabla más reciente

Supervisión de costos

La optimización predictiva controla el clúster de proceso que realiza actualizaciones automáticas para el modo de compatibilidad. Para ver los costos asociados, consulte las tablas de facturación del sistema:

SELECT
  DATE_TRUNC('DAY', start_time) AS day,
  SUM(usage_quantity) AS dbus
FROM
  system.storage.predictive_optimization_operations_history
WHERE
  operation_type = "COMPATIBILITY_MODE_REFRESH"
GROUP BY 1
ORDER BY 1 DESC;

Esta consulta informa solo sobre el uso de los refrescos automáticos. Los costos de las actualizaciones manuales están asociados con sus recursos de computación, y no hay una manera directa de realizar un seguimiento separado de esos costos. Por lo general, el costo de un desencadenador manual es proporcional al costo de la operación de escritura inicial en la tabla original.

Eliminación de archivos de datos sin usar

Para quitar archivos de datos sin usar en la versión de compatibilidad de la tabla, use VACUUM:

VACUUM delta.'<compatibility_mode_location_path>';

Para encontrar la ubicación de la ruta de acceso del modo de compatibilidad, use el DESCRIBE EXTENDED comando dentro de Comprobar si el modo de compatibilidad está habilitado. En la salida, el valor de delta.universalFormat.compatibility.location es la ubicación.

Leer versiones de compatibilidad de clientes externos

Puede usar cualquier cliente de Delta Lake o Iceberg para leer datos de versiones de compatibilidad. A continuación encontrará ejemplos de Amazon Athena, Snowflake (lector delta) y Fabric.

Amazon Athena

  1. En el Editor de consultas de Athena, cree una tabla externa con la ubicación especificada:

    CREATE EXTERNAL TABLE <table_name>
    LOCATION '<compatibility_location>'
    TBLPROPERTIES ('table_type' = 'DELTA')
    
  2. Lea la tabla:

    SELECT * FROM <table_name>
    

Lector de Snowflake Delta Lake

  1. Cree la integración de almacenamiento para acceder a la ubicación de almacenamiento (consulte la documentación de Snowflake).

  2. Cree una tabla externa con formato Delta Lake:

    CREATE OR REPLACE EXTERNAL TABLE <table_name>
    WITH LOCATION = @<my_location>
    FILE_FORMAT = (TYPE = PARQUET)
    TABLE_FORMAT = DELTA
    AUTO_REFRESH = false
    REFRESH_ON_CREATE = false;
    
  3. Actualice la tabla (no se admite la actualización automática para el formato Delta Lake en Snowflake):

    ALTER EXTERNAL TABLE <table_name> REFRESH;
    
  4. Lea la tabla:

    SELECT * FROM <table_name>;
    

Microsoft Fabric

  1. Cree una capacidad de Fabric, un área de trabajo y un cuaderno de Synapse.

  2. Crear un lakehouse con datos en la ubicación compatible.

  3. Lea los archivos como una tabla de Delta Lake:

    spark.read.format("delta").load("Files/<path_to_data>")
    

Lectura de versiones de compatibilidad desde la API REST de Unity

Las tablas con el modo de compatibilidad habilitado se pueden leer por nombre a través de la API REST de Unity con parámetros especiales. Para las tablas de streaming, establezca el siguiente parámetro de API:

GET /api/2.1/unity-catalog/tables/{full_name}?read_streaming_table_as_managed=true

Para las vistas materializadas, establezca el siguiente parámetro de API:

GET /api/2.1/unity-catalog/tables/{full_name}?read_materialized_view_as_managed=true

Lectura de versiones compatibles del catálogo REST de Iceberg

Las tablas con el modo de compatibilidad habilitado se pueden leer desde cualquier cliente de Alias mediante el catálogo REST de Alias. El modo de compatibilidad funciona automáticamente para los formatos de tabla Delta Lake e Iceberg.

Requisitos de configuración

  1. Habilite el acceso a datos externos en el metastore.
  2. Conceda EXTERNAL USE SCHEMA privilegio en el esquema.
  3. Cree un token de acceso personal (PAT) de Azure Databricks.

Configuración de Apache Spark

bin/spark-sql --packages org.apache.iceberg:iceberg-spark-runtime-3.5_2.12:1.8.0,org.apache.iceberg:iceberg-azure-bundle:1.8.0 \
  --conf "spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions" \
  --conf spark.sql.catalog.catalog_name=org.apache.iceberg.spark.SparkCatalog \
  --conf spark.sql.catalog.catalog_name.type=rest \
  --conf spark.sql.catalog.catalog_name.uri=<workspace-url>/api/2.1/unity-catalog/iceberg-rest \
  --conf spark.sql.catalog.catalog_name.token=<PAT> \
  --conf spark.sql.catalog.catalog_name.warehouse=<uc-catalog-name>

Para obtener más información, consulte Uso de tablas de Iceberg con Apache Spark.

Configuración de Snowflake

CREATE OR REPLACE CATALOG INTEGRATION my_uc_int
  CATALOG_SOURCE = ICEBERG_REST
  TABLE_FORMAT = ICEBERG
  CATALOG_NAMESPACE = '<uc-schema-name>'
  REST_CONFIG = (
    CATALOG_URI = '<workspace-url>/api/2.1/unity-catalog/iceberg-rest'
    CATALOG_NAME = '<uc-catalog-name>'
    ACCESS_DELEGATION_MODE = VENDED_CREDENTIALS
  )
  REST_AUTHENTICATION = (
    TYPE = BEARER
    BEARER_TOKEN = '<PAT>'
  )
  ENABLED = TRUE;

CREATE OR REPLACE ICEBERG TABLE my_table
  CATALOG = 'my_uc_int'
  CATALOG_TABLE_NAME = '<uc-st/mv-name>';

Deshabilitar el modo de compatibilidad

Para deshabilitar el modo de compatibilidad, desconjunte la propiedad de tabla correspondiente:

-- For UC managed tables
ALTER TABLE my_table UNSET TBLPROPERTIES('delta.universalFormat.enabledFormats')

-- For streaming tables and materialized views
CREATE OR REPLACE [STREAMING TABLE | MATERIALIZED VIEW] my_table
TBLPROPERTIES('delta.universalFormat.enabledFormats' = '')

Advertencia

Desactivar el modo de compatibilidad detiene inmediatamente la generación de datos y metadatos. Después de 7 días, se eliminarán los datos y metadatos asociados. Dentro de este período de 7 días, puede restaurar los datos y los metadatos si vuelve a habilitar el modo de compatibilidad en la misma tabla.

Limitaciones

  • Acceso de solo lectura: la versión de compatibilidad es de solo lectura. No es posible escribir en la versión de compatibilidad.
  • No se admite RLS/CLS: no se puede habilitar el modo de compatibilidad en tablas con seguridad de Row-Level (RLS) o seguridad de Column-Level (CLS).
  • No se admite el cambio de nombre de columna de partición: no se admite el cambio de nombre de columna de partición en tablas con el modo de compatibilidad habilitado. Se admite el cambio de nombre de columna de datos.
  • Características de tabla limitadas: las siguientes funcionalidades no están disponibles en la versión de compatibilidad:
    • Columnas de colación
    • Claves principales
    • Viaje en el tiempo
    • Cambio de fuente de distribución de datos
    • Nombres de columna con caracteres especiales (se cambiará el nombre)