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.
Importante
Esse recurso está em Visualização Pública e só está disponível para clientes participantes no momento. Para participar da versão prévia, inscreva-se preenchendo este formulário. Este recurso oferece suporte apenas à conversão de tabelas externas federadas usando HMS e Glue Federation.
Esta página descreve como usar SET MANAGED para converter uma tabela estrangeira em uma tabela gerenciada.
- Para obter detalhes sobre como converter uma tabela externa em uma tabela gerenciada, consulte Converter uma tabela externa em uma tabela gerenciada do Catálogo do Unity
- Para obter detalhes sobre como converter uma tabela estrangeira em uma tabela externa, consulte Converter uma tabela estrangeira em uma tabela externa do Catálogo do Unity
visão geral do SET MANAGED
Use a SET MANAGED funcionalidade para converter uma tabela estrangeira em uma tabela gerenciada do Unity Catalog no Azure Databricks.
SET MANAGED oferece os seguintes benefícios:
- Preservando o histórico de uma tabela.
- Mantendo as mesmas configurações de tabela, incluindo o mesmo nome, configurações, permissões e exibições.
- Beneficiando-se da otimização preditiva. Ao converter uma tabela em gerenciada, a otimização preditiva é definida como
INHERIT, o que significa que ela herda a configuração do esquema ou do nível do catálogo. Por padrão, isso está desabilitado no momento. Você pode habilitar a otimização preditiva na tabela convertida executandoALTER TABLE <table_name> ENABLE PREDICTIVE OPTIMIZATION, o que a define comoENABLEDem vez deINHERIT.
Pré-requisitos
- Formato de dados: o formato de dados da tabela estrangeira deve ser Delta Lake. Para executar uma conversão única para Parquet, consulte Converter em Delta Lake.
- Tipo de tabela: o tipo de tabela HMS deve ser uma tabela HMS externa. O comando falhará se a tabela for uma tabela HMS gerenciada.
- Runtime: Databricks Runtime 17.3 ou superior
-
Permissões:
OWNERouMANAGEpermissões na tabela eCREATEpermissão noEXTERNAL LOCATION
Sintaxe
Para converter sua tabela estrangeira do Catálogo do Unity para ser gerenciada pelo Catálogo do Unity, execute o seguinte comando:
ALTER TABLE source_table SET MANAGED {MOVE | COPY}
Parâmetros
tabela_fonte
Uma tabela estrangeira existente no Catálogo do Unity. As tabelas estrangeiras contêm dados e metadados gerenciados por um catálogo externo. Antes da conversão, se você excluir a tabela de origem no catálogo externo, a tabela externa também será excluída no Unity Catalog. Depois que a tabela é convertida em gerenciada, a remoção da tabela de origem no catálogo externo não afeta a tabela gerenciada do Catálogo do Unity.
MOVEConverte a tabela em gerenciada e desabilita o acesso à tabela de origem no catálogo externo.
O acesso por meio do catálogo externo ou do acesso baseado em caminho falha após a conversão da tabela. Todos os leitores e gravadores da tabela devem usar o namespace do Unity Catalog para acesso.
Todos os leitores e escritores devem usar o acesso baseado em nome. Por exemplo:
SELECT * FROM catalog_name.schema_name.table_name;Não há suporte para acesso baseado em caminho e falha depois que a tabela é convertida. Por exemplo:
SELECT * FROM delta.`protocol://path/to/table`;Os clientes externos (que não são do Azure Databricks) devem suportar leituras em tabelas gerenciadas pelo Unity Catalog. Consulte o Modo de Compatibilidade.
Utilize o painel do Access Insights para ver se os leitores e gravadores que acessam suas tabelas são clientes do Databricks Runtime ou clientes externos que não sejam do Azure Databricks.
Os leitores e gravadores do Azure Databricks devem usar o Databricks Runtime 15.4 LTS ou superior. Se seus leitores ou gravadores usarem o Databricks Runtime 14.3 LTS ou abaixo, consulte a opção Alternativa para leitores e gravadores no Databricks Runtime 14.3 LTS ou abaixo.
Pode haver tempo de inatividade quando leitores ou gravadores acessam a tabela durante a conversão. Para obter mais informações, consulte Converter uma tabela externa em uma tabela gerenciada do Catálogo do Unity.
Se o comando for interrompido, a tabela poderá permanecer como tabela externa, pois a conversão para tabela gerenciada estava incompleta. Para concluir o comando, execute
SET MANAGEDnovamente na tabela externa.A otimização preditiva é configurada para
INHERIT, a menos que você a tenha configurado manualmente. Para verificar se a otimização preditiva está habilitada, confira Se a otimização preditiva está habilitada.Reversão: para reverter a migração de tabela e recuperar o acesso à tabela de origem no catálogo externo, execute o
UNSET MANAGEDcomando. A tabela se torna uma tabela externa depois de executar o comando. Para retornar a tabela a uma tabela estrangeira, solte a tabela e ela será federada novamente como estrangeira na próxima sincronização de catálogo.ALTER TABLE catalog.schema.my_managed_table UNSET MANAGEDAviso
Você deve executar
UNSET MANAGEDantes de remover a tabela. Remover a tabela sem executarUNSET MANAGEDprimeiro pode deixar seu sistema em um estado inválido e pode resultar em perda de dados ou inconsistências.Se você reverter, os commits feitos no local externo entre a conversão e a reversão são acessíveis por versão, mas não por carimbo de data/hora. Sete dias após a reversão, os dados no local gerenciado são excluídos. Para leitores e gravadores no Databricks Runtime 15.4 LTS ou superior, o histórico de tabelas para confirmações feitas após a conversão, mas antes da reversão, permite viagem no tempo por versão, mas não por timestamp.
Após a conversão da tabela, você deve:
- Reiniciar todos os trabalhos de streaming (leitura ou gravação) usando a tabela estrangeira
- Verifique se seus leitores e escritores trabalham com a tabela gerenciada.
COPYConverte a tabela para uma tabela gerenciada sem modificar ou desabilitar o acesso à tabela de origem no catálogo externo.
- Durante a conversão para gerenciada, os dados da tabela de origem são copiados para o local de armazenamento gerenciado definido para a tabela estrangeira, criando duas cópias separadas: a nova tabela gerenciada 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 tenham migrado para o novo catálogo. -
Reversão: para reverter a migração de tabela, você não precisa executar o
UNSET MANAGEDcomando, pois a tabela de origem não foi interrompida no catálogo externo. Exclua a tabela e ela será re-federada como estrangeira na próxima sincronização do catálogo.
Verificar conversão
Você pode confirmar se a tabela externa foi convertida em uma tabela gerenciada:
DESCRIBE EXTENDED catalog_name.schema_name.table_name
Se a tabela tiver sido convertida, o Type valor abaixo col_name será mostrado como MANAGED abaixo data_type.
Limitações conhecidas
A conversão de tabelas estrangeiras em tabelas gerenciadas tem as seguintes limitações:
Clientes de streaming: você deve reiniciar todos os trabalhos de streaming após a conversão.
Várias regiões de nuvem: se o local gerenciado padrão do seu metastore, catálogo ou esquema do Catálogo do Unity estiver em uma região de nuvem 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 de nuvem impõe esses encargos fora do controle do Azure Databricks. Para verificar os locais de seu esquema, catálogo e metastore, use os seguintes comandos:
-- 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, bem como converter tabelas em um catálogo estrangeiro?
Sim, você pode criar tabelas externas ou gerenciadas em um catálogo estrangeiro. O comportamento depende da configuração do esquema:
-
Para esquemas glue ou eHMS ou para esquemas com um local gerenciado definido no Catálogo do Unity: Se você executar
CREATE TABLE foreign_catalog.schema.table, isso criará uma tabela gerenciada ou externa do Catálogo do Unity. A tabela não é enviada por push ou sincronizada para o catálogo externo. -
Para esquemas de conexões metastore internas do Hive: Se você tentar criar uma tabela em um esquema externo, ela ainda criará uma tabela estrangeira e também criará uma tabela em
hive_metastore. - Para o metastore do Hive do workspace legado: Como ele suporta federação de leitura e escrita, ao criar uma tabela no catálogo estrangeiro, uma tabela também será criada no metastore interno do Hive.
E se minhas tabelas estrangeiras forem apoiadas por DBFS?
Ao converter uma tabela baseada em DBFS, armazenamos o mapeamento atual do caminho do DBFS para o caminho na nuvem como a localização do caminho de nuvem da tabela externa.
Posso converter no nível do esquema ou do catálogo?
Você pode iterar por suas tabelas em seus esquemas para converter cada uma individualmente, ou utilizar o DiscoverX Labs Project 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())