Partager via


Exécuter des requêtes fédérées sur PostgreSQL

Cette page explique comment configurer Lakehouse Federation pour exécuter des requêtes fédérées sur des données PostgreSQL qui ne sont pas gérées par Azure Databricks. Pour en savoir plus sur lakehouse Federation, consultez Qu’est-ce que la Fédération Lakehouse ?

Pour vous connecter à votre base de données Exécuter des requêtes sur PostgreSQL avec Lakehouse Federation, vous devez créer les éléments suivants dans votre metastore Azure Databricks Unity Catalog :

  • Une connexion à votre base de données Exécuter des requêtes sur PostgreSQL.
  • Un catalogue étranger qui met en miroir votre base de données Exécuter des requêtes sur PostgreSQL dans Unity Catalog pour que vous puissiez utiliser la syntaxe de requête et les outils de gouvernance des données Unity Catalog, afin de gérer l’accès utilisateur Azure Databricks à la base de données.

Avant de commencer

Conditions requises pour l’espace de travail :

  • Espace de travail activé pour Unity Catalog.

Voici les exigences de calcul à respecter :

  • Connectivité réseau de votre ressource de calcul aux systèmes de base de données cibles. Consultez Recommandations de mise en réseau de la Fédération Lakehouse.
  • Le calcul Azure Databricks doit utiliser Databricks Runtime 13.3 LTS ou ultérieur et le mode d’accès Standard ou Dédié .
  • Les entrepôts SQL 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 un administrateur de metastore ou un utilisateur disposant du privilège CREATE CONNECTION sur le metastore Unity Catalog lié à l’espace de travail.
  • Pour créer un catalogue étranger, vous devez disposer de l’autorisation CREATE CATALOG sur le metastore et être le propriétaire de la connexion ou disposer du privilège CREATE FOREIGN CATALOG sur cette connexion.

D'autres exigences en matière d’autorisation sont spécifiées dans les sections basées sur les tâches ci-dessous.

Créer une connexion

Une connexion indique un chemin d’accès et des informations d’identification pour accéder à un système de base de données externe. Pour créer une connexion, vous pouvez utiliser l’Explorateur de catalogues ou la commande SQL CREATE CONNECTION dans un notebook Azure Databricks, ou bien dans l’éditeur de requête SQL Databricks.

Note

Vous pouvez aussi utiliser l’API REST Databricks ou l’interface CLI Databricks pour créer une connexion. Consultez POST /api/2.1/unity-catalog/connections et Commandes Unity Catalog.

Autorisations requises : administrateur du metastore ou utilisateur disposant du privilège CREATE CONNECTION.

Explorateur de catalogues

  1. Dans votre espace de travail Azure Databricks, cliquez sur l’icône Données.Catalogue.

  2. En haut du volet Catalogue, cliquez sur l’icône Icône Ajouter ou PlusAjouter, puis, dans le menu, sélectionnez Ajouter une connexion.

    Vous pouvez également vous rendre sur la page Accès rapide, cliquer sur le bouton Données externes >, accéder à l’onglet Connexions, puis cliquer sur Créer une connexion.

  3. Dans la page Notions de base de la connexion de l’assistant Configurer la connexion, entrez un Nom de connexion convivial.

  4. Dans Type de connexion, sélectionnez PostgreSQL.

  5. (Facultatif) Ajoutez un commentaire.

  6. Cliquez sur Suivant.

  7. Dans la page Authentification, entrez les propriétés de connexion suivantes pour votre instance PostgreSQL.

    • Hôte : par exemple, postgres-demo.lb123.us-west-2.rds.amazonaws.com
    • Port : par exemple, 5432
    • Utilisateur : par exemple, postgres_user
    • Mot de passe : par exemple, password123
  8. Cliquez sur Créer une connexion.

  9. Sur la pageConcepts de base du catalogue, saisissez un nom pour le catalogue étranger. Un catalogue étranger constitue un miroir d'une base de données dans un système de données externe. Cela vous permet d'interroger et de gérer l’accès aux données de cette base de données à l’aide d’Azure Databricks et d'Unity Catalog.

  10. (Facultatif) Cliquez sur Tester la connexion pour vérifier qu’elle fonctionne.

  11. Cliquez sur Créer un catalogue.

  12. Dans la page Access, sélectionnez les espaces de travail dans lesquels les utilisateurs peuvent accéder au catalogue que vous avez créé. Vous pouvez sélectionner Tous les espaces de travail ont accès, ou cliquer sur Affecter aux espaces de travail, sélectionner les espaces de travail, puis cliquer sur Attribuer.

  13. Changez le propriétaire qui pourra gérer l'accès à tous les objets du catalogue. Commencez à taper un principal dans la zone de texte, puis cliquez sur le principal dans les résultats affichés.

  14. Accordez des privilèges sur le catalogue. Cliquez sur Octroyer :

    1. Spécifiez les Principaux qui auront accès aux objets du catalogue. Commencez à taper un principal dans la zone de texte, puis cliquez sur le principal dans les résultats affichés.
    2. Sélectionnez les Préréglages de privilège à accorder pour chaque principal. Tous les utilisateurs d'un compte reçoivent BROWSE par défaut.
      • Sélectionnez Lecteur de données dans le menu déroulant pour accorder des privilèges read aux les objets du catalogue.
      • Sélectionnez Éditeur de données dans le menu déroulant pour accorder read et modify privilèges sur les objets du catalogue.
      • Sélectionnez manuellement les privilèges à accorder.
    3. Cliquez sur Accorder.
  15. Cliquez sur Suivant.

  16. Sur la page Métadonnées, indiquez des paires clé-valeur pour les balises. Pour plus d’informations, consultez Appliquer des étiquettes aux objets sécurisables du catalogue Unity.

  17. (Facultatif) Ajoutez un commentaire.

  18. Cliquez sur Enregistrer.

