Qu'est-ce que la fédération de query ?
Avec la fédération de query, les queries sont transférées vers la base de données étrangère à l'aide des APIs JDBC. La query est exécutée à la fois dans Databricks et à l'aide de compute distant. La fédération de query est utilisée pour des sources telles que MySQL, PostgreSQL, Redshift, Teradata, et d'autres.

Pourquoi utiliser Lakehouse Federation ?
Le lakehouse met l’accent sur le stockage centralisé des données afin de réduire la redondance et l’isolement des données. Votre organisation pourrait avoir de nombreux systèmes de données en production, et vous pourriez vouloir query des données dans des systèmes connectés pour diverses raisons :
- Rapports à la demande.
- Travaux de preuve de concept.
- La phase exploratoire de nouveaux pipelines ETL ou rapports.
- Prise en charge des charges de travail pendant la migration incrémentielle.
Dans chacun de ces scénarios, la fédération de query vous permet d'obtenir des insights plus rapidement, car vous pouvez interroger les données sur place et éviter un traitement ETL complexe et chronophage.
La fédération de query est destinée aux cas d'utilisation lorsque :
- Vous ne souhaitez pas ingérer de données dans Databricks.
- Vous voulez que vos queries tirent parti du compute dans le système de base de données externe.
- Vous souhaitez bénéficier des avantages des interfaces et de la gouvernance des données de Unity Catalog, y compris le contrôle d'accès granulaire, la data lineage et la recherche.
Fédération de requêtes vs. Lakeflow Connect
La fédération de {glossary:query} vous permet d'interroger des {glossary:data source}s externes sans déplacer vos données. Databricks recommande l'ingestion via les connecteurs gérés de Lakeflow Connect, car ils montent en charge pour accommoder des volumes de données élevés et réduisent la latence des query. Cependant, vous pourriez vouloir interroger vos données sans les déplacer. Lorsque vous avez le choix entre les connecteurs d'ingestion gérés et la fédération de {glossary:query}, choisissez la fédération de {glossary:query} pour les rapports ad hoc ou les travaux de preuve de concept sur vos {glossary:ETL} {glossary:pipeline}s.
Si votre source le prend en charge, les connecteurs d'ingestion basés sur la query sont une alternative légère de Lakeflow Connect aux connecteurs CDC. Ils query la source directement selon un calendrier à l'aide d'une colonne de curseur, sans nécessiter de passerelle ou de stockage intermédiaire. Utilisez des connecteurs d'ingestion basés sur la query lorsque vous avez besoin d'une ingestion récurrente mais que vous ne disposez pas d'infrastructure CDC.
Vue d'ensemble de la configuration de la fédération de query
Pour rendre un dataset disponible en lecture seule via Lakehouse Federation, vous créez les éléments suivants :
- Une connexion, un objet sécurisable dans Unity Catalog, qui spécifie un chemin et des informations d’identification pour accéder à un système de base de données externe.
- Un catalogue externe, un objet sécurisable dans Unity Catalog qui reflète une base de données dans un système de données externe, vous permettant d'effectuer des queries en lecture seule sur ce système de données dans votre Databricks Workspace, en gérant l'accès à l'aide de Unity Catalog.
Sources de données prises en charge
La fédération de query prend en charge les connexions aux sources suivantes :
- MySQL
- PostgreSQL
- Teradata
- Oracle
- Amazon Redshift
- Salesforce Data 360
- Snowflake
- Microsoft SQL Server
- Azure Synapse (SQL Data Warehouse)
- Google BigQuery
- Databricks
Exigences de connexion.
Exigences du Workspace :
- Workspace activé pour Unity Catalog. Les Workspace créés après le 8 novembre 2023 sont automatiquement activés pour Unity Catalog, y compris le provisionnement automatique du métastore. Vous n'avez pas besoin de créer manuellement un métastore, à moins que votre workspace ne soit antérieur à l'activation automatique et n'ait pas été activé pour Unity Catalog. Voir Se familiariser avec Unity Catalog.
Compute requis :
- Connectivité réseau de votre ressource de compute vers les systèmes de bases de données cibles. Consultez les recommandations de mise en réseau pour Lakehouse Federation.
- Le compute Databricks doit utiliser Databricks Runtime 13.3 LTS ou une version ultérieure et le mode d’accès **Standard** ou **Dédié**.
- Les SQL warehouses doivent être Pro ou Serverless et doivent utiliser la version 2023.40 ou ultérieure.
Autorisations requises :
- Pour créer une connexion, vous devez être administrateur de métastore ou un utilisateur disposant du privilège
CREATE CONNECTIONsur le métastore Unity Catalog attaché à l'espace de travail. Dans les espaces de travail qui ont été activés automatiquement pour Unity Catalog, les administrateurs d'espace de travail disposent du privilègeCREATE CONNECTIONpar default. - Pour créer un catalogue externe, vous devez disposer de l'autorisation
CREATE CATALOGsur le metastore et être le propriétaire de la connexion ou disposer du privilègeCREATE FOREIGN CATALOGsur la connexion. Dans les workspaces activés automatiquement pour Unity Catalog, les administrateurs du workspace disposent du privilègeCREATE CATALOGpar default.
Des exigences d'autorisation supplémentaires sont spécifiées dans chaque section basée sur les tâches qui suit.
Créer une connexion
Une connexion spécifie un chemin d'accès et des identifiants pour accéder à un système de base de données externe. Pour créer une connexion, vous pouvez utiliser Catalog Explorer ou la commande SQL CREATE CONNECTION dans un Notebook Databricks ou l'éditeur de query Databricks SQL.
Vous pouvez également utiliser l'API REST Databricks ou la CLI Databricks pour créer une connexion. Voir POST /api/2.1/unity-catalog/connections et les commandes Unity Catalog.
Autorisations requises : administrateur du Metastore ou utilisateur disposant du privilège CREATE CONNECTION.
- Catalog Explorer
- SQL
-
Dans votre workspace Databricks, cliquez sur
Catalogue .
-
En haut du volet **Catalogue**, cliquez sur
l'icône **Ajouter** et sélectionnez **Créer une connexion** dans le menu.
-
Saisissez un nom convivial pour la connexion .
-
Sélectionnez le Type de connexion (fournisseur de base de données, comme MySQL ou PostgreSQL).
-
Ajouter un commentaire (facultatif).
-
Cliquez sur Suivant .
-
Saisissez les propriétés de connexion (telles que les informations d'hôte, le chemin d'accès et les identifiants d'accès).
Chaque type de connexion nécessite des informations de connexion différentes. Consultez l'article correspondant à votre type de connexion, listé dans la table des matières à gauche.
-
Cliquez sur Créer une connexion .
-
Saisir un nom pour le catalogue étranger.
-
(Facultatif) Cliquez sur **Tester la connexion** pour confirmer que cela fonctionne.
-
Cliquez sur **Créer un catalogue**.
-
Sélectionnez les workspaces dans lesquels les utilisateurs peuvent accéder au catalogue que vous avez créé. Vous pouvez sélectionner Tous les workspaces ont accès , ou cliquer sur Attribuer aux workspaces , sélectionner les workspaces, puis cliquer sur Attribuer .
-
Modifiez le propriétaire qui pourra gérer l'accès à tous les objets du catalogue. start à taper un principal dans la zone de texte, puis cliquez sur le principal dans les résultats renvoyés.
-
Accordez les **Privilèges** sur le catalogue. Cliquez sur Accorder :
-
Spécifiez les **principals** qui auront accès aux objets dans le catalogue. start à taper un principal dans la zone de texte, puis cliquez sur le principal dans les résultats renvoyés.
-
Sélectionnez les **Préréglages de privilèges** à accorder à chaque principal. Tous les utilisateurs du compte se voient accorder
BROWSEpar default.- Sélectionnez Data Reader dans le menu déroulant pour accorder
readprivilèges sur les objets du catalogue. - Sélectionnez **Data Editor** dans le menu déroulant pour accorder
readlesmodifyprivilèges et sur les objets du catalogue. - Sélectionnez manuellement les privilèges à accorder.
- Sélectionnez Data Reader dans le menu déroulant pour accorder
-
Cliquez sur Accorder .
-
Cliquez sur Suivant .
-
Sur la page Métadonnées , spécifiez les paires clé-valeur de balises. Pour plus d'informations, consultez Appliquer des balises aux objets sécurisables d'Unity Catalog.
-
Ajouter un commentaire (facultatif).
-
Cliquez sur Enregistrer .
-
Exécutez la commande suivante dans un Notebook ou l'éditeur de query SQL. Cet exemple concerne les connexions à une base de données PostgreSQL. Les options varient selon le type de connexion. Consultez l'article correspondant à votre type de connexion, répertorié dans la table des matières à gauche.
CREATE CONNECTION <connection-name> TYPE postgresql
OPTIONS (
host '<hostname>',
port '<port>',
user '<user>',
password '<password>'
);
Nous vous recommandons d'utiliser les secrets Databricks plutôt que des chaînes de texte brut pour les valeurs sensibles comme les identifiants. Par exemple :
CREATE CONNECTION <connection-name> TYPE postgresql
OPTIONS (
host '<hostname>',
port '<port>',
user secret ('<secret-scope>','<secret-key-user>'),
password secret ('<secret-scope>','<secret-key-password>')
)
Pour en savoir plus sur la configuration des secrets, consultez la gestion des secrets.
Pour des informations sur la gestion des connexions existantes, consultez Gérer les connexions pour Lakehouse Federation.
Créer un catalogue étranger
Si vous utilisez l'interface utilisateur pour créer une connexion à la source de données, la création du catalogue étranger est incluse et vous pouvez ignorer cette étape.
Un catalogue étranger reflète une base de données dans un système de données externe afin que vous puissiez query et gérer l'accès aux données dans cette base de données à l'aide de Databricks et d'Unity Catalog. Pour créer un catalogue étranger, vous utilisez une connexion à la source de données qui a déjà été définie.
Pour créer un catalogue externe, vous pouvez utiliser l'Explorateur de catalogues ou la commande SQL CREATE FOREIGN CATALOG dans un Notebook Databricks ou l'éditeur de query SQL. Vous pouvez également utiliser l'API Unity Catalog. Consultez la documentation de référence Databricks.
Les métadonnées des catalogues externes sont synchronisées dans Unity Catalog à chaque interaction avec le catalogue. Pour le mappage des types de données entre Unity Catalog et la source de données, consultez la section Mappages des types de données de la documentation de chaque source de données.
Autorisations requises : autorisation CREATE CATALOG sur le metastore et soit la propriété de la connexion, soit le privilège CREATE FOREIGN CATALOG sur la connexion.
- Catalog Explorer
- SQL
-
Dans votre Workspace Databricks, cliquez sur
**Catalogue** pour ouvrir l’Explorateur de catalogues.
-
En haut du volet Catalogue , cliquez sur l'icône
Ajouter des données et sélectionnez Créer un catalogue dans le menu.
Autrement, depuis la page Quick access , cliquez sur le bouton Catalogs , puis cliquez sur le bouton Create catalog .
-
Suivez les instructions pour créer des catalogues étrangers dans Créer des catalogues.
Exécutez la commande SQL suivante dans un Notebook ou dans l'éditeur de query SQL. Les éléments entre parenthèses sont facultatifs. Remplacez les valeurs d'espace réservé :
<catalog-name>: Nom du catalogue dans Databricks.<connection-name>: L'objet de connexion qui spécifie la source de données, le chemin d'accès et les informations d'identification d'accès.<database-name>: Nom de la base de données que vous souhaitez répliquer en tant que catalogue dans Databricks. Non requis pour MySQL, qui utilise un espace de noms à deux couches.<external-catalog-name>: Databricks-to-Databricks uniquement : Nom du catalogue dans le Databricks Workspace externe que vous mettez en miroir. Voir Créer un catalogue externe.
CREATE FOREIGN CATALOG [IF NOT EXISTS] <catalog-name> USING CONNECTION <connection-name>
OPTIONS (database '<database-name>');
Les identifiants d'accès au catalogue étranger proviennent de la connexion nommée, vous ne les spécifiez donc pas ici. Lorsque vous créez la connexion, fournissez les identifiants à l'aide des secrets Databricks plutôt que des chaînes de texte brut, comme indiqué dans l'exemple de connexion ci-dessus.
Pour obtenir des informations sur la gestion et l'utilisation des catalogues étrangers, consultez Gérer et utiliser les catalogues étrangers.
Refresh les métadonnées
Unity Catalog refresh automatiquement les métadonnées des tables étrangères au moment de la query. Si le schéma du catalogue externe change, Unity Catalog récupère les métadonnées les plus récentes lors de l'exécution de la query. Ce comportement maintient le schéma à jour et est optimal pour la plupart des charges de travail.
Cependant, Databricks recommande d'actualiser manuellement les métadonnées dans les cas suivants :
- Pour maintenir la cohérence des tables étrangères accédées par des moteurs externes. Les chemins qui contournent Databricks Runtime ne trigger pas d'automatic refresh, ce qui peut entraîner des métadonnées obsolètes.
- Pour améliorer les performances des charges de travail où vous souhaitez éviter le refresh des métadonnées pendant l'exécution de la query. L'actualisation des métadonnées de manière proactive permet aux requêtes de s'exécuter plus rapidement en utilisant les métadonnées mises en cache. Cette approche est particulièrement utile immédiatement après la création d'un catalogue étranger, car la première query déclenche autrement un refresh complet.
Automatisez les métadonnées refresh avec Lakeflow Jobs
Planifiez un refresh périodique des métadonnées à l’aide d’un Lakeflow Job avec la commande SQL REFRESH FOREIGN. Par exemple :
-- Refresh an entire catalog
> REFRESH FOREIGN CATALOG some_catalog;
-- Refresh a specific schema
> REFRESH FOREIGN SCHEMA some_catalog.some_schema;
-- Refresh a specific table
> REFRESH FOREIGN TABLE some_catalog.some_schema.some_table;
Configurez le Job pour qu'il s'exécute à intervalles réguliers, en fonction de la fréquence à laquelle vous anticipez des modifications de schéma externes.
Charger des données à partir de tables externes avec des vues matérialisées
Databricks recommande de charger des données externes en utilisant la fédération de query lorsque vous créez des vues matérialisées. Consultez les vues matérialisées.
Lorsque vous utilisez la fédération de query, les utilisateurs peuvent référencer les données fédérées comme suit :
CREATE MATERIALIZED VIEW xyz AS SELECT * FROM federated_catalog.federated_schema.federated_table;
Afficher les queries fédérées générées par le système
La fédération de requêtes traduit les instructions Databricks SQL en instructions qui peuvent être transférées vers la source de données fédérée. Pour afficher l'instruction SQL générée, cliquez sur le nœud d'analyse de la source de données externe sur la vue Graphe de Query Profile, ou exécutez l'instruction SQL EXPLAIN FORMATTED. Consultez la section Pushdown pris en charge de la documentation de chaque source de données pour en savoir plus sur la couverture.
Limitations
- Les requêtes sont en lecture seule. La seule exception est lorsque Lakehouse Federation est utilisée pour fédérer le Hive metastore hérité d'un Workspace (fédération de catalogues). Dans ce scénario, les tables étrangères sont inscriptibles. Voir Que signifie écrire dans un catalogue étranger dans un Hive metastore fédéré ?.
- La limitation des connexions est déterminée à l'aide de la limite de queries concurrentes de Databricks SQL. Il n'y a aucune limite entre les warehouses par connexion. Consultez la logique de mise en file d'attente et de dimensionnement automatique.
- La mise en cache des requêtes Databricks (cache de résultats et cache disque) n'est pas prise en charge pour les requêtes fédérées. Cela signifie que le parameter
use_cached_resultne s'applique pas aux query sur des sources fédérées. - Les tables et schémas dont les noms sont invalides dans Unity Catalog ne sont pas pris en charge et sont ignorés par Unity Catalog lors de la création d'un catalogue étranger. Consultez la liste des règles de nommage et des limitations dans Identifiants.
- Les noms de table et de schéma sont convertis en minuscules dans Unity Catalog. Si cela provoque des conflits de noms, Databricks ne peut garantir quel objet est importé dans le catalogue étranger.
- Pour chaque table externe référencée, Databricks planifie une sous-requête dans le système distant afin de renvoyer un sous-ensemble de données de cette table, puis renvoie le résultat à une tâche d'exécuteur Databricks sur un seul Stream. Si le jeu de résultats est trop volumineux, l'exécuteur pourrait manquer de mémoire.
- Le mode d'accès dédié (anciennement mode d'accès utilisateur unique) est uniquement disponible pour les utilisateurs qui possèdent la connexion.
- Lakehouse Federation ne peut pas fédérer les tables externes avec des identificateurs sensibles à la casse pour les connexions Azure Synapse ou Redshift.
Quotas de ressources
Databricks applique des quotas de ressources à tous les objets sécurisables de Unity Catalog. Ces quotas sont listés dans les Limites de ressources. Les catalogues étrangers et tous les objets qu'ils contiennent sont inclus dans votre utilisation totale de quota.
Si vous vous attendez à dépasser ces limites de ressources, contactez l'équipe de votre compte Databricks.
Vous pouvez surveiller votre utilisation des quotas à l'aide des API de quotas de ressources Unity Catalog. Consultez Surveiller votre utilisation des quotas de ressources Unity Catalog.