Criar e trabalhar com volumes

Este artigo apresenta os volumes, que são objetos do Catálogo do Unity que permitem a governança de conjuntos de dados não tabulares. Ele também descreve como criar, gerenciar e trabalhar com volumes.

Para obter detalhes sobre como carregar e gerenciar arquivos em volumes, consulte Carregar arquivos em um volume do Catálogo do Unity e Operações de gerenciamento de arquivos para volumes do Catálogo do Unity.

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 são os volumes do Catálogo do Unity?

Os volumes são objetos do Catálogo do Unity que representam um volume lógico de armazenamento em um local de armazenamento de objetos de 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.

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 para armazenar dados tabulares com o Catálogo do Unity.

O que é um volume gerenciado?

Um volume gerenciado é um volume de armazenamento administrado pelo Catálogo do Unity criado no local de armazenamento padrão do esquema que o contém. 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. Confira Qual caminho é usado para acessar arquivos em um volume?.

Ao excluir um volume gerenciado, os arquivos armazenados nesse volume também são excluídos do locatário de nuvem em 30 dias.

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. Os volumes externos permitem que você adicione a governança de dados do Catálogo do Unity aos diretórios existentes de armazenamento de objetos na nuvem. Alguns casos de uso de volumes externos incluem o seguinte:

  • Adição de governança a arquivos de dados sem migração.
  • Controle dos arquivos produzidos por outros sistemas que devem ser ingeridos ou acessados pelo Azure Databricks.
  • Controle dos dados produzidos pelo Azure Databricks que devem ser acessados diretamente do armazenamento de objetos na nuvem por outros sistemas.

Os volumes externos devem ser diretórios em locais externos controlados pelas credenciais de armazenamento do Catálogo do Unity. O Catálogo do Unity não gerencia o ciclo de vida ou o layout dos arquivos em volumes externos. Ao remover um volume externo, o Catálogo do Unity não exclui os dados subjacentes.

Observação

Ao definir um volume, o acesso de URI de nuvem aos dados no caminho do volume é regido pelas permissões do volume.

Qual caminho é usado para acessar arquivos em um 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 UC correspondentes.

Observação

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

Quais são os privilégios dos volumes?

Os volumes usam o mesmo modelo básico de privilégios das tabelas, mas enquanto os privilégios das tabelas se concentram em conceder acesso à consulta e à manipulação de linhas em uma tabela, os privilégios dos volumes se concentram no trabalho com arquivos. Dessa forma, os volumes apresentam os seguintes privilégios:

Confira Privilégios e objetos protegíveis do Catálogo do Unity.

Quem pode gerenciar os privilégios de volume?

Você deve ter privilégios de proprietário em um volume para gerenciar privilégios de volume ou remover volumes. Cada objeto no Catálogo do Unity só pode ter um diretor atribuído como proprietário e, embora a propriedade não ocorra em cascata (ou seja, o proprietário de um catálogo não se torna automaticamente o proprietário de todos os objetos desse catálogo), os privilégios associados à propriedade se aplicam a todos os objetos contidos em um objeto.

Isso significa que, para volumes do Catálogo do Unity, as seguintes entidades podem gerenciar privilégios de volume:

  • O proprietário do catálogo pai.
  • O proprietário do esquema pai.
  • O proprietário do volume.

Embora cada objeto só possa ter um único proprietário, o Databricks recomenda atribuir a propriedade da maioria dos objetos a um grupo em vez de a um usuário individual. A propriedade inicial de qualquer objeto é atribuída ao usuário que cria esse objeto. Consulta Gerenciar a propriedade do objeto do Catálogo do Unity.

Criar um volume gerenciado

Você deve ter as seguintes permissões para criar um volume gerenciado:

Recurso Permissões necessárias
Esquema USE SCHEMA, CREATE VOLUME
Catálogo USE CATALOG

Sql

Para criar um volume gerenciado, use a seguinte sintaxe:

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

Explorador do Catálogo

Para criar um volume gerenciado no Catalog Explorer:

  1. No espaço de trabalho do Azure Databricks, clique em Ícone do catálogoCatálogo.
  2. Pesquise ou procure o esquema ao qual você quer adicionar o volume e selecione-o.
  3. Clique no botão Criar Volume. (Você deve ter privilégios suficientes.)
  4. Insira um nome para o volume.
  5. Forneça um comentário (opcional).
  6. Clique em Criar.

Criar um volume externo

Você deve ter as seguintes permissões para criar um volume externo:

Recurso Permissões necessárias
Local externo CREATE EXTERNAL VOLUME
Esquema USE SCHEMA, CREATE VOLUME
Catálogo USE CATALOG

Sql

Para criar um volume externo, especifique um caminho em um local externo usando a seguinte sintaxe:

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

Explorador do Catálogo

Para criar um volume externo no Catalog Explorer:

  1. No espaço de trabalho do Azure Databricks, clique em Ícone do catálogoCatálogo.
  2. Pesquise ou procure o esquema ao qual você quer adicionar o volume e selecione-o.
  3. Clique no botão Criar Volume. (Você deve ter privilégios suficientes.)
  4. Insira um nome para o volume.
  5. Escolha um local externo para criar o volume.
  6. Edite o caminho para refletir o subdiretório em que você quer criar o volume.
  7. Forneça um comentário (opcional).
  8. Clique em Criar.

Remover um volume

Somente usuários com privilégios de proprietário podem remover um volume. Confira Quem pode gerenciar os privilégios de volume?.

Use a seguinte sintaxe para remover um volume:

DROP VOLUME IF EXISTS <volume-name>;

Ao remover um volume gerenciado, o Azure Databricks exclui os dados subjacentes em 30 dias. Ao remover um volume externo, você remove o volume do Catálogo do Unity, mas os dados subjacentes permanecem inalterados no local externo.

Ler arquivos em um volume

Você deve ter as seguintes permissões para exibir o conteúdo de um volume ou acessar arquivos armazenados em volumes:

Recurso Permissões necessárias
Volume READ
Esquema USE SCHEMA
Catálogo USE CATALOG

Interaja com o conteúdo dos volumes usando caminhos. Confira Qual caminho é usado para acessar arquivos em um volume?.

Criar, excluir e executar outras operações de gerenciamento de arquivos em um volume

Você deve ter as seguintes permissões para executar operações de gerenciamento de arquivos em arquivos armazenados em volumes:

Recurso Permissões necessárias
Volume READ, WRITE
Esquema USE SCHEMA
Catálogo USE CATALOG

Você pode executar operações de gerenciamento de arquivos em volumes com as seguintes ferramentas:

Para obter detalhes completos sobre como interagir programaticamente com arquivos em volumes, confira Trabalhar com arquivos em volumes do Catálogo do Unity.

Notebook de exemplo: criar e trabalhar com volumes

O notebook a seguir demonstra a sintaxe SQL básica para criar e interagir com os volumes do Catálogo do Unity.

Tutorial: notebook de volumes do Catálogo do Unity

Obter notebook

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.

  • Os volumes são excluídos dos resultados da pesquisa global no workspace do Azure Databricks.

  • 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.