SQL

Exécutez la commande suivante dans un notebook ou dans l’éditeur de requête SQL Databricks.

CREATE CONNECTION <connection-name> TYPE postgresql
OPTIONS (
  host '<hostname>',
  port '<port>',
  user '<user>',
  password '<password>'
);

Nous vous recommandons d’utiliser des secrets Azure Databricks au lieu de chaînes de texte en clair pour les données sensibles comme les informations d’identification. 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 plus d’informations sur la définition de secrets, consultez Gestion des secrets.

Créer un catalogue étranger

Note

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 constitue un miroir d'une base de données dans un système de données externe. Cela vous permet d'interroger et de gérer l’accès aux données de cette base de données à l’aide d’Azure Databricks et d'Unity Catalog. Pour créer un catalogue étranger, vous devez utiliser une connexion à la source de données qui a déjà été définie.

Pour créer un catalogue étranger, vous pouvez utiliser Catalog Explorer ou la commande SQL CREATE FOREIGN CATALOG dans un notebook Azure Databricks ou dans l’éditeur de requête SQL. Vous pouvez aussi utiliser l’API REST Databricks ou l’interface CLI Databricks pour créer un catalogue. Consultez POST /api/2.1/unity-catalog/catalogs et Commandes Unity Catalog.

Autorisations requises :CREATE CATALOG autorisation sur le meta store et propriété de la connexion, ou bien privilège CREATE FOREIGN CATALOG sur la connexion.

Explorateur de catalogues

  1. Dans votre espace de travail Azure Databricks, cliquez sur l’icône Données.Catalogue pour ouvrir l’Explorateur de catalogues.

  2. En haut du volet Catalogue, cliquez sur l’icône Icône Ajouter ou PlusAjouter, puis, dans le menu, sélectionnez Ajouter un catalogue.

    Vous pouvez également accéder à Accès rapide. Cliquez ensuite sur le bouton Catalogues, puis sur Créer un catalogue.

  3. Suivez les instructions pour créer des catalogues étrangers dans Créer des catalogues.

SQL

Exécutez la commande SQL suivante dans un notebook ou dans l’éditeur de requêtes SQL. Les éléments entre crochets sont optionnels. Remplacez les valeurs d’espace réservé :

  • <catalog-name> : nom du catalogue dans Azure Databricks.
  • <connection-name> : L'objet Connection qui indique la source de données, le chemin et les informations d’identification d’accès.
  • <database-name> : nom de la base de données que vous souhaitez refléter en tant que catalogue dans Azure Databricks.
CREATE FOREIGN CATALOG [IF NOT EXISTS] <catalog-name> USING CONNECTION <connection-name>
OPTIONS (database '<database-name>');

Pushdowns pris en charge

Les pushdowns suivants sont pris en charge sur tous les calculs :

  • Filters
  • Projections
  • Limit
  • Fonctions : partielles, uniquement pour les expressions de filtre. (Fonctions de chaîne, fonctions mathématiques et autres fonctions diverses, comme Alias, Cast, SortOrder)

Les pushdowns suivants sont pris en charge sur Databricks Runtime version 13.3 LTS ou ultérieure, et sur les entrepôts SQL :

  • Les fonctions d’agrégation suivantes : MIN, MAX, COUNT, SUM, AVG, VAR_POP, VAR_SAMP, STDDEV_POP, STDDEV_SAMP, GREATEST, LEAST, COVAR_POP, COVAR_SAMP, CORR, REGR_INTERCEPT, REGR_R2, REGR_SLOPE, REGR_SXY
  • Les opérateurs booléens suivants : =, <, <=, >, >=, <=>
  • Les fonctions mathématiques suivantes (non prises en charge si ANSI est désactivée) : +, -, *, %, /
  • Opérateurs divers | et ~
  • Tri, lorsque l’utilisation est limitée

Les pushdowns suivants ne sont pas prises en charge :

  • Joins
  • Fonctions Windows

Mappages de types de données

Lorsque vous lisez de PostgreSQL vers Spark, les types de données sont mappés comme suit :

Type PostgreSQL Type Spark
numeric DecimalType
int2 ShortType
int4 (si non signé) IntegerType
int8, oid, xid, int4 (si signé) LongType
float4 FloatType
double précision, float8 DoubleType
char CharType
name, varchar, tid VarcharType
bpchar, caractère variable, json, argent, point, super, texte StringType
bytea, geometry, varbyte BinaryType
bit, bool BooleanType
date DateType
tabstime, time, time avec fuseau horaire, timetz, time sans fuseau horaire, timestamp avec fuseau horaire, timestamp, timestamptz, timestamp sans fuseau horaire* TimestampType/TimestampNTZType
Type de tableau Postgresql** ArrayType

* Lorsque vous lisez à partir de Postgresql, le type Postgresql Timestamp est mappé au type Spark TimestampType si preferTimestampNTZ = false (valeur par défaut). Postgresql Timestamp est mappé à TimestampNTZType si preferTimestampNTZ = true.

**Les types de tableaux limités sont pris en charge.