Aller au contenu principal

Travailler avec des tables externes

Dans Unity Catalog, une table externe stocke ses fichiers de données dans le stockage d'objets cloud au sein de votre tenant cloud. Unity Catalog continue de gérer les métadonnées de la table, assurant une gouvernance complète des données pour toutes les requêtes. Cependant, il ne gère pas le cycle de vie, l'optimisation, l'emplacement de stockage ou le Layout des données.

Lorsque vous définissez une table externe Unity Catalog, vous devez spécifier un emplacement de stockage. Cet emplacement est un emplacement externe enregistré dans Unity Catalog. Lorsque vous supprimez une table externe, Unity Catalog supprime les métadonnées de la table, mais ne supprime pas les fichiers de données sous-jacents.

Cette page se concentre sur les tables externes de Unity Catalog. Les tables externes dans le Hive metastore hérité ont des comportements différents. Consultez Objets de base de données dans le Hive metastore hérité.

Quand utiliser des tables externes

Databricks recommande d'utiliser des tables externes pour les cas d'usage suivants :

  • Vous devez enregistrer une table soutenue par des données existantes qui n'est pas compatible avec les tables gérées par Unity Catalog, telles que JSON ou Avro. Consultez Formats de fichier pour les tables externes.
  • Vous avez besoin d'un accès direct aux données à partir de clients non-Databricks qui ne prennent pas en charge d'autres modèles d'accès externes. Les privilèges Unity Catalog ne sont pas appliqués lorsque les utilisateurs accèdent à des fichiers de données à partir de systèmes externes. Consultez Accéder aux données Databricks à l'aide de systèmes externes.

Dans la plupart des cas, Databricks recommande d'utiliser les tables gérées par Unity Catalog afin de bénéficier d'une optimisation automatique des tables, d'une amélioration des performances des query et de coûts réduits. Pour migrer des tables externes vers des tables gérées, consultez Convertir des tables Delta Lake externes ou étrangères en tables gérées par Unity Catalog.

important

Si vous mettez à jour les métadonnées de table externe à l'aide d'un client non-Databricks ou d'un accès basé sur le chemin depuis Databricks, ces métadonnées ne synchronisent pas automatiquement leur état avec Unity Catalog. Databricks déconseille de telles mises à jour de métadonnées, mais si vous en effectuez une, vous devez exécuter MSCK REPAIR TABLE <table-name> SYNC METADATA pour mettre à jour le schéma dans Unity Catalog. Voir REPAIR TABLE.

Formats de fichier pour les tables externes

Les tables externes peuvent utiliser les formats de fichier suivants :

  • Delta
  • CSV
  • JSON
  • AVRO
  • Parquet
  • ORC
  • TEXT

Créer une table externe

Vous pouvez créer des tables externes à l'aide de commandes SQL ou d'opérations d'écriture de DataFrame.

Avant de commencer

Avant de créer une table externe, vous devez d’abord configurer un emplacement externe qui accorde l’accès à votre stockage cloud.

Databricks recommande d'utiliser le template de démarrage rapide AWS CloudFormation pour créer des emplacements externes. Cette approche configure automatiquement les identifiants de stockage et l'emplacement externe, simplifiant considérablement le processus de configuration. Pour des instructions détaillées, consultez Créer un identifiant de stockage et un emplacement externe pour S3 à l'aide d'AWS CloudFormation.

Pour créer une table externe, vous devez satisfaire aux exigences d'autorisation suivantes :

  • Le privilège CREATE EXTERNAL TABLE sur un emplacement externe qui accorde l'accès au LOCATION accédé par la table externe.
  • L'autorisation USE CATALOG sur le catalogue parent de la table.
  • L'autorisation USE SCHEMA sur le schéma parent de la table.
  • L'autorisation CREATE TABLE sur le schéma parent de la table.
remarque

Lorsqu'un emplacement externe S3 est associé à plusieurs métastores, évitez d'accorder l'accès en écriture aux tables qui utilisent cet emplacement S3, car les écritures provenant de différents métastores vers la même table externe peuvent entraîner des problèmes de cohérence. Cependant, la lecture depuis le même emplacement externe S3 à travers plusieurs métastores est sûre.

Exemples

Utilisez l’un des exemples suivants dans un Notebook ou l’éditeur de query SQL pour créer une table externe.

Dans les exemples suivants, remplacez les valeurs d'espace réservé :

  • <catalog>: Le nom du catalogue qui contiendra la table.
  • <schema>: Le nom du schéma qui contiendra la table.
  • <table-name>: un nom pour la table.
  • <column-name> et <data-type>: Le nom et le type de données de chaque colonne.
  • <bucket-path>: Le chemin d'accès au bucket de stockage cloud où la table sera créée.
  • <table-directory>: répertoire où la table sera créée. Utilisez un répertoire unique pour chaque table.
  • <source-table>: Table à utiliser comme source de données lors de la création d'une table à partir des résultats de la query.

Les chemins de table ne doivent contenir que des caractères ASCII standard (lettres A–Z, a–z, chiffres 0–9, et symboles courants comme /, _, -).

Pour créer une table externe dans S3 avec un schéma défini, exécutez ce qui suit :

SQL
CREATE TABLE <catalog>.<schema>.<table-name>
(
<column-name> <data-type>
)
LOCATION 's3://<bucket-path>/<table-directory>';

Pour créer une table externe dans S3 à partir des résultats de la query, exécutez les éléments suivants :

SQL
CREATE TABLE <catalog>.<schema>.<table-name>
LOCATION 's3://<bucket-path>/<table-directory>'
AS SELECT * FROM <source-table>;

Pour plus d'informations sur les paramètres de création de table, consultez CREATE TABLE.

Les options de syntaxe SQL suivantes fonctionnent avec les opérations DataFrame :

Supprimer une table externe

Pour supprimer une table, vous devez en être le propriétaire ou avoir le privilège MANAGE sur la table. Pour supprimer une table externe, exécutez la commande suivante :

SQL
DROP TABLE IF EXISTS catalog_name.schema_name.table_name;

Unity Catalog ne supprime pas les données sous-jacentes du stockage cloud lorsque vous supprimez une table externe. Vous devez supprimer directement les fichiers de données sous-jacents si vous devez supprimer des données associées à la table.

Exemple de notebook : Créer des tables externes

Vous pouvez utiliser le Notebook d'exemple suivant pour créer un catalogue, un schéma et une table externe, et pour gérer les autorisations sur ceux-ci.

Pour une configuration simplifiée, Databricks recommande d'utiliser le AWS CloudFormation Quickstart pour créer l'emplacement externe avant d'exécuter ce Notebook.

Créer et gérer une table externe dans un Notebook Unity Catalog