Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
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.
Esta página se concentra em 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 baseada em dados existentes em formatos que não são compatíveis com tabelas gerenciadas do Unity Catalog, como JSON ou Avro. Consulte formatos de arquivo para tabelas externas.
- Você precisa de 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. Confira Acessar 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 do Delta Lake para uma tabela gerenciada do Unity Catalog.
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 Conectar para um local externo do ADLS Gen2 (Azure Data Lake Storage Gen2).
Para criar uma tabela externa, você deve atender aos seguintes requisitos de permissão:
- O privilégio
CREATE EXTERNAL TABLEem um local externo, que concede acesso aoLOCATIONpela tabela externa. - A permissão
USE CATALOGno catálogo pai da tabela. - A permissão
USE SCHEMAno esquema pai da tabela. - A permissão
CREATE TABLEno 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
Use um dos exemplos 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>: Um nome para a tabela. -
<column-name>e<data-type>: 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. -
<source-table>: uma tabela a ser usada como fonte de dados ao criar uma tabela com base nos resultados da consulta.
SQL
Para criar uma tabela externa no ADLS Gen2 com um esquema definido, execute o seguinte:
CREATE TABLE <catalog>.<schema>.<table-name>
(
<column-name> <data-type>
)
LOCATION 'abfss://<bucket-path>/<table-directory>';
Para criar uma tabela externa no ADLS Gen2 com base nos resultados da consulta, execute o seguinte:
CREATE TABLE <catalog>.<schema>.<table-name>
LOCATION 'abfss://<bucket-path>/<table-directory>'
AS SELECT * FROM <source-table>;
Para criar uma tabela externa no S3 com um esquema definido, execute o seguinte:
CREATE TABLE <catalog>.<schema>.<table-name>
(
<column-name> <data-type>
)
LOCATION 's3://<bucket-path>/<table-directory>';
Para criar uma tabela externa no S3 com base nos resultados da consulta, execute o seguinte:
CREATE TABLE <catalog>.<schema>.<table-name>
LOCATION 's3://<bucket-path>/<table-directory>'
AS SELECT * FROM <source-table>;
Python
Para criar uma tabela externa no ADLS Gen2 com um esquema definido, execute o seguinte:
from pyspark.sql.types import StructType, StructField, StringType
schema = StructType([StructField("<column-name>", <data-type>())])
spark.createDataFrame([], schema).write \
.option("path", "abfss://<bucket-path>/<table-directory>") \
.saveAsTable("<catalog>.<schema>.<table-name>")
Para criar uma tabela externa no ADLS Gen2 de um DataFrame, execute o seguinte:
df.write \
.option("path", "abfss://<bucket-path>/<table-directory>") \
.saveAsTable("<catalog>.<schema>.<table-name>")
Para criar uma tabela externa no S3 com um esquema definido, execute o seguinte:
from pyspark.sql.types import StructType, StructField, StringType
schema = StructType([StructField("<column-name>", <data-type>())])
spark.createDataFrame([], schema).write \
.option("path", "s3://<bucket-path>/<table-directory>") \
.saveAsTable("<catalog>.<schema>.<table-name>")
Para criar uma tabela externa no S3 de um DataFrame, execute o seguinte:
df.write \
.option("path", "s3://<bucket-path>/<table-directory>") \
.saveAsTable("<catalog>.<schema>.<table-name>")
Para obter mais informações sobre parâmetros de criação de tabela, consulte CREATE TABLE.
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 remover uma tabela externa, execute o seguinte comando:
SQL
DROP TABLE IF EXISTS catalog_name.schema_name.table_name;
Python
spark.sql("DROP TABLE IF EXISTS catalog_name.schema_name.table_name")
Como alternativa, no Databricks Runtime 18.2 e versões posteriores, use spark.catalog.dropTable():
spark.catalog.dropTable("catalog_name.schema_name.table_name", ifExists=True)
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.