Créer des tables dans Unity Catalog
Cet article présente le concept de tables managées et externes dans Unity Catalog et décrit comment créer des tables dans Unity Catalog.
Remarque
Lorsque vous créez une table, veillez à référencer un catalogue régi par Unity Catalog ou à définir le catalogue par défaut sur un catalogue régi par Unity Catalog. Consultez Gérer le catalogue par défaut.
Le catalogue hive_metastore
apparaît dans l’explorateur de catalogues mais n’est pas considéré comme régi par Unity Catalog. Il est géré par le metastore Hive de votre espace de travail Azure Databricks. Tous les autres catalogues répertoriés sont régis par Unity Catalog.
Vous pouvez utiliser l’interface de mise à niveau de table Unity Catalog pour mettre à niveau les tables existantes inscrites dans le metastore Hive vers Unity Catalog. Voir Mettre à niveau des tables et des vues vers Unity Catalog.
Tables managées
Les tables managées constituent la méthode par défaut pour créer des tables dans le catalogue Unity. Unity Catalog gère le cycle de vie et la disposition des fichiers pour ces tables. Vous ne devez pas utiliser d’outils en dehors d’Azure Databricks pour manipuler directement des fichiers dans ces tables.
Les tables managées sont stockées dans le stockage managé, au niveau du metastore, du catalogue ou du schéma, selon la façon dont le schéma et le catalogue sont configurés. Consultez Spécifier un emplacement de stockage managé dans Unity Catalog.
Les tables managées utilisent toujours le format de table Delta.
Quand une table managée est supprimée, ses données sous-jacentes sont supprimées de votre locataire cloud dans les 30 jours.
Tables externes
Les tables externes sont des tables dont les données sont stockées en dehors de l’emplacement de stockage managé spécifié pour le metastore, le catalogue ou le schéma. Utilisez des tables externes uniquement quand vous avez besoin d’un accès direct aux données en dehors des clusters Azure Databricks ou des entrepôts Databricks SQL.
Lorsque vous exécutez DROP TABLE
sur une table externe, le catalogue Unity ne supprime pas les données sous-jacentes. Vous devez être le propriétaire d’une table pour la supprimer. Vous pouvez gérer les privilèges sur les tables externes et les utiliser dans des requêtes comme vous le feriez avec des tables managées. Pour créer une table externe avec SQL, spécifiez un chemin LOCATION
dans votre instruction CREATE TABLE
. Les tables externes peuvent utiliser les formats de fichiers suivants :
- DELTA
- CSV
- JSON
- AVRO
- PARQUET
- ORC
- TEXT
Pour gérer l’accès au stockage cloud sous-jacent pour une table externe, vous devez configurer les informations d’identification de stockage et les emplacements externes.
Pour plus d’informations, consultez créer une table externe.
Spécifications
Vous devez disposer du privilège CREATE TABLE
sur le schéma dans lequel vous souhaitez créer la table, ainsi que le privilège USE SCHEMA
sur le schéma et le privilègeUSE CATALOG
sur le catalogue parent.
Si vous créez une table externe, consultez Créer une table externe pour connaître les autres conditions requises.
Créer une table managée
Pour créer une table managée, exécutez la commande SQL suivante. Vous pouvez également utiliser l' exemple de bloc-notes pour créer une table. Les éléments entre crochets sont optionnels. Remplacez les valeurs d’espace réservé :
<catalog-name>
: nom du catalogue qui contiendra la table.Il ne peut pas s’agir du catalogue
hive_metastore
créé automatiquement pour le metastore Hive associé à votre espace de travail Azure Databricks. Vous pouvez supprimer le nom du catalogue si vous créez la table dans le catalogue par défaut de l’espace de travail.<schema-name>
: nom du schéma qui contiendra la table.<table-name>
: Nom pour la table.<column-specification>
: Le nom et le type de données de chaque colonne.
SQL
CREATE TABLE <catalog-name>.<schema-name>.<table-name>
(
<column-specification>
);
Python
spark.sql("CREATE TABLE <catalog-name>.<schema-name>.<table-name> "
"("
" <column-specification>"
")")
R
library(SparkR)
sql(paste("CREATE TABLE <catalog-name>.<schema-name>.<table-name> ",
"(",
" <column-specification>",
")",
sep = ""))
Scala
spark.sql("CREATE TABLE <catalog-name>.<schema-name>.<table-name> " +
"(" +
" <column-specification>" +
")")
Vous pouvez également créer une table managée avec le fournisseur Databricks Terraform et databricks_table. Vous pouvez récupérer une liste de noms complets de table avec databricks_tables.
Par exemple, pour créer la table main.default.department
et y insérer cinq lignes :
SQL
CREATE TABLE main.default.department
(
deptcode INT,
deptname STRING,
location STRING
);
INSERT INTO main.default.department VALUES
(10, 'FINANCE', 'EDINBURGH'),
(20, 'SOFTWARE', 'PADDINGTON'),
(30, 'SALES', 'MAIDSTONE'),
(40, 'MARKETING', 'DARLINGTON'),
(50, 'ADMIN', 'BIRMINGHAM');
Python
spark.sql("CREATE TABLE main.default.department "
"("
" deptcode INT,"
" deptname STRING,"
" location STRING"
")"
"INSERT INTO main.default.department VALUES "
" (10, 'FINANCE', 'EDINBURGH'),"
" (20, 'SOFTWARE', 'PADDINGTON'),"
" (30, 'SALES', 'MAIDSTONE'),"
" (40, 'MARKETING', 'DARLINGTON'),"
" (50, 'ADMIN', 'BIRMINGHAM')")
R
library(SparkR)
sql(paste("CREATE TABLE main.default.department ",
"(",
" deptcode INT,",
" deptname STRING,",
" location STRING",
")",
"INSERT INTO main.default.department VALUES ",
" (10, 'FINANCE', 'EDINBURGH'),",
" (20, 'SOFTWARE', 'PADDINGTON'),",
" (30, 'SALES', 'MAIDSTONE'),",
" (40, 'MARKETING', 'DARLINGTON'),",
" (50, 'ADMIN', 'BIRMINGHAM')",
sep = ""))
Scala
spark.sql("CREATE TABLE main.default.department " +
"(" +
" deptcode INT," +
" deptname STRING," +
" location STRING" +
")" +
"INSERT INTO main.default.department VALUES " +
" (10, 'FINANCE', 'EDINBURGH')," +
" (20, 'SOFTWARE', 'PADDINGTON')," +
" (30, 'SALES', 'MAIDSTONE')," +
" (40, 'MARKETING', 'DARLINGTON')," +
" (50, 'ADMIN', 'BIRMINGHAM')")
Exemple de notebook : Créer des tables managées
Vous pouvez utiliser les exemples de notebooks suivants pour créer un catalogue, un schéma et une table managée, et pour gérer les autorisations relatives à ceux-ci.
Créer et gérer une table dans Unity Catalog au moyen d’un notebook Python
Créer et gérer une table dans Unity Catalog au moyen d’un notebook SQL
Annuler une table managée
Vous devez être le propriétaire de la table pour la supprimer. Pour annuler une table managée, exécutez la commande SQL suivante :
DROP TABLE IF EXISTS catalog_name.schema_name.table_name;
Quand une table managée est supprimée, ses données sous-jacentes sont supprimées de votre locataire cloud dans les 30 jours.
Créer une table externe
Les données d’une table externe sont stockées dans un chemin d’accès sur votre locataire Cloud. Pour travailler avec des tables externes, Unity Catalog introduit deux objets pour accéder au stockage cloud externe et l’utiliser :
- Les informations d’identification de stockage contiennent une méthode d’authentification permettant d’accéder à un emplacement de stockage cloud. Les informations d’identification de stockage ne contiennent pas de mappage au chemin auquel il accorde l’accès. Stockage informations d’identification sont contrôlées par l’accès pour déterminer les utilisateurs qui peuvent utiliser ces informations d’identification.
- Un emplacement externe mappe les informations d’identification de stockage à un chemin de stockage cloud auquel il accorde l’accès. L’emplacement externe n’accorde l’accès qu’à ce chemin de stockage cloud et à son contenu. Les emplacements externes sont contrôlés par l’accès pour déterminer les utilisateurs qui peuvent les utiliser. Un emplacement externe est utilisé automatiquement lorsque votre commande SQL contient une clause
LOCATION
.
Spécifications
Pour créer une table externe, vous devez disposer des éléments suivants :
- Le privilège
CREATE EXTERNAL TABLE
sur un emplacement externe qui accorde l’accès auLOCATION
accessible par la table externe. - Autorisation
USE SCHEMA
sur le schéma parent de la table. - Autorisation
USE CATALOG
sur le catalogue parent de la table. - Autorisation
CREATE TABLE
sur le schéma parent de la table.
Les emplacements externes et les informations d’identification de stockage sont stockés au niveau du metastore, plutôt que dans un catalogue. Pour créer des informations d’identification de stockage, vous devez être administrateur de compte ou disposer du privilège CREATE STORAGE CREDENTIAL
. Pour créer un emplacement externe, vous devez être l’administrateur du metastore ou disposer du privilège CREATE EXTERNAL LOCATION
. Consultez Se connecter au stockage d’objets cloud à l’aide de Unity Catalog.
Créer une table
Utilisez l’un des exemples de commandes suivants dans un notebook ou l’éditeur de requête SQL pour créer une table externe.
Vous pouvez également utiliser un exemple de notebook pour créer les informations d’identification de stockage, l’emplacement externe et la table externe, et également en gérer les autorisations.
Dans les exemples suivants, remplacez les valeurs d’espace réservé :
<catalog>
: Nom du catalogue qui contiendra la table.Il ne peut pas s’agir du catalogue
hive_metastore
créé automatiquement pour le metastore Hive associé à votre espace de travail Azure Databricks. Vous pouvez supprimer le nom du catalogue si vous créez la table dans le catalogue par défaut de l’espace de travail.<schema>
: Nom du schéma qui contient la table.<table-name>
: Nom pour la table.<column-specification>
: Le nom et le type de données de chaque colonne.<bucket-path>
: Chemin d’accès à l’espace de stockage cloud dans lequel la table sera créée.<table-directory>
: Répertoire dans lequel la table sera créée. Utilisez un répertoire unique pour chaque table.
Important
Une fois qu’une table est créée dans un chemin d’accès, les utilisateurs ne peuvent plus accéder directement aux fichiers de ce chemin d’accès à partir d’Azure Databricks, même s’ils ont reçu des privilèges sur un emplacement externe ou des informations d’identification de stockage. Cela permet de s’assurer que les utilisateurs ne peuvent pas contourner les contrôles d’accès appliqués aux tables en lisant directement les fichiers de votre locataire Cloud.
SQL
CREATE TABLE <catalog>.<schema>.<table-name>
(
<column-specification>
)
LOCATION 'abfss://<bucket-path>/<table-directory>';
Python
spark.sql("CREATE TABLE <catalog>.<schema>.<table-name> "
"("
" <column-specification>"
") "
"LOCATION 'abfss://<bucket-path>/<table-directory>'")
R
library(SparkR)
sql(paste("CREATE TABLE <catalog>.<schema>.<table-name> ",
"(",
" <column-specification>",
") ",
"LOCATION 'abfss://<bucket-path>/<table-directory>'",
sep = ""))
Scala
spark.sql("CREATE TABLE <catalog>.<schema>.<table-name> " +
"(" +
" <column-specification>" +
") " +
"LOCATION 'abfss://<bucket-path>/<table-directory>'")
Le catalogue Unity vérifie que vous disposez des autorisations suivantes :
CREATE EXTERNAL TABLE
sur l’emplacement externe qui fait référence au chemin d’accès de stockage cloud que vous spécifiez.CREATE TABLE
sur le schéma parent.USE SCHEMA
sur le schéma parent.USE CATALOG
sur le catalogue parent.
Si tel est le cas, la table externe est créée. Dans le cas contraire, une erreur se produit et la table externe n’est pas créée.
Notes
Vous pouvez à la place migrer une table externe existante dans le metastore Hive vers le catalogue Unity sans dupliquer ses données. Consultez Mettre à niveau une seule table externe vers Unity Catalog.
Vous pouvez également créer une table externe avec le fournisseur Databricks Terraform et databricks_table. Vous pouvez récupérer une liste de noms complets de table avec databricks_tables.
Exemple de notebook : créer des tables externes
Vous pouvez utiliser l’exemple de notebook suivant pour créer un catalogue, un schéma et une table externe, ainsi que gérer les autorisations sur ceux-ci.
Créer et gérer une table externe dans un notebook Unity Catalog
Créer une table à partir de fichiers stockés dans votre locataire Cloud
Vous pouvez remplir une table managée ou externe avec des enregistrements de fichiers stockés dans votre locataire Cloud. Le catalogue Unity lit les fichiers à cet emplacement et insère leur contenu dans la table. Dans le catalogue Unity, on parle d’accès basé sur le chemin.
Vous pouvez suivre les exemples de cette section ou utiliser l’interface utilisateur « ajouter des données ».
Explorer le contenu des fichiers.
Pour explorer les données stockées dans un emplacement externe avant de créer des tables à partir de ces données, vous pouvez utiliser Catalog Explorer ou les commandes suivantes.
Autorisations requises: vous devez disposer de l’autorisation READ FILES
sur l’emplacement externe associé au chemin d’accès du stockage cloud, une liste des fichiers de données dans cet emplacement est renvoyée.
SQL
Répertoriez les fichiers dans un chemin de stockage cloud :
LIST 'abfss://<path-to-files>';
Interrogez les données des fichiers d’un chemin donné :
SELECT * FROM <format>.`abfss://<path-to-files>`;
Python
Répertoriez les fichiers dans un chemin de stockage cloud :
display(spark.sql("LIST 'abfss://<path-to-files>'"))
Interrogez les données des fichiers d’un chemin donné :
display(spark.read.load("abfss://<path-to-files>"))
R
Répertoriez les fichiers dans un chemin de stockage cloud :
library(SparkR) display(sql("LIST 'abfss://<path-to-files>'"))
Interrogez les données des fichiers d’un chemin donné :
library(SparkR) display(loadDF("abfss://<path-to-files>"))
Scala
Répertoriez les fichiers dans un chemin de stockage cloud :
display(spark.sql("LIST 'abfss://<path-to-files>'"))
Interrogez les données des fichiers d’un chemin donné :
display(spark.read.load("abfss://<path-to-files>"))
Crée une table à partir des fichiers
Suivez les exemples de cette section pour créer une table et la remplir avec des fichiers de données sur votre tenant (locataire) cloud.
Notes
Vous pouvez à la place migrer une table externe existante dans le metastore Hive vers le catalogue Unity sans dupliquer ses données. Consultez Mettre à niveau une seule table externe vers Unity Catalog.
Important
- Lorsque vous créez une table à l’aide de cette méthode, le chemin d’accès de stockage est lu une seule fois, afin d’éviter la duplication des enregistrements. Si vous voulez relire le contenu du répertoire, vous devez supprimer et recréer la table. Pour une table existante, vous pouvez Insérer des enregistrements à partir d’un chemin d’accès de stockage.
- Un compartiment de stockage dans lequel vous créez une table externe ne peut pas également être utilisé pour lire ou écrire des fichiers de données.
- Seuls les fichiers figurant dans le répertoire exact sont lus ; la lecture n’est pas récursive.
- Vous devez disposer des autorisations suivantes :
USE CATALOG
sur le catalogue parent etUSE SCHEMA
sur le schéma.CREATE TABLE
sur le schéma parent.READ FILES
sur l’emplacement externe associé au chemin d’accès du compartiment où se trouvent les fichiers, ou directement sur les informations d’identification de stockage si vous n’utilisez pas d’emplacement externe.- Si vous créez une table externe, vous devez disposer
CREATE EXTERNAL TABLE
du chemin d’accès du compartiment dans lequel la table sera créée.
Pour créer une table managée et la remplir avec des données dans votre stockage cloud, utilisez les exemples suivants.
SQL
CREATE TABLE <catalog>.<schema>.<table-name>
(
<column-specification>
)
SELECT * from <format>.`abfss://<path-to-files>`;
Python
spark.sql("CREATE TABLE <catalog>.<schema>.<table-name> "
"( "
" <column-specification> "
") "
"SELECT * from <format>.`abfss://<path-to-files>`")
R
library(SparkR)
sql(paste("CREATE TABLE <catalog>.<schema>.<table-name> ",
"( ",
" <column-specification> ",
") ",
"SELECT * from <format>.`abfss://<path-to-files>`",
sep = ""))
Scala
spark.sql("CREATE TABLE <catalog>.<schema>.<table-name> " +
"( " +
" <column-specification> " +
") " +
"SELECT * from <format>.`abfss://<path-to-files>`")
Pour créer une table externe et la remplir avec des données dans votre stockage cloud, ajoutez une clause LOCATION
:
SQL
CREATE TABLE <catalog>.<schema>.<table-name>
(
<column-specification>
)
USING <format>
LOCATION 'abfss://<table-location>'
SELECT * from <format>.`abfss://<path-to-files>`;
Python
spark.sql("CREATE TABLE <catalog>.<schema>.<table-name> "
"( "
" <column-specification> "
") "
"USING <format> "
"LOCATION 'abfss://<table-location>' "
"SELECT * from <format>.`abfss://<path-to-files>`")
R
library(SparkR)
sql(paste("CREATE TABLE <catalog>.<schema>.<table-name> ",
"( ",
" <column-specification> ",
") ",
"USING <format> ",
"LOCATION 'abfss://<table-location>' ",
"SELECT * from <format>.`abfss://<path-to-files>`",
sep = ""))
Scala
spark.sql("CREATE TABLE <catalog>.<schema>.<table-name> " +
"( " +
" <column-specification> " +
") " +
"USING <format> " +
"LOCATION 'abfss://<table-location>' " +
"SELECT * from <format>.`abfss://<path-to-files>`")
Insérer des enregistrements à partir d’un chemin d’accès dans une table existante
Pour insérer des enregistrements à partir d’un chemin d’accès de compartiment dans une table existante, utilisez la commande COPY INTO
. Dans les exemples suivants, remplacez les valeurs d’espace réservé :
<catalog>
: Nom du catalogue parent de la table.<schema>
: Nom du catalogue parent de la table.<path-to-files>
: Le chemin d’accès du compartiment qui contient les fichiers de données.<format>
: format des fichiers, par exempledelta
.<table-location>
: Chemin d’accès du compartiment dans lequel la table sera créée.
Important
- Lorsque vous insérez des enregistrements dans une table à l’aide de cette méthode, le chemin d’accès du compartiment que vous fournissez est lu une seule fois, afin d’éviter la duplication des enregistrements.
- Un compartiment de stockage dans lequel vous créez une table externe ne peut pas également être utilisé pour lire ou écrire des fichiers de données.
- Seuls les fichiers figurant dans le répertoire exact sont lus ; la lecture n’est pas récursive.
- Vous devez disposer des autorisations suivantes :
USE CATALOG
sur le catalogue parent etUSE SCHEMA
sur le schéma.MODIFY
sur la table.READ FILES
sur l’emplacement externe associé au chemin d’accès du compartiment où se trouvent les fichiers, ou directement sur les informations d’identification de stockage si vous n’utilisez pas d’emplacement externe.- Pour insérer des enregistrements dans une table externe, vous devez disposer
CREATE EXTERNAL TABLE
du chemin d’accès du compartiment dans lequel se trouve la table.
Pour insérer des enregistrements de fichiers dans un chemin d’accès de compartiment dans une table managée, à l’aide d’un emplacement externe pour lire à partir du chemin d’accès du compartiment :
SQL
COPY INTO <catalog>.<schema>.<table>
FROM (
SELECT *
FROM 'abfss://<path-to-files>'
)
FILEFORMAT = <format>;
Python
spark.sql("COPY INTO <catalog>.<schema>.<table> "
"FROM ( "
" SELECT * "
" FROM 'abfss://<path-to-files>' "
") "
"FILEFORMAT = <format>")
R
library(SparkR)
sql(paste("COPY INTO <catalog>.<schema>.<table> ",
"FROM ( ",
" SELECT * ",
" FROM 'abfss://<path-to-files>' ",
") ",
"FILEFORMAT = <format>",
sep = ""))
Scala
spark.sql("COPY INTO <catalog>.<schema>.<table> " +
"FROM ( " +
" SELECT * " +
" FROM 'abfss://<path-to-files>' " +
") " +
"FILEFORMAT = <format>")
Pour insérer des éléments dans une table externe, ajoutez une clause LOCATION
:
SQL
COPY INTO <catalog>.<schema>.<table>
LOCATION 'abfss://<table-location>'
FROM (
SELECT *
FROM 'abfss://<path-to-files>'
)
FILEFORMAT = <format>;
Python
spark.sql("COPY INTO <catalog>.<schema>.<table> "
"LOCATION 'abfss://<table-location>' "
"FROM ( "
" SELECT * "
" FROM 'abfss://<path-to-files>' "
") "
"FILEFORMAT = <format>")
R
library(SparkR)
sql(paste("COPY INTO <catalog>.<schema>.<table> ",
"LOCATION 'abfss://<table-location>' ",
"FROM ( ",
" SELECT * ",
" FROM 'abfss://<path-to-files>' ",
") ",
"FILEFORMAT = <format>",
sep = ""))
Scala
spark.sql("COPY INTO <catalog>.<schema>.<table> " +
"LOCATION 'abfss://<table-location>' " +
"FROM ( " +
" SELECT * " +
" FROM 'abfss://<path-to-files>' " +
") " +
"FILEFORMAT = <format>")
Ajouter des commentaires à une table
En tant que propriétaire de table ou utilisateur disposant du privilège MODIFY
sur une table, vous pouvez ajouter des commentaires à une table et à ses colonnes. Vous pouvez ajouter des commentaires à l’aide de la fonctionnalité suivante :
- La commande COMMENT ON. Cette option ne prend pas en charge les commentaires de colonne.
- L’option
COMMENT
lorsque vous utilisez les commandes CREATE TABLE et ALTER TABLE. Cette option prend en charge les commentaires de colonne. - Le champ de commentaire « manuel » dans l’Explorateur de catalogues. Cette option prend en charge les commentaires de colonne. Consultez Documenter des données dans l’Explorateur de catalogues à l’aide de commentaires Markdown.
- Commentaires générés par l’IA (également appelés documentation générée par l’IA) dans Catalog Explorer. Vous pouvez afficher un commentaire suggéré par un modèle de langage volumineux (LLM) qui prend en compte les métadonnées de la table, telles que le schéma de table et les noms de colonnes, et modifier le commentaire ou l’accepter tel quel pour l’ajouter. Consultez Ajouter des commentaires générés par l’IA à une table.