Crear y trabajar con volúmenes

En este artículo se presentan volúmenes, que son objetos de Unity Catalog que permiten la gobernanza en conjuntos de datos no tabulares. También se describe cómo crear, administrar y trabajar con volúmenes.

Para obtener más información sobre cómo cargar y administrar archivos en volúmenes, consulte Carga de archivos en un volumen de Catálogo de Unity y operaciones de administración de archivos para volúmenes de Catálogo de Unity.

Nota:

Al trabajar con volúmenes, se debe usar un almacén SQL o un clúster en el que se ejecute Databricks Runtime 13.3 LTS o una versión posterior, a menos que se usen las interfaces de usuario de Azure Databricks, como el Explorador de catálogo.

¿Qué son los volúmenes de Unity Catalog?

Los volúmenes son objetos de Unity Catalog que representan un volumen lógico de almacenamiento en una ubicación de almacenamiento de objetos en la nube. Los volúmenes proporcionan funcionalidades para acceder, almacenar, gobernar y organizar archivos. Mientras que las tablas proporcionan gobernanza sobre conjuntos de datos tabulares, los volúmenes agregan gobernanza sobre conjuntos de datos no tabulares. Puede usar volúmenes para almacenar archivos en cualquier formato, incluidos datos estructurados, semiestructurados y no estructurados, así como acceder a ellos.

Importante

No se pueden usar volúmenes como ubicación para las tablas. Los volúmenes están diseñados solo para el acceso a datos basado en rutas de acceso. Use tablas para almacenar datos tabulares con Unity Catalog.

¿Qué es un volumen administrado?

Un volumen administrado es un volumen de almacenamiento regulado por Unity Catalog y creado en la ubicación de almacenamiento predeterminada del esquema contenedor. Los volúmenes administrados permiten la creación de almacenamiento regulado para trabajar con archivos sin la sobrecarga de ubicaciones externas y credenciales de almacenamiento. No es necesario especificar una ubicación para crear un volumen administrado, y el acceso a todos los archivos de los datos de los volúmenes administrados se realiza a través de rutas de acceso administradas por Unity Catalog. Consulte ¿Qué ruta de acceso se usa para acceder a los archivos de un volumen?.

Al eliminar un volumen administrado, los archivos almacenados en este volumen también se eliminan del inquilino en la nube en un plazo de 30 días.

¿Qué es un volumen externo?

Un volumen externo es un volumen de almacenamiento regulado por Unity Catalog y registrado en un directorio de una ubicación externa mediante credenciales de almacenamiento reguladas por Unity Catalog. Los volúmenes externos permiten agregar la gobernanza de datos de Unity Catalog a los directorios de almacenamiento de objetos en la nube existentes. Entre los casos de uso de los volúmenes externos se incluyen los siguientes:

  • Adición de gobernanza a los archivos de datos sin migración.
  • Gobernanza de archivos generados por otros sistemas y que se deben ingerir o a los que se debe tener acceso mediante Azure Databricks.
  • Gobernanza de los datos generados por Azure Databricks a los que otros sistemas deben tener acceso directamente desde el almacenamiento de objetos en la nube.

Los volúmenes externos deben ser directorios dentro de ubicaciones externas reguladas por las credenciales de almacenamiento de Unity Catalog. Unity Catalog no administra el ciclo de vida ni el diseño de los archivos de los volúmenes externos. Cuando se anula una tabla externa, Unity Catalog no elimina los datos subyacentes.

Nota:

Al definir un volumen, el acceso URI de nube a los datos de la ruta de acceso del volumen se rige por los permisos del volumen.

¿Qué ruta de acceso se usa para acceder a los archivos de un volumen?

La ruta de acceso a los volúmenes es la misma tanto si se usa Apache Spark, SQL o Python como otros lenguajes y bibliotecas. Esto difiere de los patrones de acceso heredados para los archivos del almacenamiento de objetos enlazados a un área de trabajo de Azure Databricks.

La ruta de acceso a los archivos de los volúmenes tiene el siguiente formato:

/Volumes/<catalog>/<schema>/<volume>/<path>/<file-name>

Azure Databricks también admite un esquema dbfs:/ opcional al trabajar con Apache Spark, por lo que también funciona la siguiente ruta de acceso:

dbfs:/Volumes/<catalog>/<schema>/<volume>/<path>/<file-name>

La secuencia /<catalog>/<schema>/<volume> de la ruta de acceso corresponde a los tres nombres de objeto de Unity Catalog asociados al archivo. Estos elementos de ruta de acceso son de solo lectura y no los pueden escribir directamente los usuarios, lo que significa que no es posible crear o eliminar estos directorios mediante operaciones del sistema de archivos. Se administran automáticamente y se mantienen sincronizados con las entidades de Unity Catalog correspondientes.

Nota:

