Activer l'accès aux données externes aux tables de streaming et aux vues matérialisées
Si vous avez activé l'accès aux données externes pour Unity Catalog, vous pouvez ajouter un accès aux données externes aux vues matérialisées et aux tables de streaming gérées par pipeline ou autonomes. Cela permet aux clients externes Delta et Iceberg d'accéder à vos datasets via Unity Catalog et les API REST du catalogue Iceberg, sans nécessiter une copie complète des données.
L'accès aux données externes fonctionne pour les datasets gérés par les Lakeflow pipelines ainsi que pour les vues matérialisées et les tables de streaming autonomes.
Fonctionnalités
L’utilisation de l’accès aux données externes expose les mêmes données que celles disponibles dans Databricks pour les vues matérialisées et les tables de streaming gérées par pipeline ou autonomes, sans créer de doublon des données. Ceci donne les caractéristiques suivantes en matière de performance et de fonctionnalité :
- Aucune copie de données requise : l'accès externe est activé sans dupliquer l'intégralité du dataset.
- Accès externe via les APIs : lisez les vues matérialisées et les tables de streaming à l'aide des APIs Delta Lake ou Iceberg.
- Cohérence lecture-après-écriture : les lecteurs externes peuvent accéder aux données à jour après une mise à jour du dataset, garantissant ainsi l'absence d'obsolescence. Les mises à jour sont disponibles immédiatement après un refresh.
- Objet de table unique : Les datasets apparaissent en externe comme des tables gérées avec le même nom que le dataset source au sein des APIs Unity Catalog.
- **Faible coût :** comme le dataset complet n’est pas copié, le surcoût lié à la fourniture d’un accès externe est faible.
Exigences
Les exigences pour vos datasets sont :
- Unity Catalog : Vos tables de streaming et vues matérialisées doivent utiliser Unity Catalog.
- Version de Databricks Runtime : vous devez utiliser Databricks Runtime 17,3 ou une version ultérieure.
- Mode de publication default : la lisibilité externe n'est prise en charge qu'en mode de publication default. Pour utiliser la lisibilité externe, migrez vers le mode de publication default. Les fonctionnalités qui dépendent de métadonnées externes, telles que le CDF des vues matérialisées, fonctionneront en mode de publication hérité.
Les exigences de vos clients sont :
- Version d'API Delta : Le client doit prendre en charge les API Delta Lake 4.0.0 ou supérieures, y compris les vecteurs de suppression, et doit utiliser les API du catalogue Unity Catalog pour l'accès.
- Version de l'API Iceberg : Le client peut également y accéder en utilisant les APIs du catalogue Iceberg qui prennent en charge la spécification Iceberg v3 .
- Privilèges Unity Catalog : Le principal lisant les datasets en externe doit disposer du privilège EXTERNAL USE SCHEMA sur le schéma et du
SELECTprivilège sur la table.
Si votre client ne prend pas en charge ces exigences, vous pouvez également utiliser le mode de compatibilité, qui prend en charge tous les clients Delta et Iceberg, mais nécessite la création d'une copie complète du dataset.
Comment activer l'accès à un dataset
Il y a deux étapes pour activer l'accès externe à un dataset.
-
Activez les métadonnées externes en utilisant soit la configuration du pipeline, soit une propriété de table. Le paramètre au niveau de la table prévaut sur la configuration du pipeline lorsque les deux sont définis, et il est pris en charge à la fois pour les tables de streaming et les vues matérialisées gérées par le pipeline et autonomes.
- Configuration du pipeline : définissez
pipelines.externalMetadata.enabledsurtruepour activer les métadonnées externes pour tous les datasets du pipeline. Les vues matérialisées et les tables de streaming autonomes créées avec Databricks SQL n’ont pas de configuration de pipeline ; utilisez plutôt une propriété de table.
- Configuration du pipeline : définissez
- Pipeline settings UI
- Pipeline configuration JSON
In the pipeline settings, complete the following steps:
- Open your pipeline and click Settings.
- Under Configuration, add a key-value pair: Key
pipelines.externalMetadata.enabled, Valuetrue. - Click Save.
In the configuration section of your pipeline JSON, add:
{
"configuration": {
"pipelines.externalMetadata.enabled": "true"
}
}
-
Propriété de table : ajoutez la propriété suivante à la définition de la table de streaming ou de la vue matérialisée. Pour les pipelines Lakeflow Connect, consultez Définir les propriétés de table Delta.
SQLCREATE OR REFRESH [MATERIALIZED VIEW | STREAMING TABLE] tbl_name
TBLPROPERTIES('pipelines.externalMetadata.enabled' = 'true')
Après avoir enregistré la configuration, exécutez ou redémarrez le pipeline pour appliquer les modifications :
- Pipelines déclenchés : Exécutez le pipeline une fois.
- Pipelines continus : Arrêtez et redémarrez le pipeline.
Pour les objets Databricks SQL autonomes, utilisez CREATE OR REPLACE MATERIALIZED VIEW ou CREATE OR REFRESH STREAMING TABLE avec la propriété de table. L'instruction create or refresh applique la propriété.
- Si vous prévoyez de lire le dataset avec un client Iceberg moderne, ajoutez les propriétés UniForm Iceberg V3 suivantes en plus de la propriété de métadonnées externes. Pour les pipelines Lakeflow Connect, consultez Définir les propriétés de table Delta.
Propriété | Utilisation |
|---|---|
| Activer l'accès externe pour la table. Ce paramètre au niveau de la table prévaut sur la configuration du pipeline lorsque les deux sont définis. |
| Le mappage de colonnes est requis pour Iceberg. |
| Activer le suivi des lignes pour les lectures Iceberg. |
| Activer les lectures Iceberg. |
| Utilisez Iceberg V3 pour les lectures Iceberg. |
CREATE OR REFRESH [MATERIALIZED VIEW | STREAMING TABLE] tbl_name
TBLPROPERTIES(
'delta.columnMapping.mode' = 'name',
'delta.enableRowTracking' = 'true',
'delta.enableIcebergCompatV3' = 'true',
'delta.universalFormat.enabledFormats' = 'iceberg',
'pipelines.externalMetadata.enabled' = 'true')
Pour les vues matérialisées, vous pouvez utiliser la syntaxe USING ICEBERG équivalente à la place.
CREATE OR REFRESH MATERIALIZED VIEW tbl_name USING ICEBERG
Pour les datasets gérés par pipeline, utilisez les instructions de mise à jour du pipeline ci-dessus pour appliquer les propriétés Iceberg. Pour les objets Databricks SQL autonomes, réexécutez la définition de l'objet avec les propriétés mises à jour. Utilisez CREATE OR REPLACE MATERIALIZED VIEW pour une vue matérialisée ou CREATE OR REFRESH STREAMING TABLE pour une table de streaming. Pour voir les propriétés de votre dataset, utilisez les instructions SQL DESCRIBE DETAIL ou DESCRIBE EXTENDED.
Dépannage de l’accès aux données externes
Si vous pensez que les métadonnées externes sont obsolètes, un principal disposant du privilège MODIFY sur la table peut manuellement Trigger la mise à jour des métadonnées sur le compute de cluster partagé en utilisant Databricks Runtime 17.3 ou version ultérieure :
REPAIR TABLE <catalog>.<schema>.<table-name> SYNC METADATA;
Vous pouvez vérifier la présence des métadonnées Iceberg dans l'interface utilisateur de Catalog Explorer sur la page des détails de la table. Alternativement, exécutez les commandes suivantes dans l'éditeur SQL ou un Notebook Databricks :
DESCRIBE DETAIL <catalog>.<schema>.<table-name>;
DESCRIBE EXTENDED <catalog>.<schema>.<table-name>;
Pour une table de streaming, comparez la version des métadonnées Iceberg avec la dernière version de la table de streaming. La comparaison de versions pour les vues matérialisées n'est pas encore disponible.
Lecture des données à partir de clients externes
Les sections suivantes fournissent des exemples sur la façon de lire votre dataset à partir de différents clients et environnements.
Pour plus de détails sur la configuration, consultez l'accès client Delta et l'accès client Iceberg.
Utiliser l'API REST d'Unity avec le lecteur Spark Delta
Utilisez Apache Spark™ version 4.0 ou ultérieure. Vous pouvez download sur https://spark.apache.org/downloads.html.
- Selon votre fournisseur cloud, exécutez la commande suivante pour start un Shell Spark SQL avec Delta 4.0 et Unity Catalog.
- AWS
- Azure
- GCP
bin/spark-sql \
--packages org.apache.spark:spark-hadoop-cloud_2.13:4.0.0,io.unitycatalog:unitycatalog-spark_2.13:0.3.1 \
--conf spark.sql.extensions=io.delta.sql.DeltaSparkSessionExtension \
--conf spark.sql.catalog.spark_catalog=io.unitycatalog.spark.UCSingleCatalog \
--conf spark.hadoop.fs.s3.impl=org.apache.hadoop.fs.s3a.S3AFileSystem \
--conf spark.sql.catalog.<uc-catalog-name>=io.unitycatalog.spark.UCSingleCatalog \
--conf spark.sql.catalog.<uc-catalog-name>.uri=<workspace_url> \
--conf spark.sql.catalog.<uc-catalog-name>.token=<PAT> \
--conf spark.sql.defaultCatalog=<uc-catalog-name>
bin/spark-sql \
--packages org.apache.hadoop:hadoop-azure:3.3.6,io.unitycatalog:unitycatalog-spark_2.13:0.3.1 \
--conf spark.sql.extensions=io.delta.sql.DeltaSparkSessionExtension \
--conf spark.sql.catalog.spark_catalog=io.unitycatalog.spark.UCSingleCatalog \
--conf spark.sql.catalog.<uc-catalog-name>=io.unitycatalog.spark.UCSingleCatalog \
--conf spark.sql.catalog.<uc-catalog-name>.uri=<workspace_url> \
--conf spark.sql.catalog.<uc-catalog-name>.token=<PAT> \
--conf spark.sql.defaultCatalog=<uc-catalog-name>
bin/spark-sql \
--packages io.unitycatalog:unitycatalog-spark_2.13:0.3.1 \
--conf spark.sql.extensions=io.delta.sql.DeltaSparkSessionExtension \
--conf spark.sql.catalog.spark_catalog=io.unitycatalog.spark.UCSingleCatalog \
--conf spark.hadoop.fs.gs.impl=com.google.cloud.hadoop.fs.gcs.GoogleHadoopFileSystem \
--conf spark.hadoop.fs.AbstractFileSystem.gs.impl=com.google.cloud.hadoop.fs.gcs.GoogleHadoopFS \
--conf spark.sql.catalog.<uc-catalog-name>=io.unitycatalog.spark.UCSingleCatalog \
--conf spark.sql.catalog.<uc-catalog-name>.uri=<workspace_url> \
--conf spark.sql.catalog.<uc-catalog-name>.token=<PAT> \
--conf spark.sql.defaultCatalog=<uc-catalog-name>
-
À partir du Shell SQL, vous pouvez désormais accéder à votre dataset avec Spark SQL. Par exemple :
Shellspark-sql ()> SELECT * FROM <uc-catalog>.<uc-schema>.<uc-table-name>;
Utilisez le lecteur Snowflake Iceberg
Dans Snowflake, vous pouvez utiliser le lecteur Iceberg. Cela nécessite la prise en charge d'Iceberg v3 dans Snowflake.
-
Configurez le catalogue Iceberg REST dans Snowflake.
SQLCREATE OR REPLACE CATALOG INTEGRATION my_uc_int
CATALOG_SOURCE = ICEBERG_REST
TABLE_FORMAT = ICEBERG
CATALOG_NAMESPACE = '<uc-schema-name>'
REST_CONFIG = (
CATALOG_URI = '<workspace-url>/api/2.1/unity-catalog/iceberg-rest'
CATALOG_NAME = '<uc-catalog-name>'
ACCESS_DELEGATION_MODE = VENDED_CREDENTIALS
)
REST_AUTHENTICATION = (
TYPE = BEARER
BEARER_TOKEN = '<PAT>'
)
ENABLED = TRUE;
CREATE OR REPLACE ICEBERG TABLE my_table
CATALOG = 'my_uc_int'
CATALOG_TABLE_NAME = '<uc-table-name>'; -
Accédez à votre dataset depuis Snowflake SQL.
SQLALTER ICEBERG TABLE my_table REFRESH;
SELECT * FROM my_table;
Utilisez le catalogue Iceberg REST avec le lecteur Spark Iceberg
Utilisez Apache Spark™ version 4.0 ou ultérieure. Vous pouvez download sur https://spark.apache.org/downloads.html.
-
Dans AWS, exécutez la commande suivante pour start un Shell Spark SQL avec Iceberg v3.
Shellbin/spark-sql \
--packages org.apache.iceberg:iceberg-spark-runtime-4.0_2.13:1.10.0,org.apache.iceberg:iceberg-aws-bundle:1.10.0 \
--conf spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions \
--conf spark.sql.catalog.<uc-catalog-name>=org.apache.iceberg.spark.SparkCatalog \
--conf spark.sql.catalog.<uc-catalog-name>.io-impl=org.apache.iceberg.aws.s3.S3FileIO \
--conf spark.sql.catalog.<uc-catalog-name>.type=rest \
--conf spark.sql.catalog.<uc-catalog-name>.uri=<workspace_url>/api/2.1/unity-catalog/iceberg-rest \
--conf spark.sql.catalog.<uc-catalog-name>.token='<PAT>' \
--conf spark.sql.catalog.<uc-catalog-name>.warehouse=<uc-catalog-name> \
--conf spark.sql.iceberg.vectorization.enabled=false -
Accédez à votre dataset depuis Spark SQL.
Shellspark-sql ()> SELECT * FROM <uc-catalog>.<uc-schema>.<uc-table-name>;
Migration depuis le mode de compatibilité
Si vous partagez actuellement un dataset à l'aide du mode de compatibilité, vous pouvez migrer vers l'utilisation de l'accès aux données externes.
- Activez cette fonctionnalité en suivant les étapes décrites dans Comment activer l'accès pour un dataset.
- Désactiver le mode de compatibilité. Consulter Désactiver le Mode de compatibilité
Limitations
Les limitations connues suivantes concernent l'accès aux données externes pour les tables de streaming et les vues matérialisées.
- Écritures externes : les écritures externes vers les dataset de pipeline ne sont pas prises en charge.
- Accès basé sur le chemin d’accès : Les lecteurs externes qui nécessitent un accès basé sur le chemin d’accès (lecture directe via un emplacement de stockage au lieu de l’interface API UC) ne sont pas pris en charge. Pour prendre en charge l'accès basé sur le chemin, vous pouvez utiliser le mode de compatibilité, qui prend en charge l'accès basé sur le chemin, mais nécessite une copie complète du dataset.
- Fonctionnalités de sécurité : la prise en charge de la sécurité au niveau des lignes ou du masquage au niveau des colonnes à partir de lectures externes n'est pas prise en charge.
- Time travel : le time travel via cette fonctionnalité n'est pas pris en charge.
- Commits de catalogue (bêta) : Les commits de catalogue ne sont pas compatibles avec l’accès aux données externes. Pour utiliser l’accès aux données externes sur une table de streaming ou une vue matérialisée, vous devez d’abord désactiver les commits de catalogue.
- Fabric : La lecture à partir de Microsoft Fabric n'est pas prise en charge.