Partager via


Convertir une table étrangère en table de catalogue Unity managée

Important

Cette fonctionnalité est disponible en préversion publique et est disponible uniquement pour les clients participants pour l’instant. Pour participer à l'aperçu, remplissez ce formulaire. Cette fonctionnalité prend uniquement en charge la conversion de tables étrangères fédérées à l’aide de HMS et de glue Federation.

Cette page explique comment utiliser SET MANAGED pour convertir une table étrangère en table gérée.

Vue d’ensemble de SET MANAGED

Utilisez la SET MANAGED fonctionnalité pour convertir une table étrangère en table managée Unity Catalog dans Azure Databricks. SET MANAGED offre les avantages suivants :

  • Conservation de l’historique des tables.
  • Conservez les mêmes configurations de table, notamment le même nom, les mêmes paramètres, autorisations et vues.
  • Tirer parti de l’optimisation prédictive. Lors de la conversion d’une table en table gérée, l’optimisation prédictive est définie INHERIT, ce qui signifie qu’elle hérite du paramètre du schéma ou du niveau catalogue. Par défaut, cette option est actuellement désactivée. Vous pouvez activer l’optimisation prédictive sur la table convertie en exécutant ALTER TABLE <table_name> ENABLE PREDICTIVE OPTIMIZATION, ce qui la configure pour ENABLED au lieu de INHERIT.

Prerequisites

  • Format de données : le format de données de la table étrangère doit être Delta Lake. Pour effectuer une conversion unique pour Parquet, consultez Convertir en Delta Lake.
  • Type de table : le type de table HMS doit être une table HMS externe. La commande échoue si la table est une table HMS gérée.
  • Runtime : Databricks Runtime 17.3 ou version ultérieure
  • Autorisations : OWNER ou MANAGE autorisations sur la table et CREATE autorisation sur le EXTERNAL LOCATION

Syntaxe

Pour convertir votre table étrangère du catalogue Unity en vue d’être gérée par Unity Catalog, exécutez la commande suivante :

ALTER TABLE source_table SET MANAGED {MOVE | COPY}

Paramètres

  • source_table

    Table de données étrangère existante dans le catalogue Unity. Les tables étrangères contiennent des données et des métadonnées gérées par un catalogue externe. Avant la conversion, si vous supprimez la table source dans le catalogue externe, la table étrangère est également supprimée dans le catalogue Unity. Une fois la table convertie en table gérée, la suppression de la table source dans le catalogue externe n’affecte pas la table managée du catalogue Unity.

  • MOVE

    Convertit la table en table gérée et désactive l’accès à la table source dans le catalogue externe.

    • L’accès via le catalogue externe ou l’accès basé sur le chemin d’accès échoue une fois la table convertie. Tous les lecteurs et les enregistreurs de la table doivent utiliser l’espace de noms du catalogue Unity pour l’accès.

    • Tous les lecteurs et les écrivains doivent utiliser un accès basé sur le nom. Par exemple:

      SELECT * FROM catalog_name.schema_name.table_name;
      
    • L’accès basé sur le chemin n’est pas pris en charge et échoue une fois la table convertie. Par exemple:

      SELECT * FROM delta.`protocol://path/to/table`;
      
    • Les clients externes (non-Azure Databricks) doivent prendre en charge les lectures dans des tables gérées par Unity Catalog. Consultez le mode de compatibilité.

    • Utilisez le tableau de bord Access Insights pour déterminer si les lecteurs et les enregistreurs accédant à vos tables sont Databricks Runtime ou des clients non-Azure Databricks externes.

    • Les lecteurs et les enregistreurs Azure Databricks doivent utiliser Databricks Runtime 15.4 LTS ou version ultérieure. Si vos lecteurs ou auteurs utilisent Databricks Runtime 14.3 LTS ou une version antérieure, consultez l’option alternative pour les lecteurs et les auteurs sur Databricks Runtime 14.3 LTS ou une version antérieure.

    • Une interruption peut se produire lorsque les lecteurs ou les écrivains accèdent à la table pendant la conversion. Pour plus d’informations, consultez Convertir une table externe en table de catalogue Unity managée.

    • Si votre commande est interrompue, la table peut être laissée en tant que table externe, car la conversion en gestion était incomplète. Pour terminer la commande, exécutez à nouveau SET MANAGED sur la table externe.

    • L’optimisation prédictive est définie à INHERIT moins que vous ne l’ayez configuré manuellement. Pour vérifier si l’optimisation prédictive est activée, consultez Vérifier si l’optimisation prédictive est activée.

    • Annuler : pour annuler la migration de la table et restaurer l'accès à la table source dans le catalogue externe, exécutez la commande UNSET MANAGED. La table devient une table externe après avoir exécuté la commande. Pour renvoyer la table à une table étrangère, supprimez la table et elle sera re-fédérée en tant qu’étrangère dans la prochaine synchronisation du catalogue.

      ALTER TABLE catalog.schema.my_managed_table UNSET MANAGED
      

      Avertissement

      Il est impératif d'exécuter UNSET MANAGED avant de supprimer la table. La suppression de la table sans exécuter UNSET MANAGED au préalable peut laisser votre système dans un état dégradé et peut entraîner une perte de données ou des incohérences.

    • Si vous revenez en arrière, les validations que vous avez effectuées à l’emplacement externe entre la conversion et le retour en arrière sont consultables par version, mais pas par date ou heure. Sept jours après l'annulation, les données de l’emplacement géré sont supprimées. Pour les lecteurs et les rédacteurs dans Databricks Runtime 15.4 LTS ou versions ultérieures, l’historique des tables pour les validations effectuées après une conversion, mais avant la restauration, est réversible dans le temps par version, mais pas par horodatage.

    • Après la conversion de table, vous devez :

      • Redémarrez les tâches de streaming (lecture ou écriture) à l’aide de la table externe
      • Assurez-vous que vos lecteurs et écrivains travaillent avec la table gérée.
  • COPY

    Convertit la table en gestion sans modifier ou désactiver l’accès à la table source dans le catalogue externe.

    • Lors de la conversion en données gérées, les données de la table source sont copiées dans l’emplacement de stockage managé défini pour la table étrangère, créant deux copies distinctes : la nouvelle table managée et la table source dans le catalogue externe.
    • Contrairement à MOVE où les lectures et écritures échouent, lors de l’utilisation de COPY, vous êtes chargé de désactiver correctement les lectures et les écritures dans la table source du catalogue externe et d'assurer que les charges de travail ont migré vers le nouveau catalogue.
    • Restauration : pour restaurer la migration de table, vous n’avez pas besoin d’exécuter la UNSET MANAGED commande, car la table source n’a pas été interrompue dans le catalogue externe. Supprimez la table et elle sera re-fédérée comme étrangère dans la prochaine synchronisation du catalogue.

