Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Important
Cette fonctionnalité est disponible en préversion publique.
Cette page fournit des informations sur la création de tables externes du catalogue Unity sauvegardées par Delta Lake à partir de clients et de systèmes externes.
Remarque
Databricks recommande d’utiliser Apache Spark pour créer des tables externes pour vous assurer que les définitions de colonnes sont compatibles avec Apache Spark. L’API ne valide pas la précision de la spécification de colonne. Si la spécification n’est pas compatible avec Apache Spark, Databricks Runtime peut ne pas pouvoir lire les tables.
Spécifications
Activez l’Accès à des données externes pour votre metastore. Voir Activation de l'accès aux données externes sur le métastore.
Accorder au principal la configuration de l’intégration des privilèges folllowing
-
EXTERNAL USE SCHEMAprivilège sur le schéma contenant les objets. -
EXTERNAL USE LOCATIONprivilège sur l’emplacement externe contenant le chemin d’accès. Consultez Accorder des privilèges de catalogue Unity principaux. -
CREATE TABLEautorisation sur la table,CREATE EXTERNAL TABLEsur l’emplacement externe,USE CATALOGsur son catalogue parent etUSE SCHEMAsur son schéma parent.
Consultez Accorder des privilèges de catalogue Unity principaux.
-
Vous pouvez créer des tables externes à l’aide d’Apache Spark, de l’API catalogue Unity ou d’autres clients externes.
Créer des tables Delta à l’aide d’Apache Spark
Voici un exemple des paramètres permettant de configurer Apache Spark pour créer des tables Delta externes du catalogue Unity :
"spark.sql.extensions": "io.delta.sql.DeltaSparkSessionExtension",
"spark.sql.catalog.spark_catalog": "io.unitycatalog.spark.UCSingleCatalog",
"spark.hadoop.fs.s3.impl": "org.apache.hadoop.fs.s3a.S3AFileSystem",
"spark.sql.catalog.<uc-catalog-name>": "io.unitycatalog.spark.UCSingleCatalog",
"spark.sql.catalog.<uc-catalog-name>.uri": "<workspace-url>/api/2.1/unity-catalog",
"spark.sql.catalog.<uc-catalog-name>.token": "<token>",
"spark.sql.defaultCatalog": "<uc-catalog-name>",
Remplacez les variables suivantes :
-
<uc-catalog-name>: nom du catalogue dans le catalogue Unity qui contient vos tables. -
<workspace-url>: URL de l’espace de travail Azure Databricks. -
<token>: jeton OAuth pour l'entité principale qui configure l'intégration.
Pour que Apache Spark et Delta Lake fonctionnent avec le catalogue Unity, vous aurez besoin d’au moins Apache Spark 3.5.3 et delta Lake 3.2.1.
Incluez les dépendances suivantes lors du lancement d’Apache Spark :
--packages "org.apache.hadoop:hadoop-aws:3.3.4,\
io.delta:delta-spark_2.12:3.2.1,\
io.unitycatalog:unitycatalog-spark_2.12:0.2.0"
Vous pouvez maintenant créer des tables externes à l’aide de SQL :
CREATE TABLE <uc-catalog-name>.<schema-name>.<table-name> (id INT, desc STRING)
USING delta
LOCATION <path>;
Créer des tables Delta à l’aide de l’API
Pour créer une table Delta externe à l’aide de l’API REST du catalogue Unity, procédez comme suit :
Étape 1 : Effectuer une requête POST à l’API Create Table
Utilisez la demande d’API suivante pour inscrire les métadonnées de table dans le catalogue Unity :
curl --location --request POST 'https://<workspace-url>/api/2.0/unity-catalog/tables/' \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"name": "<table-name>",
"catalog_name": "<uc-catalog-name>",
"schema_name": "<schema-name>",
"table_type": "EXTERNAL",
"data_source_format": "DELTA",
"storage_location": "<path>",
"columns": [
{
"name": "id",
"type_name": "LONG",
"type_text": "bigint",
"type_json": "\"long\"",
"type_precision": 0,
"type_scale": 0,
"position": 0,
"nullable": true
},
{
"name": "name",
"type_name": "STRING",
"type_text": "string",
"type_json": "\"string\"",
"type_precision": 0,
"type_scale": 0,
"position": 1,
"nullable": true
}
]
}'
Remplacez les variables suivantes :
-
<workspace-url>: URL de l’espace de travail Azure Databricks -
<token>: Jeton pour le principal effectuant l’appel d’API -
<uc-catalog-name>: nom du catalogue dans le catalogue Unity qui contiendra la table externe -
<schema-name>: nom du schéma dans le catalogue où la table sera créée -
<table-name>: Nom de la table externe -
<path>: chemin d’accès complet aux données de table
Étape 2 : Initialiser l’emplacement de la table Delta
L’appel d’API ci-dessus inscrit la table dans :[UC], mais elle ne crée pas les fichiers Delta à l’emplacement de stockage. Pour initialiser l’emplacement de la table, écrivez une table Delta vide à l’aide de Spark :
Le schéma utilisé dans cette étape doit correspondre exactement aux définitions de colonne fournies dans la demande d’API.
from pyspark.sql.types import StructType, StructField, StringType, LongType
# Define schema matching your API call
schema = StructType([
StructField("id", LongType(), True),
StructField("name", StringType(), True)
])
# Create an empty DataFrame and initialize the Delta table
empty_df = spark.createDataFrame([], schema)
empty_df.write \
.format("delta") \
.mode("overwrite") \
.save("<path>")
Remarque
L’API Create Table pour les clients externes présente les limitations suivantes :
- Seules les tables Delta externes sont prises en charge (
"table_type": "EXTERNAL"et"data_source_format": "DELTA"). - Seuls les champs suivants sont autorisés :
namecatalog_nameschema_nametable_typedata_source_formatcolumnsstorage_locationproperties
- Les masques de colonne ne sont pas pris en charge.