Compartilhar via


Trabalhar com tabelas externas

No Catálogo do Unity, uma tabela externa armazena seus arquivos de dados no armazenamento de objetos de nuvem em seu locatário de nuvem. O Catálogo do Unity continua a gerenciar os metadados da tabela, garantindo a governança completa de dados em todas as consultas. No entanto, ele não gerencia o ciclo de vida, a otimização, o local de armazenamento ou o layout dos dados.

Ao definir uma tabela externa do Catálogo do Unity, você deve especificar um local de armazenamento. Esse local é um local externo registrado no Catálogo do Unity. Quando você descarta uma tabela externa, o Catálogo do Unity remove os metadados da tabela, mas não exclui os arquivos de dados subjacentes.

Este artigo se concentra nas tabelas externas do Catálogo do Unity. As tabelas externas no metastore do Hive herdado apresentam comportamentos diferentes. Veja Objetos de banco de dados no metastore do Hive herdado.

Quando usar tabelas externas

O Databricks recomenda o uso de tabelas externas para os seguintes casos de uso:

  • Você precisa registrar uma tabela apoiada por dados existentes que não são compatíveis com tabelas gerenciadas do Catálogo do Unity.
  • Você também requer acesso direto aos dados de clientes que não são do Databricks que não dão suporte a outros padrões de acesso externo. Os privilégios do Catálogo do Unity não são aplicados quando os usuários obtém acesso aos arquivos de dados de sistemas externos. Consulte Acesse os dados do Databricks usando sistemas externos.

Na maioria dos casos, o Databricks recomenda usar tabelas gerenciadas do Catálogo do Unity para aproveitar a otimização automática da tabela, o desempenho de consulta mais rápido e os custos reduzidos. Para migrar tabelas externas para tabelas gerenciadas, consulte Converter uma tabela externa em uma tabela gerenciada do Catálogo do Unity.

Importante

Se você atualizar metadados de tabela externa usando um cliente não Databricks ou usando o acesso baseado em caminho de dentro do Databricks, esses metadados não sincronizam automaticamente o estado com o Catálogo do Unity. O Databricks não recomenda tais atualizações de metadados, mas se você realizar uma, deverá executar MSCK REPAIR TABLE <table-name> SYNC METADATA para atualizar o esquema no Unity Catalog. Consulte REPAIR TABLE.

Formatos de arquivo para tabelas externas

As tabelas externas podem usar os seguintes formatos de arquivos:

  • DELTA
  • CSV
  • JSON
  • AVRO
  • PARQUETE
  • Reconhecimento Óptico de Caracteres (ORC)
  • TEXTO

Criar uma tabela externa

Você pode criar tabelas externas usando comandos SQL ou operações de gravação do DataFrame.

Antes de começar

Antes de criar uma tabela externa, primeiro você deve configurar um local externo que conceda acesso ao armazenamento em nuvem.

Para obter mais informações sobre como configurar locais externos, consulte Criar um local externo para conectar o armazenamento em nuvem ao Azure Databricks.

Para criar uma tabela externa, você deve atender aos seguintes requisitos de permissão:

  • O privilégio CREATE EXTERNAL TABLE em um local externo, que concede acesso ao LOCATION pela tabela externa.
  • A permissão USE CATALOG no catálogo pai da tabela.
  • A USE SCHEMA permissão no esquema pai da tabela.
  • A CREATE TABLE permissão no esquema pai da tabela.

Observação

Quando um local externo S3 estiver associado a vários metastores, evite conceder acesso de gravação a tabelas que usam esse local S3 porque gravações de metastores diferentes na mesma tabela externa podem causar problemas de consistência. No entanto, a leitura do mesmo local externo S3 em vários metastores é segura.

Exemplos de comando SQL

Use um dos exemplos de comando a seguir em um notebook ou no editor de consultas SQL para criar uma tabela externa.

Nos seguintes exemplos, substitua os valores de espaço reservado:

  • <catalog>: O nome do catálogo que conterá a tabela.
  • <schema>: O nome do esquema que conterá a tabela.
  • <table-name>: O nome do catálogo.
  • <column-specification>: o nome e o tipo de dados para cada coluna.
  • <bucket-path>: o caminho para o bucket de armazenamento em nuvem onde a tabela será criada.
  • <table-directory>: Um diretório em que a tabela será criada. Use um diretório exclusivo para cada tabela.

ADLS

CREATE TABLE <catalog>.<schema>.<table-name>
(
  <column-specification>
)
LOCATION 'abfss://<bucket-path>/<table-directory>';

S3

CREATE TABLE <catalog>.<schema>.<table-name>
(
  <column-specification>
)
LOCATION 's3://<bucket-path>/<table-directory>';

Para obter mais informações sobre parâmetros de criação de tabela, consulte CREATE TABLE.

Operações de gravação do DataFrame

Você também pode criar tabelas externas com base em resultados de consulta ou operações de gravação do DataFrame. Use a LOCATION cláusula para especificar o caminho de armazenamento externo ao criar tabelas com DataFrames.

As seguintes opções de sintaxe SQL funcionam com operações do DataFrame:

Remover uma tabela externa

Para remover uma tabela, você precisa ser seu proprietário ou ter o privilégio MANAGE na tabela. Para descartar uma tabela externa, realize a execução do seguinte comando SQL:

DROP TABLE IF EXISTS catalog_name.schema_name.table_name;

O Catálogo do Unity não exclui os dados subjacentes no armazenamento em nuvem quando você descarta uma tabela externa. Você deve excluir diretamente os arquivos de dados subjacentes se precisar remover os dados associados à tabela.

Notebook de exemplo: criar tabelas externas

Você pode usar o notebook de exemplo a seguir para criar um catálogo, um esquema e uma tabela externa e gerenciar permissões neles.

Criar e gerenciar uma tabela externa no notebook do Unity Catalog

Obter notebook