Compartir a través de


Conversión de una tabla externa en una tabla de catálogo de Unity administrada

Importante

Esta característica está en versión preliminar pública y solo está disponible para los clientes participantes en este momento. Para participar en la versión preliminar, aplíquelo rellenando este formulario. Esta característica solo admite la conversión de tablas externas federadas mediante HMS y Glue Federation.

En esta página se describe cómo usar SET MANAGED para convertir una tabla externa en una tabla administrada.

Información general de SET MANAGED

Use la SET MANAGED característica para convertir una tabla externa en una tabla administrada de Unity Catalog en Azure Databricks. SET MANAGED ofrece las ventajas siguientes:

  • Conservar el historial de tablas.
  • Mantener las mismas configuraciones de tabla, incluidos el mismo nombre, configuración, permisos y vistas.
  • Beneficiarse de la optimización predictiva. Al convertir una tabla en administrada, la optimización predictiva se establece en INHERIT, lo que significa que hereda la configuración del nivel de esquema o catálogo. De forma predeterminada, esto está deshabilitado actualmente. Puede habilitar la optimización predictiva en la tabla convertida mediante la ejecución ALTER TABLE <table_name> ENABLE PREDICTIVE OPTIMIZATIONde , que lo establece en ENABLED en lugar de INHERIT.

Prerrequisitos

  • Formato de datos: el formato de datos de la tabla externa debe ser Delta Lake. Para realizar una conversión única para Parquet, consulte Conversión a Delta Lake.
  • Tipo de tabla: el tipo de tabla HMS debe ser una tabla externa HMS. El comando produce un error si la tabla es una tabla HMS administrada.
  • Runtime: Databricks Runtime 17.3 o superior
  • Permisos: OWNER o MANAGE permisos en la tabla y CREATE el permiso en EXTERNAL LOCATION

Syntax

Para convertir la tabla externa del catálogo de Unity en una tabla gestionada por Unity Catalog, ejecute el siguiente comando:

ALTER TABLE source_table SET MANAGED {MOVE | COPY}

Parámetros

  • source_table

    Una tabla externa existente en el catálogo de Unity. Las tablas externas contienen datos y metadatos administrados por un catálogo externo. Antes de la conversión, si elimina la tabla de origen en el catálogo externo, la tabla externa de referencia también se elimina en el Unity Catalog. Después de convertir la tabla en administrada, eliminar la tabla de origen en el catálogo externo no afecta a la tabla administrada del Unity Catalog.

  • MOVE

    Convierte la tabla en administrada y deshabilita el acceso a la tabla de origen en el catálogo externo.

    • ** El acceso a través del catálogo externo o el acceso basado en ruta falla después de que la tabla se convierte. Todos los lectores y escritores de la tabla deben utilizar el espacio de nombres de Unity Catalog para acceder.

    • Todos los lectores y escritores deben usar el acceso basado en nombres. Por ejemplo:

      SELECT * FROM catalog_name.schema_name.table_name;
      
    • No se admite el acceso basado en rutas y falla después de convertir la tabla. Por ejemplo:

      SELECT * FROM delta.`protocol://path/to/table`;
      
    • Los clientes externos (que no son de Azure Databricks) deben admitir lecturas en tablas administradas de Unity Catalog. Consulte Modo de compatibilidad.

    • Use el panel de Access Insights para ver si los lectores y escritores que acceden a las tablas son Databricks Runtime o clientes externos que no son de Azure Databricks.

    • Los lectores y escritores de Azure Databricks deben usar Databricks Runtime 15.4 LTS o superior. Si los lectores o escritores usan Databricks Runtime 14.3 LTS o versiones posteriores, consulte Opción alternativa para lectores y escritores en Databricks Runtime 14.3 LTS o versiones posteriores.

    • El tiempo de inactividad puede ocurrir cuando quienes leen o escriben acceden a una tabla durante la conversión. Para obtener más información, vea Convertir una tabla externa en una tabla de catálogo de Unity administrada.

    • Si se interrumpe el comando, la tabla podría dejarse como una tabla externa, ya que la conversión a administrada estaba incompleta. Para completar el comando, vuelva a ejecutar SET MANAGED en la tabla externa.

    • La optimización predictiva se establece en INHERIT menos que la configure manualmente. Para comprobar si la optimización predictiva está habilitada, consulte Comprobación de si la optimización predictiva está habilitada.

    • Reversión: para revertir la migración de la tabla y recuperar el acceso a la tabla de origen en el catálogo externo, ejecute el UNSET MANAGED comando . La tabla se convierte en una tabla externa después de ejecutar el comando . Para devolver la tabla a una tabla externa, quite la tabla y se volverá a federar como externa en la siguiente sincronización del catálogo.

      ALTER TABLE catalog.schema.my_managed_table UNSET MANAGED
      

      Advertencia

      Debe ejecutar UNSET MANAGED antes de quitar la tabla. Eliminar la tabla sin ejecutar UNSET MANAGED primero puede dejar el sistema en un estado inestable y puede provocar pérdida de datos o incoherencias.

    • Si realiza un rollback, las confirmaciones que realizó en la ubicación externa entre la conversión y el rollback son accesibles por versión, pero no por marca de tiempo. Siete días después de la reversión, se eliminan los datos de la ubicación administrada. Para lectores y escritores en Databricks Runtime 15.4 LTS o versiones posteriores, el historial de tablas de confirmaciones realizadas después de la conversión, pero antes de la reversión es desplazable por versión, pero no por marca de tiempo.

    • Después de la conversión de tablas, deberá:

      • Reinicie los trabajos de transmisión (lectura o escritura) utilizando la tabla externa.
      • Asegúrese de que los lectores y escritores trabajen con la tabla administrada.
  • COPY

    Convierte la tabla en administrada sin modificar ni deshabilitar el acceso a la tabla de origen en el catálogo externo.

    • Durante la conversión a administrada, los datos de la tabla de origen se copian en la ubicación de almacenamiento administrada definida para la tabla externa, creando dos copias independientes: la nueva tabla administrada y la tabla de origen en el catálogo externo.
    • A diferencia de MOVE dónde se produce un error en las lecturas y escrituras, al usar COPY, es responsable de deshabilitar correctamente las lecturas y escrituras en la tabla de origen del catálogo externo y asegurarse de que las cargas de trabajo se han migrado al nuevo catálogo.
    • Reversión: para revertir la migración de la tabla, no es necesario ejecutar el UNSET MANAGED comando, ya que la tabla de origen no se ha interrumpido en el catálogo externo. Elimine la tabla y se federará nuevamente como extranjera en la siguiente sincronización del catálogo.

