O que são os volumes do Catálogo do Unity?

Volumes são objetos do Catálogo do Unity que permitem a governança de conjuntos de dados não tabulares. Volumes representam um volume lógico de armazenamento em um local de armazenamento de objetos na nuvem. Os volumes fornecem recursos para acessar, armazenar, controlar e organizar arquivos.

Enquanto as tabelas fornecem governança sobre conjuntos de dados tabulares, os volumes adicionam governança sobre conjuntos de dados não tabulares. Você pode usar volumes para armazenar e acessar arquivos em qualquer formato, incluindo dados estruturados, semiestruturados e não estruturados.

A Databricks recomenda a utilização de volumes para governar o acesso a todos os dados não tabulares. Como as tabelas, volumes podem ser gerenciados ou externos.

Importante

Você não pode usar volumes como um local para tabelas. Os volumes destinam-se apenas ao acesso a dados baseados em caminho. Use tabelas quando quiser trabalhar com dados tabulares no Catálogo do Unity.

Os seguintes artigos fornecem mais informações sobre como trabalhar com volumes:

Observação

Ao trabalhar com volumes, você deve usar um SQL Warehouse ou um cluster executando o Databricks Runtime 13.3 LTS ou superior, a menos que você esteja usando UIs do Azure Databricks, como o Explorador de Catálogos.

O que é um volume gerenciado?

Um volume gerenciado é um volume de armazenamento controlado pelo Unity Catalog criado no local de armazenamento gerenciado do esquema que o contém. Consulte Especificar um local de armazenamento gerenciado no catálogo do Unity.

Os volumes gerenciados permitem a criação de armazenamento controlado para trabalhar com arquivos sem a sobrecarga de locais externos e credenciais de armazenamento. Não é necessário especificar um local ao criar um volume gerenciado, e todo o acesso a arquivos para dados em volumes gerenciados é feito por meio de caminhos gerenciados pelo Catálogo do Unity.

O que é um volume externo?

Um volume externo é um volume de armazenamento controlado pelo Catálogo do Unity registrado em um diretório em um local externo usando credenciais de armazenamento administradas pelo Catálogo do Unity.

O Catálogo do Unity não gerencia o ciclo de vida e o layout dos arquivos em volumes externos. Ao remover um volume externo, o Catálogo do Unity não exclui os dados subjacentes.

Qual caminho é usado para acessar arquivos em um volume?

Os volumes ficam no terceiro nível do namespace de três níveis do Catálogo do Unity (catalog.schema.volume):

Diagrama de modelo de objeto do Catálogo do UNity, focado em volume

O caminho para acessar os volumes é o mesmo, independentemente de você usar o Apache Spark, SQL, Python ou outras linguagens e bibliotecas. Isso difere dos padrões de acesso herdados para arquivos no armazenamento de objetos limitados a um workspace do Azure Databricks.

O caminho para acessar arquivos em volumes usa o seguinte formato:

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

O Azure Databricks também oferece suporte a um esquema dbfs:/ opcional ao trabalhar com o Apache Spark, portanto, o caminho a seguir também funciona:

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

A sequência /<catalog>/<schema>/<volume> no caminho corresponde aos três nomes de objetos do Catálogo do Unity associados ao arquivo. Esses elementos de caminho são somente leitura e não podem ser gravados diretamente pelos usuários, o que significa que não é possível criar ou excluir esses diretórios usando operações do sistema de arquivos. Eles são gerenciados automaticamente e mantidos em sincronia com as entidades correspondentes do Catálogo do Unity.

Observação

Você também pode acessar dados em volumes externos usando URIs de armazenamento em nuvem.

Caminhos reservados para volumes

Os volumes apresentam os seguintes caminhos reservados usados para acessar volumes:

  • dbfs:/Volumes
  • /Volumes

Observação

Os caminhos também são reservados para possíveis erros de digitação para esses caminhos das APIs do Apache Spark e dbutils, incluindo /volumes, /Volume, /volume, independentemente de serem ou não precedidos por dbfs:/. O caminho /dbfs/Volumes também é reservado, mas não pode ser usado para acessar volumes.

Os volumes têm suporte apenas no Databricks Runtime 13.3 LTS e versões superiores. No Databricks Runtime 12.2 LTS e versões anteriores, as operações relacionadas a caminhos /Volumes podem ser bem-sucedidas, mas elas podem gravar dados em discos de armazenamento efêmeros anexados a clusters de computação em vez de persistir dados em volumes do Catálogo do Unity conforme o esperado.

Importante

Se você tiver dados armazenados pré-existentes em um caminho reservado na raiz do DBFS, poderá arquivar um tíquete de suporte para obter acesso temporário a esses dados e movê-los para outro local.

Limitações

Você deve usar a computação habilitada para o Catálogo do Unity para interagir com os volumes do Catálogo do Unity. Os volumes não dão suporte a todas as cargas de trabalho.

Observação

Os volumes não dão suporte para os comandos dbutils.fs distribuídos aos executores.

As seguintes limitações se aplicam:

No Databricks Runtime 14.3 LTS e superior:

  • Nos clusters de usuário único, você não pode acessar os volumes dos threads e os subprocessos no Scala.

No Databricks Runtime 14.2 e inferior:

  • Na computação configurada com o modo de acesso compartilhado, não é possível usar UDFs para acessar volumes.
    • Tanto o Python quanto o Scala têm acesso ao FUSE a partir do driver, mas não a partir dos executores.
    • O código do Scala que realiza operações de E/S pode ser executado no driver, mas não nos executores.
  • Na computação configurada com o modo de acesso de usuário único, não há suporte para FUSE no Scala, código de E/S do Scala acessando dados usando caminhos de volume ou UDFs do Scala. As UDFs do Python dão suporte para o modo de acesso de usuário único.

Em todas as versões do Databricks Runtime com suporte:

  • As UDFs do Catálogo do Unity não dão suporte ao acesso aos caminhos de arquivo de volume.

  • Você não pode acessar os volumes de RDDs.

  • Você não pode usar o spark-submit com JARs armazenados em um volume.

  • Você não pode definir as dependências para outras bibliotecas acessadas pelos caminhos de volume em um arquivo wheel ou JAR.

  • Não é possível listar objetos do Catálogo do Unity usando os padrões /Volumes/<catalog-name> ou /Volumes/<catalog-name>/<schema-name>. Você deve usar um caminho totalmente qualificado que inclua um nome de volume.

  • O ponto de extremidade DBFS para a API REST não dá suporte a caminhos de volumes.

  • Não é possível especificar volumes como destino para o fornecimento de logs de cluster.

  • %sh mv não tem suporte para a movimentação de arquivos entre volumes. Em vez disso, use dbutils.fs.mv ou %sh cp.

  • Não é possível criar um sistema de arquivos personalizado do Hadoop com volumes, o que significa que não há suporte para o seguinte:

    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)
    
  • Os volumes não estão disponíveis nas regiões do Azure Governamental ou em áreas de trabalho em conformidade com o FedRAMP.

  • Você deve usar o formato de caminho com um esquema de dbfs:/ no painel de configuração da biblioteca do Azure Data Factory. Por exemplo, dbfs:/Volumes/<catalog-name>/<schema-name>/<volume-name>/file.