Aller au contenu principal

Activer l'accès aux données externes aux tables de streaming et aux vues matérialisées

info

Aperçu

Cette fonctionnalité est en aperçu public.

Si vous avez activé l’accès aux données externes à Unity Catalog, vous pouvez également ajouter un accès aux données externes à vos datasets de pipeline. Ceci permet aux clients externes Delta et Iceberg d’accéder à vos datasets via les API REST des catalogues Unity Catalog et Iceberg, sans nécessiter de copie complète des données.

L'accès aux données externes pour les datasets de pipeline fonctionne pour les LakeFlow Pipelines.

Fonctionnalités

L'utilisation de l'accès aux données externes pour les datasets de pipeline expose les mêmes données disponibles dans Databricks, sans créer de duplicata des données. Voici les caractéristiques de performance et de fonctionnalité correspondantes :

  • 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 :

  • L'accès externe doit être activé sur le schéma : Votre workspace doit être inscrit à l'aperçu public Accès aux données externes pour les datasets de pipeline , et il doit être activé pour le schéma avec vos datasets. Consultez Activer l'accès aux données externes à Unity Catalog.
  • 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.

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 SELECT privilège sur la table.
remarque

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 trois étapes pour activer l’accès externe à un dataset.

  1. Dans votre définition de dataset, ajoutez le TBLPROPERTIES suivant. Ceci n'est requis que pour les lecteurs Iceberg v3. Si vous n'avez que des lecteurs Delta, vous pouvez ignorer cette étape.

Propriété

Utilisation

'delta.columnMapping.mode' = 'name'

Le mappage de colonnes est requis pour Iceberg.

'delta.universalFormat.enabledFormats' = 'iceberg'

Activer UniForm pour Iceberg.

'delta.enableIcebergCompatV3' = 'true'

Utilisez Iceberg V3 pour UniForm.

'delta.enableChangeDataFeed' = 'false'

Le flux de données de modification n'est pas compatible avec l'accès externe, il doit donc être false.

Propriété

Utilisation

'delta.columnMapping.mode' = 'name'

Le mappage de colonnes est requis pour Iceberg.

'delta.universalFormat.enabledFormats' = 'iceberg'

Activer UniForm pour Iceberg.

'delta.enableIcebergCompatV3' = 'true'

Utilisez Iceberg V3 pour UniForm.

'delta.enableChangeDataFeed' = 'false'

Le flux de données de modification n'est pas compatible avec l'accès externe, il doit donc être false.

Par exemple, vous pouvez mettre à jour la définition d'une vue matérialisée dans les LakeFlow Pipelines en ajoutant le TBLPROPERTIES suivant à votre query :

SQL
CREATE OR REFRESH MATERIALIZED VIEW view_name
TBLPROPERTIES(
...
'delta.columnMapping.mode' = 'name',
'delta.enableIcebergCompatV3' = 'true',
'delta.universalFormat.enabledFormats' = 'iceberg',
'delta.enableChangeDataFeed' = 'false')
...

Pour afficher les propriétés de votre dataset, vous pouvez utiliser l'instruction SQL DESCRIBE EXTENDED. 2. Appliquez les propriétés Iceberg au pipeline. Ceci n'est requis que pour les lecteurs Iceberg v3. Si vous n'avez que des lecteurs Delta, vous pouvez ignorer cette étape.

  • Pipelines déclenchés : Exécutez le pipeline une fois.
  • Pipelines continus : Arrêtez et redémarrez le pipeline.
  1. Dans la configuration de votre pipeline, définissez pipelines.externalMetadata.enabled sur true.
  1. Ouvrez votre pipeline et cliquez sur Paramètres .
  2. Sous Configuration , ajoutez une paire clé-valeur : Clé pipelines.externalMetadata.enabled, Valeur true.
  3. Cliquez sur Enregistrer .

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.

Lecture des données à partir de clients externes

Les sections suivantes décrivent comment lire votre dataset à partir de différents clients et environnements.

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.

  1. Selon votre fournisseur cloud, exécutez la commande suivante pour start un Shell Spark SQL avec Delta 4.0 et Unity Catalog.
Shell
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>
  1. À partir du Shell SQL, vous pouvez désormais accéder à votre dataset avec Spark SQL. Par exemple :

    Shell
    spark-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.

  1. Configurez le catalogue Iceberg REST dans Apache Spark.

    Shell
    bin/spark-shell \
    --packages org.apache.iceberg:iceberg-spark-runtime-3.5_2.12:1.8.0,org.apache.iceberg:iceberg-aws-bundle:1.8.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>.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>
  2. Configurez le catalogue Iceberg REST dans Snowflake.

    SQL
    CREATE 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>';
  3. Accédez à votre dataset depuis Spark SQL.

    Shell
    spark-sql ()> SELECT * FROM <uc-catalog>.<uc-schema>.<uc-table-name>;

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.

  1. Dans AWS, exécutez la commande suivante pour start un Shell Spark SQL avec Iceberg v3.

    Shell
    bin/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
  2. Accédez à votre dataset depuis Spark SQL.

    Shell
    spark-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.

  1. Activez cette fonctionnalité en suivant les étapes décrites dans Comment activer l'accès pour un dataset.
  2. 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 ou CDF : la prise en charge de Time Travel ou de Change Data Feed (CDF) via cette fonctionnalité n'est pas prise en charge. Le CDF doit être désactivé lorsque UniForm Iceberg est activé.
  • 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, vous devez d'abord désactiver les commits du catalogue. Les commits de catalogue ne sont pas disponibles pour les vues matérialisées.
  • Pipelines d'ingestion : Les tables de streaming créées avec Lakeflow Connect ne prennent pas en charge l'activation des propriétés de table Iceberg et sont uniquement disponibles avec les lecteurs Delta.
  • Fabric : La lecture à partir de Microsoft Fabric n'est pas prise en charge.
  • Snowflake Iceberg reader : Vous devez utiliser le lecteur Iceberg v3 dans Snowflake pour lire les datasets de pipeline.
  • VM et ST autonomes : Cette fonctionnalité est uniquement prise en charge pour les vues matérialisées et les tables de streaming gérées par un pipeline. Les vues matérialisées et les tables de streaming autonomes ne sont pas prises en charge. Contactez votre équipe de compte Databricks si vous avez besoin d'un accès externe pour les vues matérialisées et les tables de streaming autonomes.