Comprobación de la conversión

Puede confirmar que la tabla externa se ha convertido en una tabla administrada:

DESCRIBE EXTENDED catalog_name.schema_name.table_name

Si la tabla se ha convertido, el Type bajo col_name se muestra como MANAGED bajo data_type.

Limitaciones conocidas

La conversión de tablas externas en tablas administradas tiene las siguientes limitaciones:

  • Clientes de streaming: debe reiniciar los trabajos de streaming después de la conversión.

  • Varias regiones de nube: si la ubicación administrada predeterminada del metastore, el catálogo o el esquema del catálogo de Unity se encuentra en una región de nube diferente de la ubicación de almacenamiento de la tabla externa que se está convirtiendo, puede incurrir en costos adicionales de transferencia de datos entre regiones. El proveedor de nube impone estos cargos fuera del control de Azure Databricks. Para comprobar las ubicaciones del esquema, el catálogo y la metastore, use los siguientes comandos:

    -- Check schema location
    DESCRIBE SCHEMA EXTENDED catalog_name.schema_name;
    
    -- Check catalog location
    DESCRIBE CATALOG EXTENDED catalog_name;
    
    -- Check metastore location
    DESCRIBE METASTORE;
    

Preguntas más frecuentes

¿Puedo crear tablas, así como convertir tablas en un catálogo externo?

Sí, puede crear tablas externas o administradas en un catálogo externo. El comportamiento depende de la configuración del esquema:

  • Para los esquemas Glue o eHMS, o para esquemas con una ubicación administrada establecida en el catálogo de Unity: si ejecuta CREATE TABLE foreign_catalog.schema.table, se crea una tabla administrada o externa del catálogo de Unity. La tabla no se envía ni se sincroniza con el catálogo externo.
  • Para esquemas de conexiones internas de metastore de Hive: si intenta crear una tabla en un esquema extranjero, sigue creando una tabla extranjera y también crea una tabla en hive_metastore.
  • Para el metastore de Hive de la área de trabajo heredada: dado que es una federación de lectura y escritura, si se crea una tabla en el catálogo externo, también se crea una tabla en el metastore interno de Hive.

¿Qué ocurre si mis tablas externas están respaldadas por DBFS?

Al convertir una tabla respaldada por DBFS, almacenamos la asignación actual de la ruta de acceso de DBFS a la ruta de acceso a la nube como ubicación de la ruta de acceso a la nube de la tabla externa.

¿Puedo cambiar al nivel de esquema o catálogo?

Puede recorrer en iteración las tablas de los esquemas para convertir individualmente o usar el proyecto discoverx labs para convertir esquemas completos o catálogos a la vez:

df = (dx.from_tables("prod.*.*")
.with_sql("ALTER TABLE {full_table_name} SET MANAGED;")
.apply())