También puede acceder a los datos de volúmenes externos mediante URI de almacenamiento en la nube.

¿Cuáles son los privilegios de los volúmenes?

Los volúmenes usan el mismo modelo de privilegios básico que las tablas, pero los privilegios de las tablas se centran en conceder acceso para consultar y manipular filas de una tabla, mientras que los privilegios para los volúmenes se centran en el trabajo con archivos. Por lo tanto, los volúmenes presentan los siguientes privilegios:

Consulte Privilegios de Unity Catalog y objetos protegibles.

¿Quién puede administrar los privilegios de los volúmenes?

Para administrar los privilegios de un volumen o anularlo, es necesario tener privilegios de propietario del mismo. Cada objeto de Unity Catalog solo puede tener una entidad de seguridad asignada como propietaria, y aunque la propiedad no se aplica en cascada (es decir, el propietario de un catálogo no se convierte automáticamente en propietario de todos los objetos de ese catálogo), los privilegios asociados a la propiedad se aplican a todos los objetos contenidos en un objeto.

Esto significa que en el caso de los volúmenes de Unity Catalog, los privilegios de los volúmenes los podrán administrar las siguientes entidades de seguridad:

  • Propietario del catálogo primario.
  • Propietario del esquema primario.
  • Propietario del volumen.

Aunque cada objeto solo puede tener un único propietario, Databricks recomienda asignar la propiedad de la mayoría de los objetos a un grupo en lugar de a un usuario individual. La propiedad inicial de cualquier objeto se asigna al usuario que crea ese objeto. Consulte Administración de la propiedad de objetos de Unity Catalog.

Creación de un volumen administrado

Se deben tener los permisos siguientes para crear un volumen administrado:

Resource Permisos requeridos
Esquema USE SCHEMA, CREATE VOLUME
Catálogo USE CATALOG

Sql

Para crear un volumen administrado, se debe usar la sintaxis siguiente:

CREATE VOLUME <catalog>.<schema>.<volume-name>;

Explorador de catálogos

Para crear un volumen administrado en el Explorador de catálogos:

  1. En el área de trabajo de Azure Databricks, haga clic en el Icono de catálogoCatálogo.
  2. Busque el esquema al que desea agregar el volumen y selecciónelo.
  3. Haga clic en el botón Crear volumen. (Debe tener privilegios suficientes).
  4. Escribe un nombre para el volumen.
  5. Proporcione un comentario (opcional).
  6. Haga clic en Crear.

Creación de un volumen externo

Se deben tener los permisos siguientes para crear un volumen externo:

Resource Permisos requeridos
Ubicación externa CREATE EXTERNAL VOLUME
Esquema USE SCHEMA, CREATE VOLUME
Catálogo USE CATALOG

Sql

Para crear un volumen externo, especifique una ruta de acceso de una ubicación externa mediante la sintaxis siguiente:

CREATE EXTERNAL VOLUME <catalog>.<schema>.<external-volume-name>
LOCATION 'abfss://<container-name>@<storage-account>.dfs.core.windows.net/<path>/<directory>';

Explorador de catálogos

Para crear un volumen externo en el Explorador de catálogos:

  1. En el área de trabajo de Azure Databricks, haga clic en el Icono de catálogoCatálogo.
  2. Busque el esquema al que desea agregar el volumen y selecciónelo.
  3. Haga clic en el botón Crear volumen. (Debe tener privilegios suficientes).
  4. Escribe un nombre para el volumen.
  5. Elija una ubicación externa donde crear el volumen.
  6. Edite la ruta de acceso para reflejar el subdirectorio en el que desea crear el volumen.
  7. Proporcione un comentario (opcional).
  8. Haga clic en Crear.

Anulación de un volumen

Solo los usuarios con privilegios de propietario pueden anular un volumen. Consulte ¿Quién puede administrar los privilegios de los volúmenes?

Use la sintaxis siguiente para anular un volumen:

DROP VOLUME IF EXISTS <volume-name>;

Al anular un volumen administrado, Azure Databricks elimina los datos subyacentes en un plazo de 30 días. Cuando se anula un volumen externo, se quita el volumen de Unity Catalog, pero los datos subyacentes permanecen sin cambios en la ubicación externa.

Lectura de archivos de un volumen

Para ver el contenido de un volumen o tener acceso a los archivos almacenados en volúmenes, se deben tener los siguientes permisos:

Resource Permisos requeridos
Volumen READ
Esquema USE SCHEMA
Catálogo USE CATALOG

Se interactúa con el contenido de los volúmenes mediante rutas de acceso. Consulte ¿Qué ruta de acceso se usa para acceder a los archivos de un volumen?.

Creación, eliminación y realización de otras operaciones de administración de archivos en un volumen

Para realizar operaciones de administración de archivos almacenados en volúmenes, se deben tener los siguientes permisos:

