Partager via


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

Cet article explique comment configurer Lakehouse Federation pour exécuter des requêtes fédérées sur des données Exécuter des requêtes sur PostgreSQL non gérées par Azure Databricks. Pour en savoir plus sur Lakehouse Federation, consultez l’article Qu’est-ce que Lakehouse Federation ?.

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

  • Une connexion à votre base de données Exécuter des requêtes sur PostgreSQL.
  • Un catalogue étranger qui reflète votre base de données Exécuter des requêtes sur PostgreSQL dans Unity Catalog afin que vous puissiez utiliser la syntaxe de requête et les outils de gouvernance des données Unity Catalog pour 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 cluster Databricks Runtime ou de votre entrepôt SQL aux systèmes de base de données cibles. Consultez l’article Recommandations de mise en réseau pour Lakehouse Federation.
  • Les clusters Azure Databricks doivent utiliser databricks Runtime 13.3 LTS ou version ultérieure et le mode d’accès partagé ou unique utilisateur.
  • 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 attaché à 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 la connexion.

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 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 l’éditeur de requête SQL Databricks.

Remarque

Vous pouvez également 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 de metastore ou utilisateur disposant du privilège CREATE CONNECTION.

Explorateur de catalogues

  1. Dans votre espace de travail Azure Databricks, cliquez sur icône Catalogue Catalogue.

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

    Sinon, dans la page Accès rapide, cliquez sur le bouton Données externes >, accédez à l’onglet Connexions, puis cliquez sur Créer une connexion.

  3. Entrez un nom de connexion convivial.

  4. Sélectionnez un type de connexionPostgreSQL.

  5. 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
  6. (Facultatif) Cliquez sur Tester la connexion pour vérifier qu’elle fonctionne.

  7. (Facultatif) Ajoutez un commentaire.

  8. Cliquez sur Créer.

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 valeurs sensibles telles que 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 obtenir des informations sur la configuration des secrets, consultez l’article Gestion des secrets.

Créer un catalogue étranger

Un catalogue étranger reflète une base de données dans un système de données externe afin que vous puissiez interroger et gérer l’accès aux données de cette base de données à l’aide d’Azure Databricks et 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 é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.

Remarque

Vous pouvez également utiliser l’API REST Databricks ou l’interface CLI Databricks pour créer un catalogue. Consultez POST /api/2.1/unity-catalog/catalogs et les commandes du catalogue Unity.

Autorisations requises : autorisation CREATE CATALOG sur le metastore, et être propriétaire de la connexion ou disposer du privilège CREATE FOREIGN CATALOG sur la connexion.

Explorateur de catalogues

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

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

    Sinon, dans la page Accès rapide, cliquez sur le bouton Catalogues, puis sur le bouton 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ête SQL. Les éléments entre chevrons sont optionnels. Remplacez les valeurs d’espace réservé :

  • <catalog-name> : nom du catalogue dans Azure Databricks.
  • <connection-name> : objet Connection qui spécifie 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 :

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

Les pushdowns suivants sont pris en charge sur Databricks Runtime 13.3 LTS et plus, 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 pris en charge :

  • Jointures
  • 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, character varying, json, money, point, super, text StringType
bytea, geometry, varbyte BinaryType
bit, bool BooleanType
Date DateType
tabstime, time, time with time zone, timetz, time without time zone, timestamp with time zone, timestamp, timestamptz, timestamp without time zone* TimestampType/TimestampNTZType
Type de tableau Postgresql** ArrayType

*Lorsque vous lisez à partir de Postgresql, Postgresql Timestamp est mappé à 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.