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.
As tabelas gerenciadas do Catálogo do Unity são o tipo de tabela padrão e recomendado em Azure Databricks para Delta Lake e Apache Iceberg. O Catálogo do Unity gerencia todas as responsabilidades de leitura, gravação, armazenamento e otimização. Consulte Converter tabelas externas ou estrangeiras do Delta Lake em tabelas gerenciadas pelo Unity Catalog.
Os arquivos de dados para tabelas gerenciadas são armazenados no esquema ou catálogo que os contém. Consulte Especificar um local de armazenamento gerenciado no catálogo do Unity.
Comparadas a tabelas externas e estrangeiras , as tabelas gerenciadas custam menos para armazenar e consultar, manter-se e otimizar-se automaticamente, e permanecem acessíveis a clientes externos por meio de APIs abertas.
Você pode trabalhar com tabelas gerenciadas em todas as linguagens e produtos com suporte no Azure Databricks. Você precisa de determinados privilégios para criar, atualizar, excluir ou consultar tabelas gerenciadas. Consulte Gerenciar privilégios no Catálogo do Unity.
Observação
Esta página descreve apenas as tabelas gerenciadas do Catálogo do Unity. Para tabelas gerenciadas no metastore do Hive herdado, consulte objetos de banco de dados no metastore do Hive herdado.
Benefícios das tabelas gerenciadas do Unity Catalog
As tabelas gerenciadas do Catálogo do Unity otimizam os custos de armazenamento e as velocidades de consulta e permitem a interoperabilidade com ferramentas de terceiros para Delta Lake e Apache Iceberg. Para simplificar o gerenciamento e o desempenho de dados, essas tabelas gerenciadas usam tecnologias alimentadas por IA, como compactação de tamanho de arquivo e coleta de estatísticas inteligentes.
As tabelas gerenciadas dão suporte à interoperabilidade permitindo o acesso de clientes Delta Lake e Apache Iceberg. Confira Acessar os dados do Databricks usando sistemas externos.
Os seguintes recursos são exclusivos para tabelas gerenciadas do Catálogo do Unity e não estão disponíveis para tabelas externas e tabelas estrangeiras:
| Característica | Benefícios | Configuração |
|---|---|---|
| Confirmações de catálogo | Permite transações com múltiplas instruções entre tabelas, planejamento de consultas mais rápido, alterações de esquema e restrições aplicáveis e gravações seguras de mecanismos externos. | Desativado por padrão. Para ativar, defina a propriedade da tabela delta.feature.catalogManaged. Consulte Habilitar confirmações de catálogo. |
| Otimização preditiva | Otimiza automaticamente o layout e o processamento dos dados usando IA, sem operações manuais de manutenção. O Databricks recomenda habilitar a otimização preditiva para todas as tabelas gerenciadas para reduzir os custos de armazenamento e computação. | Ativado por padrão para contas criadas em ou após 11 de novembro de 2024. O Azure Databricks está gradualmente habilitando isso para contas existentes. Para configurar, consulte Habilitar otimização preditiva. |
| Transações de várias instruções | Executa várias instruções SQL em uma ou mais tabelas como um único commit atômico com garantias ACID. Todas as alterações têm êxito juntas ou são revertidas juntas. Usado para procedimentos armazenados e scripts SQL. | Desativado por padrão. Para escolher um modo de transação, veja Modos de transação. As gravações em tabelas gerenciadas no Apache Iceberg estão em versão prévia privada. |
| Agrupamento líquido automático | Para tabelas com otimização preditiva, seleciona e atualiza automaticamente as chaves de agrupamento conforme os padrões de consulta mudam, para melhorar o desempenho e reduzir custos. | Desativado por padrão. Para configurar, consulte Habilitar clusterização líquida. |
| Cache de metadados | O cache em memória dos metadados das transações melhora o desempenho das consultas ao minimizar as solicitações para o log de transações armazenado na nuvem. | Habilitado por padrão. Não configurável. |
| Índices de pesquisa de texto completo | Acelera as pesquisas por substrings e palavras-chave em colunas de texto usando as funções search e isearch. O Azure Databricks pula arquivos que não podem conter linhas correspondentes, reduzindo a quantidade de dados escaneados. |
Desativado por padrão. Criar com CREATE SEARCH INDEX.Em Beta. Requer Databricks Runtime 18.2 ou superior. |
Exclusão automática de arquivo após um DROP TABLE comando |
Quando você elimina uma tabela gerenciada, o Azure Databricks exclui os arquivos de dados no armazenamento em nuvem após o término do período de recuperação (padrão 7 dias), reduzindo os custos de armazenamento. Para tabelas externas, você deve excluir manualmente os arquivos do bucket de armazenamento. | Habilitado por padrão. Você pode configurar o período de recuperação no nível de catálogo ou esquema. Consulte Descartar uma tabela gerenciada. |
Acessar dados do Databricks usando sistemas externos
As tabelas gerenciadas dão suporte à interoperabilidade permitindo o acesso de clientes Delta Lake e Apache Iceberg.
Por meio de APIs abertas e venda automática de credenciais, o Catálogo do Unity permite que mecanismos externos como Trino, DuckDB, Apache Spark, Daft e mecanismos integrados ao catálogo REST do Iceberg, como o Dremio, acessem tabelas gerenciadas. Para clientes externos que não dão suporte a APIs abertas, você pode usar o Modo de Compatibilidade para ler tabelas gerenciadas usando qualquer cliente Delta Lake ou Apache Iceberg. O OpenSharing, um protocolo código aberto, permite o compartilhamento de dados seguro e controlado com parceiros e plataformas externas.
Consulte integrações para obter uma lista de mecanismos externos com suporte ou verifique a documentação do mecanismo se ele não estiver incluído nesta lista.
As seguintes APIs abertas permitem que sistemas externos acessem tabelas gerenciadas do Catálogo do Unity:
- A API REST do Unity oferece acesso de leitura, gravação e criação para clientes do Delta Lake em tabelas gerenciadas do Delta Lake.
- O Iceberg REST Catalog (IRC) oferece acesso de leitura, gravação e criação para clientes Apache Iceberg em tabelas gerenciadas do Apache Iceberg e acesso somente leitura a tabelas do Delta Lake com leituras do Apache Iceberg habilitadas.
Ambas as APIs dão suporte à distribuição de credenciais, que fornece credenciais temporárias com escopos que herdam os privilégios do principal do Azure Databricks solicitante, mantendo os controles de governança e segurança.
O OpenSharing é um protocolo código aberto que permite acesso seguro e controlado a parceiros e plataformas externas. Você pode usar o OpenSharing para conceder aos parceiros acesso temporário somente de leitura.
Todas as leituras e gravações em tabelas gerenciadas devem usar nomes de tabela e nomes de catálogo e esquema onde eles existem. Por exemplo, catalog_name.schema_name.table_name. Não há suporte para o acesso baseado em caminho às tabelas gerenciadas do Catálogo do Unity (exceto no Modo de Compatibilidade), pois ignora os controles de acesso do Catálogo do Unity e impede que os recursos de tabela gerenciados funcionem corretamente.
Criar uma tabela gerenciada
Para criar uma tabela gerenciada, você deve ter:
-
USE SCHEMAno esquema pai da tabela. -
USE CATALOGno catálogo pai da tabela. -
CREATE TABLEno esquema pai da tabela.
Use a sintaxe a seguir para criar uma tabela gerenciada vazia. Substitua os valores de espaço reservado:
-
<catalog-name>: o nome do catálogo que conterá a tabela. -
<schema-name>: o nome do esquema que contém a tabela. -
<table-name>: um nome para a tabela. -
<column-specification>: o nome e o tipo de dados de cada coluna.
SQL
-- Create a managed Delta table
CREATE TABLE <catalog-name>.<schema-name>.<table-name>
(
<column-specification>
);
-- Create a managed Iceberg table
CREATE TABLE <catalog-name>.<schema-name>.<table-name>
(
<column-specification>
)
USING iceberg;
Python
Crie uma tabela gerenciada do Delta Lake usando saveAsTable():
from pyspark.sql.types import StructType, StructField, StringType
schema = StructType([StructField("<column-name>", StringType())])
spark.createDataFrame([], schema).write \
.saveAsTable("<catalog-name>.<schema-name>.<table-name>")
Como alternativa, use a DeltaTableBuilder API para opções específicas do Delta, como colunas geradas e propriedades de tabela:
from delta.tables import DeltaTable
DeltaTable.create(spark) \
.tableName("<catalog-name>.<schema-name>.<table-name>") \
.addColumn("<column-name>", "<data-type>") \
.property("<key>", "<value>") \
.execute()
Crie uma tabela gerenciada do Apache Iceberg:
from pyspark.sql.types import StructType, StructField, StringType
schema = StructType([StructField("<column-name>", StringType())])
spark.createDataFrame([], schema).write \
.format("iceberg") \
.saveAsTable("<catalog-name>.<schema-name>.<table-name>")
Para manter o desempenho em leituras e gravações, Azure Databricks executa operações periodicamente para otimizar metadados de tabela do Apache Iceberg gerenciados. Essa tarefa é executada usando computação sem servidor, que possui MODIFY permissões na tabela Apache Iceberg. Essa operação grava apenas nos metadados da tabela e a computação mantém apenas permissões para a tabela durante o trabalho.
Observação
Para criar uma tabela do Apache Iceberg, especifique explicitamente USING iceberg. Caso contrário, o Azure Databricks criará uma tabela Delta Lake por padrão.
Você pode criar tabelas gerenciadas com base em resultados de consulta ou operações de gravação do DataFrame. Os artigos a seguir demonstram alguns dos muitos padrões que você pode usar para criar uma tabela gerenciada no Azure Databricks:
Para criar uma cópia de uma tabela gerenciada existente, use clone. As tabelas gerenciadas do Delta Lake oferecem suporte à clonagem profunda e superficial. As tabelas gerenciadas do Apache Iceberg dão suporte apenas à clonagem profunda. Consulte Clonar uma tabela no Azure Databricks e clonar uma tabela de Iceberg gerenciada.
Remover uma tabela gerenciada
Para remover uma tabela gerenciada, você deve ter:
-
MANAGEna tabela ou você deve ser o proprietário da tabela. -
USE SCHEMAno esquema pai da tabela. -
USE CATALOGno catálogo pai da tabela.
Para remover uma tabela gerenciada, 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 dá suporte ao UNDROP TABLE comando para recuperar tabelas gerenciadas descartadas acidentalmente. Por padrão, as tabelas podem ser recuperadas por 7 dias após serem descartadas. Após o término do período de recuperação, Azure Databricks exclui os arquivos de dados subjacentes do seu locatário de nuvem dentro de 48 horas.
Configurar o período de recuperação
Important
O período de recuperação configurável está na Visualização Pública.
Você pode configurar por quanto tempo as tabelas gerenciadas descartadas permanecem recuperáveis no nível de catálogo ou esquema. Se os períodos de recuperação forem definidos em ambos os níveis, a configuração no nível do esquema terá precedência para as tabelas desse esquema.
Para configurar o período de recuperação, você deve ter MANAGE privilégio ou propriedade no catálogo ou esquema. Essa configuração só se aplica a tabelas excluídas após ser configurada. Isso não afeta as tabelas que já foram excluídas.
O período de recuperação pode ser de 0 horas, o que desabilita a recuperação, ou de 7 a 30 dias. Um período mais longo protege contra a exclusão acidental de dados críticos, enquanto um período mais curto exclui os dados removidos mais rapidamente para reduzir os custos de armazenamento em pipelines de ETL que criam e removem tabelas com frequência. Quando definido em 0, as tabelas descartadas não podem ser recuperadas com UNDROP. O Azure Databricks exclui os arquivos de dados do armazenamento em nuvem dentro de 48 horas após o lançamento.
Para definir o período de recuperação, use ALTER CATALOG ou ALTER SCHEMA com a RETAIN DROPPED TO cláusula:
SQL
-- Set a 30-day recovery period on a catalog
ALTER CATALOG my_catalog RETAIN DROPPED TO 30 DAYS;
-- Set a 7-day recovery period on a schema (overrides the catalog setting)
ALTER SCHEMA my_catalog.my_schema RETAIN DROPPED TO 7 DAYS;
Python
spark.sql("ALTER CATALOG my_catalog RETAIN DROPPED TO 30 DAYS")
spark.sql("ALTER SCHEMA my_catalog.my_schema RETAIN DROPPED TO 7 DAYS")
Você também pode definir o período de recuperação ao criar um catálogo ou esquema com a RETAIN DROPPED FOR cláusula:
SQL
CREATE CATALOG my_catalog RETAIN DROPPED FOR 30 DAYS;
CREATE SCHEMA my_catalog.my_schema RETAIN DROPPED FOR 7 DAYS;
Python
spark.sql("CREATE CATALOG my_catalog RETAIN DROPPED FOR 30 DAYS")
spark.sql("CREATE SCHEMA my_catalog.my_schema RETAIN DROPPED FOR 7 DAYS")
Para verificar o período de recuperação atual, execute DESCRIBE EXTENDED. A saída inclui uma Recovery Period Hours linha:
SQL
DESCRIBE CATALOG EXTENDED my_catalog;
DESCRIBE SCHEMA EXTENDED my_catalog.my_schema;
Python
spark.sql("DESCRIBE CATALOG EXTENDED my_catalog").show()
spark.sql("DESCRIBE SCHEMA EXTENDED my_catalog.my_schema").show()