Converter uma tabela estrangeira em uma tabela Unity Catalog .
Visualização
Este recurso está em versão prévia pública e, no momento, está disponível apenas para clientes participantes. Para participar da pré-estreia, inscreva-se preenchendo este formulário. Este recurso suporta apenas a conversão de tabelas estrangeiras federadas usando HMS e Glue Federation.
Esta página descreve como usar SET MANAGED para converter uma tabela estrangeira em uma tabela gerencia.
- Para obter detalhes sobre como converter uma tabela externa em uma tabela do Unity Catalog, consulte Converter uma tabela externa em uma tabela Unity Catalog .
- Para obter detalhes sobre como converter uma tabela estrangeira em uma tabela externa, consulte Converter uma tabela estrangeira em uma tabela externa Unity Catalog .
Visão geralSET MANAGED
Use o recurso SET MANAGED para converter uma tabela estrangeira em uma tabela de gerenciamento Unity Catalog no Databricks. SET MANAGED oferece os seguintes benefícios:
- Retenção da tabela história.
- Mantendo as mesmas configurações de tabela, incluindo o mesmo nome, configurações, permissões e visualização.
- Aproveitando as vantagens da otimização preditiva. Ao converter uma tabela para gerenciar, a otimização preditiva é definida como
INHERIT, o que significa que ela herda a configuração do nível de esquema ou catálogo. Por default, esta opção está desativada. Você pode habilitar a otimização preditiva na tabela convertida executandoALTER TABLE <table_name> ENABLE PREDICTIVE OPTIMIZATION, que a define comoENABLEDem vez deINHERIT.
Pré-requisitos
- Formato dos dados : O formato dos dados da tabela externa deve ser Delta Lake. Para realizar uma conversão única para Parquet, consulte Converter para Delta Lake.
- Tipo de tabela : O tipo de tabela HMS deve ser uma tabela HMS externa. O comando falha se a tabela for uma tabela de gerenciamento HMS .
- Runtime : Databricks Runtime 17.3 ou superior
- Permissões :
OWNERouMANAGEpermissões na mesa eCREATEpermissão noEXTERNAL LOCATION
Sintaxe
Para converter sua tabela externa Unity Catalog para ser controlada Unity Catalog , execute o seguinte comando:
ALTER TABLE source_table SET MANAGED {MOVE | COPY}
Parâmetros
-
tabela_de_origem
Uma tabela estrangeira existente no Unity Catalog. Tabelas externas contêm dados e metadados gerenciados por um catálogo externo. Antes da conversão, se você soltar a tabela de origem no catálogo externo, a tabela estrangeira também será solta no Unity Catalog. Após a tabela ser convertida para gerenciar, excluir a tabela de origem no catálogo externo não afeta a tabela de gerenciamento Unity Catalog .
-
MOVEConverte a tabela para o formato gerenciado e desativa o acesso à tabela de origem no catálogo externo.
-
O acesso através do catálogo externo ou o acesso baseado em caminho falham após a conversão da tabela. Todos os leitores e escritores da tabela devem usar o namespace Unity Catalog para obter acesso.
-
Todos os leitores e escritores devem usar o acesso baseado em nome. Por exemplo:
SQLSELECT * FROM catalog_name.schema_name.table_name; -
O acesso baseado em caminho não é suportado e falha após a conversão da tabela. Por exemplo:
SQLSELECT * FROM delta.`protocol://path/to/table`; -
Clientes externos (nãoDatabricks) devem suportar leituras em tabelas gerenciadas Unity Catalog . Consulte Modede Compatibilidade.
-
Use o painel de controle de Acesso para verificar se os leitores e gravadores que acessam suas tabelas são Databricks Runtime ou clientes externos que não sãoDatabricks .
-
Os leitores e gravadores Databricks devem usar Databricks Runtime 15.4 LTS ou superior. Se seus leitores ou gravadores usam Databricks Runtime 14.3 LTS ou inferior, consulte a opção alternativa para leitores e gravadores no Databricks Runtime 14.3 LTS ou inferior.
-
Pode ocorrer indisponibilidade do serviço quando leitores ou escritores acessam a tabela durante a conversão. Para obter mais informações, consulte Converter uma tabela externa em uma tabela de gerenciamento Unity Catalog.
-
Se o seu comando for interrompido, a tabela poderá permanecer como uma tabela externa, visto que a conversão para gerenciador não foi concluída. Para completar o comando, execute
SET MANAGEDnovamente na tabela externa. -
A otimização preditiva está definida como
INHERITa menos que você a tenha configurado manualmente. Para verificar se a otimização preditiva está ativada, consulte Verificar se a otimização preditiva está ativada. -
Rollback : Para reverter a migração da tabela e recuperar o acesso à tabela de origem no catálogo externo, execute o comando
UNSET MANAGED. A tabela se torna uma tabela externa após a execução do comando. Para retornar a tabela a uma tabela estrangeira, exclua a tabela e ela será refederada como estrangeira na próxima sincronização do catálogo.SQLALTER TABLE catalog.schema.my_managed_table UNSET MANAGED
-
Você DEVE executar UNSET MANAGED antes de descartar a tabela. Excluir a tabela sem executar UNSET MANAGED primeiro pode deixar seu sistema em um estado ruim e pode resultar em perda de dados ou inconsistências.
-
Se você reverter a alteração, as confirmações feitas no local externo entre a conversão e a reversão podem ser alteradas por versão, mas não por carimbo de data/hora. Sete dias após o rollback, os dados no local gerenciado são excluídos. Para leitores e escritores no Databricks Runtime 15.4 LTS ou superior, o histórico da tabela para commits feitos após a conversão, mas antes do rollback, pode ser acessado por versão, mas não por timestamp.
-
Após a conversão da tabela, você deve:
- Reinicie qualquer tarefa de transmissão (leitura ou gravação) usando a tabela estrangeira.
- Certifique-se de que seus leitores e escritores trabalhem com a tabela gerencia.
-
COPYConverte a tabela para o formato gerenciado sem modificar ou desabilitar o acesso à tabela de origem no catálogo externo.
- Durante a conversão para o formato gerencia, os dados da tabela de origem são copiados para o local de armazenamento gerencia definido para a tabela externa, criando duas cópias separadas: a nova tabela gerencia e a tabela de origem no catálogo externo.
- Ao contrário de
MOVEonde as leituras e gravações falham, ao usarCOPY, você é responsável por desabilitar corretamente as leituras e gravações na tabela de origem no catálogo externo e garantir que as cargas de trabalho migraram para o novo catálogo. - Reversão : Para reverter a migração da tabela, você não precisa executar o comando
UNSET MANAGED, uma vez que a tabela de origem não foi interrompida no catálogo externo. Exclua a tabela e ela será refederada como estrangeira na próxima sincronização do catálogo.
Verificar conversão
Você pode confirmar que sua tabela externa foi convertida em uma tabela:
DESCRIBE EXTENDED catalog_name.schema_name.table_name
Se a tabela foi convertida, o Type sob col_name aparece como MANAGED sob data_type.
Limitações conhecidas
A conversão de tabelas estrangeiras para tabelas estrangeiras apresenta as seguintes limitações:
-
clientes de transmissão : Você deve reiniciar qualquer Job de transmissão após a conversão.
-
Regiões cloud múltiplas : Se o local de gerenciamento default do seu metastore, catálogo ou esquema Unity Catalog estiver em uma região cloud diferente do local de armazenamento da tabela estrangeira que está sendo convertida, você poderá incorrer em custos adicionais de transferência de dados entre regiões. O provedor cloud impõe essas taxas fora do controle da Databricks. Para verificar a localização do seu esquema, catálogo e metastore, use o seguinte comando:
SQL-- Check schema location
DESCRIBE SCHEMA EXTENDED catalog_name.schema_name;
-- Check catalog location
DESCRIBE CATALOG EXTENDED catalog_name;
-- Check metastore location
DESCRIBE METASTORE;
Perguntas frequentes
Posso criar tabelas, assim como converter tabelas, em um catálogo externo?
Sim, você pode criar tabelas externas ou tabelas gerenciais em um catálogo estrangeiro. O comportamento depende da configuração do esquema:
- Para esquemas Glue ou eHMS , ou para esquemas com um local de gerenciamento definido no Unity Catalog : Se você executar
CREATE TABLE foreign_catalog.schema.table, isso cria um gerenciamento Unity Catalog ou tabela externa. A tabela não é enviada nem sincronizada com o catálogo externo. - Para esquemas de conexões internas Hive metastore : Se você tentar criar uma tabela em um esquema externo, ele ainda cria uma tabela externa e também cria uma tabela em
hive_metastore. - Para Hive metastore workspace legado : Como se trata de uma federação de leitura e gravação, se você criar uma tabela no catálogo externo, ela também será criada no Hive metastore interno.
E se minhas tabelas estrangeiras forem baseadas em DBFS?
Ao converter uma tabela com suporte DBFS , armazenamos o mapeamento atual do caminho do DBFS para o caminho cloud como a localização do caminho cloud da tabela externa.
Posso fazer a conversão no nível do esquema ou do catálogo?
Você pode percorrer as tabelas em seus esquemas para convertê-las individualmente ou utilizar o projeto discoverx labs para converter esquemas ou catálogos inteiros de uma só vez:
df = (dx.from_tables("prod.*.*")
.with_sql("ALTER TABLE {full_table_name} SET MANAGED;")
.apply())