Partager via


Créer des tables Delta externes à partir de clients externes

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

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 :
    • name
    • catalog_name
    • schema_name
    • table_type
    • data_source_format
    • columns
    • storage_location
    • properties
  • Les masques de colonne ne sont pas pris en charge.