Resource Permisos requeridos
Volumen READ, WRITE
Schema USE SCHEMA
Catálogo USE CATALOG

Puede realizar operaciones de administración de archivos en volúmenes con las siguientes herramientas:

Para obtener información completa sobre la interacción mediante programación con archivos en volúmenes, consulte Trabajar con archivos en volúmenes del catálogo de Unity.

Cuaderno de ejemplo: Creación y uso de volúmenes

En el cuaderno siguiente se muestra la sintaxis básica de SQL para crear volúmenes de Unity Catalog e interactuar con ellos.

Tutorial: Cuaderno de volúmenes de Unity Catalog

Obtener el cuaderno

Rutas de acceso reservadas para volúmenes

Los volúmenes presentan las siguientes rutas de acceso reservadas que se usan para acceder a volúmenes:

  • dbfs:/Volumes
  • /Volumes

Nota:

Las rutas de acceso también están reservadas para posibles errores tipográficos de estas rutas de acceso de las API de Apache Spark y dbutils, incluidos /volumes, /Volume y /volume, si están precedidas o no de dbfs:/. La ruta de acceso /dbfs/Volumes también está reservada, pero no se puede usar para acceder a los volúmenes.

Los volúmenes solo se admiten en Databricks Runtime 13.3 LTS y versiones posteriores. En Databricks Runtime 12.2 LTS y versiones posteriores, las operaciones con rutas de acceso de /Volumes podrían realizarse correctamente, pero pueden escribir datos en discos de almacenamiento efímeros conectados a clústeres de proceso en lugar de conservar datos en volúmenes de Unity Catalog según lo previsto.

Importante

Si tiene datos preexistentes almacenados en una ruta reservada en la raíz de DBFS, puede presentar una incidencia de soporte técnico para obtener acceso temporal a esos datos para moverlos a otra ubicación.

Limitaciones

Debe usar el proceso habilitado para catálogos de Unity para interactuar con los volúmenes de Unity Catalog. Los volúmenes no admiten todas las cargas de trabajo.

Nota:

Los volúmenes no admiten comandos dbutils.fs distribuidos a ejecutores.

Se presentan las siguientes limitaciones:

En Databricks Runtime 14.3 LTS y versiones posteriores:

  • En clústeres de usuario único, no se puede acceder a volúmenes desde conversaciones y subprocesos de Scala.

En Databricks Runtime 14.2 y versiones anteriores:

  • En el proceso configurado con el modo de acceso compartido, no puede usar UDF para acceder a los volúmenes.
    • Tanto Python como Scala tienen acceso a FUSE desde el controlador, pero no desde los ejecutores.
    • El código Scala que realiza operaciones de E/S puede ejecutarse en el controlador, pero no en los ejecutores.
  • En el proceso configurado con el modo de acceso de usuario único, no hay compatibilidad con FUSE en Scala, con el código de E/S de Scala que accede a datos mediante rutas de acceso de volumen ni con UDF de Scala. Las UDF de Python se admiten en modo de acceso de usuario único.

En todas las versiones admitidas de Databricks Runtime:

  • Las UDF del catálogo de Unity no admiten el acceso a rutas de acceso a archivos de volumen.

  • No se puede acceder a los volúmenes desde RDD.

  • No puede usar spark-submit con archivos JAR almacenados en un volumen.

  • No se pueden definir dependencias a otras bibliotecas a las que se accede a través de rutas de acceso de volumen dentro de un archivo Wheel o JAR.

  • Los objetos de Unity Catalog no se pueden enumerar con los patrones /Volumes/<catalog-name> o /Volumes/<catalog-name>/<schema-name>. Se debe usar una ruta de acceso completa que incluya un nombre de volumen.

  • El punto de conexión de DBFS para la API de REST no admite rutas de acceso de volúmenes.

  • Los volúmenes se excluyen de los resultados de la búsqueda global en el área de trabajo de Azure Databricks.

  • No se pueden especificar volúmenes como destino para la entrega de registros del clúster.

  • %sh mv no se admite para mover archivos entre volúmenes. Use dbutils.fs.mv o %sh cp en su lugar.

  • No se puede crear un sistema de archivos de Hadoop personalizado con volúmenes, por lo que no se admite lo siguiente:

    import org.apache.hadoop.fs.Path
    val path =  new Path("dbfs:/Volumes/main/default/test-volume/file.txt")
    val fs = path.getFileSystem(sc.hadoopConfiguration)
    fs.listStatus(path)
    
  • Los volúmenes no están disponibles en las regiones de Azure Government ni en las áreas de trabajo con cumplimiento de FedRAMP.

  • Debe usar el formato de ruta de acceso con un esquema dbfs:/ en el panel de configuración de la biblioteca de Azure Data Factory. Por ejemplo, dbfs:/Volumes/<catalog-name>/<schema-name>/<volume-name>/file.