Partilhar via


Converter uma tabela estrangeira em uma tabela gerenciada do Catálogo Unity

Importante

Esta funcionalidade encontra-se na Pré-visualização Pública e só está disponível para clientes participantes neste momento. Para participar na pré-visualização, candidate-se preenchendo este formulário. Esse 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 gerenciada.

Visão geral SET MANAGED

Use o SET MANAGED recurso para converter uma tabela estrangeira em uma tabela gerenciada pelo Catálogo Unity no Azure Databricks. SET MANAGED oferece os seguintes benefícios:

  • Retenção do histórico da tabela.
  • Manter as mesmas configurações de tabela, incluindo o mesmo nome, definições, permissões e vistas.
  • Beneficiando da otimização preditiva. Ao converter uma tabela em gerida, a otimização preditiva é definida como INHERIT, o que significa que herda a configuração do esquema ou do nível do catálogo. Por padrão, isso está desativado no momento. Você pode habilitar a otimização preditiva na tabela convertida executando ALTER TABLE <table_name> ENABLE PREDICTIVE OPTIMIZATION, que a define como ENABLEDINHERIT .

Pré-requisitos

  • Formato de dados: O formato de dados da tabela estrangeira deve ser Delta Lake. Para executar uma conversão única de Parquet, consulte Converter para 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.
  • Tempo de execução: Databricks Runtime 17.3 ou superior
  • Permissões: OWNER ou MANAGE permissões na tabela e CREATE permissão na EXTERNAL LOCATION

Sintaxe

Para converter sua tabela estrangeira do Catálogo Unity para ser gerenciada pelo Catálogo Unity, execute o seguinte comando:

ALTER TABLE source_table SET MANAGED {MOVE | COPY}

Parâmetros

  • source_table

    Uma tabela estrangeira existente no Catálogo Unity. As tabelas estrangeiras 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á descartada no Unity Catalog. Depois que a tabela for convertida em gerenciada, soltar a tabela de origem no catálogo externo não afetará a tabela gerenciada do Catálogo Unity.

  • MOVE

    Converte a tabela em gerenciada e desabilita o acesso à tabela de origem no catálogo externo.

    • O acesso através do catálogo externo ou do acesso por caminho falha depois de a tabela ser convertida. Todos os leitores e gravadores da tabela devem usar o namespace 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;
      
    • O acesso baseado em caminho não é suportado e falha depois que a tabela é convertida. Por exemplo:

      SELECT * FROM delta.`protocol://path/to/table`;
      
    • Os clientes externos (não Azure Databricks) devem oferecer suporte a leituras para tabelas gerenciadas do Unity Catalog. Consulte Modo de compatibilidade.

    • Use o painel do Access Insights para ver se os leitores e gravadores que acessam suas tabelas são clientes Databricks Runtime ou clientes externos que não são 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 usam o Databricks Runtime 14.3 LTS ou inferior, consulte Opção alternativa para leitores e gravadores no Databricks Runtime 14.3 LTS ou inferior.

    • A interrupção pode ocorrer quando leitores ou escritores acessam a tabela durante a conversão. Para obter mais informações, consulte Converter uma tabela externa em uma tabela gerenciada do Catálogo Unity.

    • Se o comando for interrompido, a tabela poderá ser deixada como uma tabela externa, uma vez que a conversão para gerenciado foi incompleta. Para concluir o comando, execute SET MANAGED novamente na tabela externa.

    • A otimização preditiva é definida como INHERIT a menos que você a configure manualmente. Para verificar se a otimização preditiva está ativada, consulte Verificar se a otimização preditiva está ativada.

    • Reversão: para reverter a migração da tabela e recuperar o acesso à tabela de origem no catálogo externo, execute o UNSET MANAGED comando. A tabela torna-se uma tabela externa depois de executar o comando. Para retornar a tabela a uma tabela externa, elimine a tabela e ela será refederada como externa na próxima sincronização de catálogo.

      ALTER TABLE catalog.schema.my_managed_table UNSET MANAGED
      

      Advertência

      Você DEVE executar UNSET MANAGED antes de eliminar a tabela. Eliminar a tabela sem executar UNSET MANAGED primeiro pode deixar o seu sistema em um mau estado e poderá resultar em perda de dados ou inconsistências.

    • Se você reverter, as confirmações feitas no local externo entre a conversão e a reversão poderão ser transferidas no tempo 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 posterior, o histórico da tabela para confirmações feitas após a conversão, mas antes da reversão, pode ser percorrido no tempo por versão, mas não por data e hora.

    • Após a conversão da tabela, deve fazer o seguinte:

      • Reinicie todos os trabalhos de streaming (leitura ou gravação) usando a tabela estrangeira
      • Certifique-se de que seus leitores e escritores trabalhem com a tabela gerenciada.
  • COPY

    Converte a tabela em gerenciada sem modificar ou desabilitar o acesso à tabela de origem no catálogo externo.

    • Durante a conversão para gerenciado, 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 MOVE, onde as leituras e gravações falham, ao usar COPY, o utilizador é responsável por desativar corretamente as leituras e gravações na tabela de origem no catálogo externo e por garantir que as cargas de trabalho tenham sido migradas para o novo catálogo.
    • Reversão: para reverter a migração da tabela, não é necessário executar o UNSET MANAGED comando, pois a tabela de origem não foi interrompida no catálogo externo. Solte a tabela e ela será federada novamente como tabela estrangeira na próxima sincronização do catálogo.

Verificar conversão

Você pode confirmar que sua tabela externa foi convertida em uma tabela gerenciada:

DESCRIBE EXTENDED catalog_name.schema_name.table_name

Se a tabela tiver sido convertida, a Type sub col_name será exibida como MANAGED em 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 metastore, catálogo ou esquema do Unity Catalog estiver em uma região de nuvem diferente do local de armazenamento da tabela externa que está sendo convertida, você poderá incorrer em custos adicionais de transferência de dados entre regiões. O provedor de nuvem impõe essas cobranças fora do controle do Azure Databricks. Para verificar os locais do 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;
    

FAQ

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 gerido definido no Catálogo Unity: Se executar CREATE TABLE foreign_catalog.schema.table, isto criará uma tabela do Catálogo Unity gerida ou externa. A tabela não é enviada por push ou sincronizada com o catálogo externo.
  • Para esquemas de conexões internas do metastore do Hive: Se você tentar criar uma tabela em um esquema externo, ela ainda criará uma tabela estrangeira e também criará uma tabela no hive_metastore.
  • Para o metastore Hive de espaço de trabalho legado: Como é uma federação de leitura e gravação, se se criar uma tabela no catálogo estrangeiro, também é criada uma tabela no metastore interno do Hive.

E se as minhas tabelas estrangeiras forem apoiadas por DBFS?

Ao converter uma tabela suportada por DBFS, armazenamos o mapeamento atual do caminho do DBFS para o caminho da nuvem, definindo-o como a localização do caminho da tabela externa na nuvem.

Posso converter no nível do esquema ou do catálogo?

Você pode percorrer suas tabelas nos seus esquemas para converter cada uma individualmente, ou usar o projeto discoverx labs para converter todo um esquema ou catálogo de uma só vez.

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