Vérifier la conversion

Vous pouvez vérifier que votre table externe a été convertie en table managée :

DESCRIBE EXTENDED catalog_name.schema_name.table_name

Si la table a été convertie, la Type sous col_name apparaît comme MANAGED sous data_type.

Limitations connues

La conversion de tables étrangères en tables managées présente les limitations suivantes :

  • Clients de diffusion en continu : vous devez redémarrer tous les travaux de streaming après la conversion.

  • Plusieurs régions cloud : si l’emplacement managé par défaut de votre metastore, catalogue ou schéma Unity Catalog se trouve dans une région cloud différente de l’emplacement de stockage de la table étrangère en cours de conversion, vous pouvez entraîner des coûts de transfert de données interrégions supplémentaires. Le fournisseur de cloud impose ces frais en dehors du contrôle d’Azure Databricks. Pour vérifier les emplacements de votre schéma, catalogue et metastore, utilisez les commandes suivantes :

    -- Check schema location
    DESCRIBE SCHEMA EXTENDED catalog_name.schema_name;
    
    -- Check catalog location
    DESCRIBE CATALOG EXTENDED catalog_name;
    
    -- Check metastore location
    DESCRIBE METASTORE;
    

Questions fréquentes (FAQ)

Puis-je créer des tables et convertir des tables dans un catalogue étranger ?

Oui, vous pouvez créer des tables externes ou gérées dans un catalogue étranger. Le comportement dépend de la configuration du schéma :

  • Pour les schémas Glue ou eHMS, ou pour les schémas avec un emplacement managé défini dans le catalogue Unity : si vous exécutez CREATE TABLE foreign_catalog.schema.table, cela crée une table managée ou externe du catalogue Unity. La table n’est pas envoyée ou synchronisée vers le catalogue externe.
  • Pour les schémas des connexions de metastore Hive internes : si vous tentez de créer une table dans un schéma étranger, elle crée toujours une table étrangère et crée également une table dans hive_metastore.
  • Pour le metastore Hive de l’espace de travail hérité : étant donné qu’il s’agit d’une fédération de lecture et écriture, si vous créez une table dans le catalogue distant, il crée également une table dans le metastore Hive interne.

Que se passe-t-il si mes tables étrangères bénéficient du support DBFS ?

Lors de la conversion d’une table sauvegardée par DBFS, nous stockons le mappage actuel du chemin DBFS vers le chemin cloud comme emplacement du chemin d’accès cloud de la table externe.

Puis-je convertir au niveau du schéma ou du catalogue ?

Vous pouvez parcourir vos tables dans vos schémas pour les convertir individuellement, ou utiliser le projet DiscoverX Labs pour convertir des schémas ou des catalogues entiers en une seule fois.

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