Accéder aux tables Databricks à partir de clients Delta
Cette page explique comment utiliser l'API REST de Unity pour créer, lire et écrire dans des tables gérées et externes de Unity Catalog à partir de clients Delta externes. Pour obtenir la liste complète des intégrations prises en charge, consultez les intégrations Unity Catalog.
Créer, lire et écrire à l'aide de l'API REST Unity
Aperçu
La création et l'écriture dans des tables gérées par Unity Catalog à partir de clients Delta sont en aperçu public.
L'API REST Unity fournit aux clients externes un accès en création, lecture et écriture aux tables enregistrées dans Unity Catalog. Configurez l'accès en utilisant l'URL du Workspace comme Endpoint. Les types de tables suivants sont accessibles :
Type de table | Lire l'article | Écriture | Créer |
|---|---|---|---|
Delta managé | Oui | Oui * | Oui * |
Delta externe | Oui | Oui | Oui |
* Pris en charge pour les tables Delta gérées avec des commits de catalogue.
Pour éviter les problèmes potentiels de corruption et de perte de données, Databricks vous recommande de ne pas modifier la même table Delta Lake stockée dans S3 à partir de clients d'écriture différents.
Clients pris en charge
Apache Spark est pris en charge pour la création, la lecture et l'écriture dans des tables Delta gérées et externes de Unity Catalog à l'aide de l'API REST Unity.
Les clients suivants sont pris en charge en version Beta. Contactez votre équipe de compte Databricks si vous souhaitez les utiliser :
- Apache Flink
- DuckDB
- StreamNative
- Starburst
Exigences
Databricks prend en charge l'accès à l'API REST Unity pour les tables dans le cadre de Unity Catalog. Vous devez avoir Unity Catalog activé dans votre workspace afin d'utiliser ces endpoints.
Vous devez également suivre les étapes de configuration suivantes pour configurer l'accès aux tables à partir des clients Delta à l'aide de l'API REST Unity :
-
Activez l' accès aux données externes pour votre métastore. Voir Activer l'accès aux données externes sur le métastore.
-
Accordez au principal qui accède aux données en externe le privilège
EXTERNAL USE SCHEMAsur le schéma contenant les objets. Voir Accorder des privilèges Unity Catalog à un principal. -
Pour les tables externes accédées par chemin d'accès : Accordez au principal le privilège
EXTERNAL USE LOCATIONsur l'emplacement externe contenant le chemin de la table. Voir Accorder des privilèges Unity Catalog à un principal. -
Assurez-vous que le principal dispose des privilèges pertinents :
SELECTsur la table pour les lecturesMODIFYsur la table pour les écrituresCREATEsur le schéma pour la création de table- Pour les écritures externes dans des tables Delta gérées, vérifiez que la table dans laquelle l'écriture est effectuée a les commits de catalogue activés.
-
Authentifiez-vous à l'aide de l'une des méthodes suivantes :
- Jeton d'accès personnel (PAT) : consultez Autoriser l'accès aux ressources Databricks.
- Authentification OAuth machine à machine (M2M) : Prend en charge le refresh automatique des identifiants et des jetons pour les Job Spark de longue durée (plus d'1 heure). Consultez Autoriser l'accès de service principal à Databricks avec OAuth.
Limitations
- L'accès externe aux tables UniForm avec IcebergCompatV3 n'est pas pris en charge actuellement.
- Les clients externes ne peuvent pas modifier les propriétés de table
delta.*oudatabricks.*, ajouter ou supprimer des fonctionnalités de table, renommer des colonnes, et ajouter ou supprimer des contraintesCHECK. - Les clients externes ne peuvent pas effectuer d'opérations de maintenance de table, telles que
OPTIMIZE,VACUUMetANALYZE, sur les tables Delta gérées. - Les clients externes ne peuvent pas créer de tables avec des colonnes générées, des colonnes default ou des colonnes de contrainte.
- Lors de la création de tables externes, Databricks recommande d'utiliser Apache Spark pour s'assurer que les définitions de colonnes sont dans un format compatible avec Apache Spark. L'API ne valide pas l'exactitude de la spécification des colonnes. Si la spécification n’est pas compatible avec Apache Spark, Databricks Runtime pourrait ne pas être en mesure de lire les tables.
Pour lire les tables avec des filtres de lignes ou des masques de colonnes attachés à partir d'un client Delta externe, voir Contrôles d'accès basés sur les attributs (ABAC) inter-moteurs pour les versions et la configuration client requises.
Accéder aux tables Delta avec Apache Spark à l'aide de l'authentification PAT
L'authentification PAT pour les clients Spark externes nécessite :
- Unity Catalog Spark client version 0.5.0 ou supérieure (
io.unitycatalog:unitycatalog-spark) - Apache Spark 4,0 ou 4,1
- Delta Spark 4.3.0 ou version ultérieure
- Un jeton d'accès personnel pour le principal accédant à Unity Catalog. Consultez Autoriser l'accès aux ressources Databricks.
La configuration suivante est requise pour lire ou écrire dans des tables Delta gérées et externes Unity Catalog avec Apache Spark en utilisant l'authentification PAT :
"spark.sql.extensions": "io.delta.sql.DeltaSparkSessionExtension",
"spark.sql.catalog.spark_catalog": "io.unitycatalog.spark.UCSingleCatalog",
"spark.sql.catalog.<uc-catalog-name>": "io.unitycatalog.spark.UCSingleCatalog",
"spark.sql.catalog.<uc-catalog-name>.uri": "<workspace-url>",
"spark.sql.catalog.<uc-catalog-name>.token": "<token>",
"spark.sql.defaultCatalog": "<uc-catalog-name>",
"spark.hadoop.fs.s3.impl": "org.apache.hadoop.fs.s3a.S3AFileSystem",
"spark.jars.packages": "io.delta:delta-spark_4.1_2.13:4.3.0,io.unitycatalog:unitycatalog-spark_4.1_2.13:0.5.0,org.apache.hadoop:hadoop-aws:3.4.2"
Substituez les variables suivantes :
-
<uc-catalog-name>: le nom du catalogue dans Unity Catalog qui contient vos tables. -
<token>: Jeton d'accès personnel (PAT) pour le principal configurant l'intégration. -
<workspace-url>: l'URL du workspace Databricks. Par exemple,cust-success.cloud.databricks.com.
Les versions des packages affichées ci-dessus sont à jour depuis la dernière mise à jour de cette page. Des versions plus récentes pourraient être disponibles. Vérifiez que les versions des packages sont compatibles avec votre version de Spark.
Pour plus de détails sur la configuration d'Apache Spark pour le stockage d'objets cloud, consultez la documentation Unity Catalog OSS.
Databricks Runtime 16.4 et supérieur est requis pour lire, écrire ou créer des tables avec des commits de catalogue activés. Databricks Runtime 18,0 ou version ultérieure est requis pour activer ou désactiver les commits de catalogue sur les tables existantes.
Pour créer des tables Delta gérées avec des commits de catalogue, utilisez le SQL suivant :
CREATE TABLE <uc-catalog-name>.<schema-name>.<table-name> (id INT, desc STRING)
TBLPROPERTIES ('delta.feature.catalogManaged' = 'supported') USING delta;
Pour créer des tables Delta externes, utilisez le SQL suivant :
CREATE TABLE <uc-catalog-name>.<schema-name>.<table-name> (id INT, desc STRING)
USING delta
LOCATION <path>;
Accéder aux tables Delta avec Apache Spark en utilisant l'authentification OAuth
Databricks prend également en charge l'authentification OAuth machine à machine (M2M). OAuth gère automatiquement le renouvellement des jetons et des identifiants pour l'authentification Unity Catalog.
L'authentification OAuth pour les clients Spark externes nécessite :
- Unity Catalog Spark version client 0,5,0 ou ultérieure (
io.unitycatalog:unitycatalog-spark) - Apache Spark 4,0 ou 4,1
- Delta Spark 4.3.0 ou version ultérieure
- Un Service Principal OAuth M2M avec les autorisations appropriées. Consultez Autoriser l'accès de service principal à Databricks avec OAuth.
La configuration suivante est requise pour créer, lire ou écrire dans des tables gérées par Unity Catalog et des tables Delta externes avec Apache Spark à l’aide de l’authentification OAuth :
"spark.sql.extensions": "io.delta.sql.DeltaSparkSessionExtension",
"spark.sql.catalog.spark_catalog": "io.unitycatalog.spark.UCSingleCatalog",
"spark.sql.catalog.<uc-catalog-name>": "io.unitycatalog.spark.UCSingleCatalog",
"spark.sql.catalog.<uc-catalog-name>.uri": "<workspace-url>",
"spark.sql.catalog.<uc-catalog-name>.auth.type": "oauth",
"spark.sql.catalog.<uc-catalog-name>.auth.oauth.uri": "<oauth-token-endpoint>",
"spark.sql.catalog.<uc-catalog-name>.auth.oauth.clientId": "<oauth-client-id>",
"spark.sql.catalog.<uc-catalog-name>.auth.oauth.clientSecret": "<oauth-client-secret>",
"spark.sql.defaultCatalog": "<uc-catalog-name>",
"spark.hadoop.fs.s3.impl": "org.apache.hadoop.fs.s3a.S3AFileSystem",
"spark.jars.packages": "io.delta:delta-spark_4.1_2.13:4.3.0,io.unitycatalog:unitycatalog-spark_4.1_2.13:0.5.0,org.apache.hadoop:hadoop-aws:3.4.2"
Substituez les variables suivantes :
-
<uc-catalog-name>: le nom du catalogue dans Unity Catalog qui contient vos tables. -
<oauth-token-endpoint>: URL de l'Endpoint du jeton OAuth. Pour construire cette URL :- Localisez l'URL de votre Workspace Databricks.
- Utilisez le format :
https://<workspace-url>/oidc/v1/token
-
<oauth-client-id>: ID client OAuth pour votre Service Principal. Consultez Autoriser l'accès de service principal à Databricks avec OAuth. -
<oauth-client-secret>: Secret client OAuth pour votre Service Principal. Consultez Autoriser l'accès de service principal à Databricks avec OAuth. -
<workspace-url>: l'URL du workspace Databricks. Par exemple,cust-success.cloud.databricks.com.
Les versions des packages affichées ci-dessus sont à jour depuis la dernière mise à jour de cette page. Des versions plus récentes pourraient être disponibles. Vérifiez que les versions des packages sont compatibles avec votre version de Spark.