Partage via


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

Cet article explique comment configurer Lakehouse Federation pour exécuter des requêtes fédérées sur des données Snowflake 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 à votre base de données Snowflake à l’aide de Lakehouse Federation, vous devez créer les éléments suivants dans votre metastore Azure Databricks Unity Catalog :

  • Une connexion à votre base de données Snowflake.
  • Un catalogue étranger qui reflète votre base de données Snowflake 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 une version ultérieure) et le mode d’accès partagé ou mono-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.

  • Si vous envisagez de vous authentifier en utilisant OAuth, créez une intégration de sécurité dans la console Snowflake. Pour plus d’informations, consultez la section suivante.

(Facultatif) Créer une intégration de sécurité dans la console Snowflake

Si vous souhaitez vous authentifier en utilisant OAuth, suivez cette étape avant de créer une connexion Snowflake. Pour vous authentifier à l’aide d’un nom d’utilisateur et d’un mot de passe, ignorez cette section.

Remarque

Seule l’intégration OAuth native de Snowflake est prise en charge. Les intégrations OAuth externes comme Okta ou Microsoft Entra ID ne sont pas prises en charge.

Dans la console Snowflake, exécutez CREATE SECURITY INTEGRATION. Remplacez les valeurs suivantes :

  • <integration-name> : un nom unique pour votre intégration OAuth.

  • <workspace-url>: une URL pour l’espace de travail Azure Databricks. Vous devez définir OAUTH_REDIRECT_URI sur https://<workspace-url>/login/oauth/snowflake.html, où <workspace-url> est l’URL unique de l’espace de travail Azure Databricks où vous allez créer la connexion Snowflake.

  • <duration-in-seconds> : une durée pour les jetons d'actualisation.

    Important

    OAUTH_REFRESH_TOKEN_VALIDITY est un champ personnalisé défini sur 90 jours par défaut. Une fois le jeton d’actualisation expiré, vous devez authentifier la connexion à nouveau. Définissez le champ sur une durée raisonnable.

CREATE SECURITY INTEGRATION <integration-name>
TYPE = oauth
ENABLED = true
OAUTH_CLIENT = custom
OAUTH_CLIENT_TYPE = 'CONFIDENTIAL'
OAUTH_REDIRECT_URI = 'https://<workspace-url>/login/oauth/snowflake.html'
OAUTH_ISSUE_REFRESH_TOKENS = TRUE
OAUTH_REFRESH_TOKEN_VALIDITY = <duration-in-seconds>
OAUTH_ENFORCE_PKCE = TRUE;

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.

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 le type de connexionSnowflake.

  5. Entrez les propriétés de connexion suivantes pour votre entrepôt Snowflake.

    • Type d’authentification : OAuth ou Username and password
    • Hôte : par exemple, snowflake-demo.east-us-2.azure.snowflakecomputing.com
    • Port : par exemple, 443
    • Entrepôt Snowflake : par exemple, my-snowflake-warehouse
    • Utilisateur : par exemple, snowflake-user
    • (OAuth) ID client : dans la console Snowflake, exécutez SELECT SYSTEM$SHOW_OAUTH_CLIENT_SECRETS('<security_integration_name>') pour récupérer l’ID client pour votre intégration de sécurité.
    • (OAuth) : clé secrète client : dans la console Snowflake, exécutez SELECT SYSTEM$SHOW_OAUTH_CLIENT_SECRETS('<security_integration_name>') pour récupérer la clé secrète client pour votre intégration de sécurité.
    • (OAuth) Étendue client : refresh_token session:role:<role-name>. Spécifiez le rôle Snowflake à utiliser dans <role-name>.
    • (Nom d’utilisateur et mot de passe) Mot de passe : par exemple, password123

    (OAuth) Vous êtes invité à vous connecter à Snowflake à l’aide de vos informations d’identification OAuth.

  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 snowflake
OPTIONS (
  host '<hostname>',
  port '<port>',
  sfWarehouse '<warehouse-name>',
  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 snowflake
OPTIONS (
  host '<hostname>',
  port '<port>',
  sfWarehouse '<warehouse-name>',
  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.

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>');

Identificateurs sensibles à la casse de la base de données

Le champ database du catalogue étranger est mappé à un identificateur de la base de données Snowflake. Si l’identificateur de la base de données Snowflake n’est pas sensible à la casse, la casse utilisée dans le catalogue étranger <database-name> est conservée. Toutefois, si l’identificateur de la base de données Snowflake respecte la casse, vous devez encapsuler le catalogue étranger <database-name> entre guillemets doubles pour conserver la casse.

Par exemple :

  • database est converti en DATABASE

  • "database" est converti en database

  • "database""" est converti en database"

    Pour échapper à un guillemet double, utilisez un autre guillemet double.

  • "database"" entraîne une erreur, car le guillemet double n’est pas correctement placé.

Pour plus d’informations, consultez les Spécifications de l’identificateur dans la documentation Snowflake.

Pushdowns pris en charge

Les pushdowns suivants sont pris en charge :

  • Filtres
  • Projections
  • Limite
  • Jointures
  • Agrégats (Average, Corr, CovPopulation, CovSample, Count, Max, Min, StddevPop, StddevSamp, Sum, VariancePop, VarianceSamp)
  • Fonctions (fonctions de chaîne, fonctions mathématiques, données, fonctions Time et Timestamp, et autres fonctions diverses, telles que Alias, Cast, SortOrder)
  • Fonctions Windows (DenseRank, Rank, RowNumber)
  • Tri

Mappages de types de données

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

Type Snowflake Type Spark
decimal, number, numeric DecimalType
bigint, byteint, int, integer, smallint, tinyint IntegerType
float, float4, float8 FloatType
double, double precision, real DoubleType
char, character, string, text, time, varchar StringType
binary BinaryType
boolean BooleanType
Date DateType
datetime, timestamp, timestamp_ltz, timestamp_ntz, timestamp_tz TimestampType

Limitations d’OAuth

Les limitations de prise en charge OAuth sont les suivantes :

  • Le point de terminaison OAuth Snowflake doit être accessible à partir des adresses IP du plan de contrôle Databricks. Consultez sortant à partir du plan de contrôle Azure Databricks. Snowflake prend en charge la configuration des stratégies réseau au niveau de l’intégration de la sécurité, ce qui permet une stratégie réseau distincte, offrant une connectivité directe du plan de contrôle Databricks au point de terminaison OAuth pour autorisation.
  • Les options utiliser le proxy, hôte proxy, port du proxy et la configuration des rôles Snowflake ne sont pas prises en charge. Spécifiez le rôle Snowflake dans le cadre de l’étendue OAuth.

Ressources supplémentaires