Compartilhar via


Trabalhar com tabelas externas

O Catálogo do Unity rege as permissões de acesso a dados para dados externos para todas as consultas que passam pelo Catálogo do Unity, mas não gerencia o ciclo de vida de dados, otimizações, local de armazenamento ou layout.

As tabelas externas armazenam dados em um diretório no armazenamento de objetos na nuvem do seu locatário de nuvem. É necessário especificar um local de armazenamento ao definir uma tabela externa. Ao descartar uma tabela externa, os arquivos de dados não são excluídos.

Ao criar uma tabela externa, você pode registrar um diretório existente de arquivos de dados como uma tabela ou fornecer um caminho para criar um novo diretório que armazene os arquivos de dados que voltam à tabela.

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. Consulte Acesse os dados do Databricks usando sistemas externos.

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.

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.

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

Para criar uma tabela externa, você pode usar comandos SQL ou operações de gravação de DataFrame.

Antes de começar

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 USE SCHEMA permissão no esquema pai da tabela.
  • A permissão USE CATALOG no catálogo pai da tabela.
  • A CREATE TABLE permissão no esquema pai da tabela.

Para obter mais informações sobre a configuração de locais externos, confira Crie um local externo para conectar o armazenamento em nuvem ao Azure Databricks.

Observação

Ao conceder acesso a uma tabela externa no AWS S3, lembre-se do seguinte: o Databricks recomenda que você conceda privilégios de gravação em uma tabela que seja apoiada por um local externo no S3 somente se o local externo for definido em um único metastore. Você pode ler dados com segurança em um único local externo no S3 a partir de mais de um metastore, mas escritas simultâneas no mesmo local S3 a partir de vários metastores podem levar a questões de consistência.

Exemplos de comandos 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 de DataFrame

Muitos usuários criam tabelas externas usando os resultados de consultas ou operações de gravação de DataFrame. Os seguintes artigos demonstram alguns dos muitos padrões que você pode usar para criar uma tabela externa no Azure Databricks:

Descartar 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