Pular para o conteúdo principal

Converter uma tabela estrangeira em uma tabela Unity Catalog .

info

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.

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 executando ALTER TABLE <table_name> ENABLE PREDICTIVE OPTIMIZATION, que a define como ENABLED em vez de INHERIT.

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 : OWNER ou MANAGE permissões na mesa e CREATE permissão no EXTERNAL LOCATION

Sintaxe

Para converter sua tabela externa Unity Catalog para ser controlada Unity Catalog , execute o seguinte comando:

SQL
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 .

  • MOVE

    Converte 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:

      SQL
      SELECT * 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:

      SQL
      SELECT * 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 MANAGED novamente na tabela externa.

    • A otimização preditiva está definida como INHERIT a 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.

      SQL
      ALTER TABLE catalog.schema.my_managed_table UNSET MANAGED
atenção

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.
  • COPY

    Converte 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 MOVE onde as leituras e gravações falham, ao usar COPY, 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:

SQL
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.

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:

Python
df = (dx.from_tables("prod.*.*")
.with_sql("ALTER TABLE {full_table_name} SET MANAGED;")
.apply())