Exécuter des queries fédérées sur Snowflake (clé privée PEM)
Cette page décrit comment configurer Lakehouse Federation pour exécuter des requêtes fédérées sur des données Snowflake qui ne sont pas gérées par Databricks. Pour en savoir plus sur Lakehouse Federation, consultez Connecter aux bases de données et catalogues externes
Pour vous connecter à votre base de données Snowflake à l'aide de Lakehouse Federation, vous devez créer les éléments suivants dans votre métastore Databricks Unity Catalog (les workspaces créés après le 8 novembre 2023 disposent déjà d'un métastore Unity Catalog provisionné automatiquement) :
- 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 query et les outils de gouvernance des données de Unity Catalog pour gérer l’accès des utilisateurs Databricks à la base de données.
Cette page décrit comment exécuter des query fédérées sur des données Snowflake à l’aide d’une clé privée PEM. Pour les autres méthodes d'authentification, consultez les pages suivantes :
- OAuth intégré Snowflake
- OAuth avec Microsoft Entra ID
- OAuth avec Okta
- Jeton d'accès OAuth
- Authentification de base (nom d’utilisateur/mot de passe)
Vous pouvez exécuter des requêtes fédérées sur Snowflake en utilisant la fédération de requêtes ou la fédération de catalogues.
Dans la fédération de query, JDBC transmet la query du Unity Catalog à la base de données externe. Ceci est idéal pour le reporting à la demande ou les travaux de preuve de concept sur vos pipelines ETL.
Dans la fédération de catalogue, le query Unity Catalog s'exécute directement sur le stockage de fichiers. Cette approche est utile pour la migration incrémentielle sans adaptation de code ou comme modèle hybride à plus long terme pour les organisations qui doivent maintenir certaines données dans Snowflake parallèlement à leurs données enregistrées dans Unity Catalog. Consultez Activer la fédération de catalogue Snowflake.
Avant de commencer
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.
-
Sur la page **Principes de base de la connexion** de l’assistant **Configurer la connexion**, saisissez un **Nom de connexion** convivial.
-
Sélectionnez un type de connexion Snowflake.
-
Pour le Type d’authentification , sélectionnez
PEM Private Keydans le menu déroulant. -
Ajouter un commentaire (facultatif).
-
Cliquez sur Suivant .
-
Saisissez les détails d'authentification et de connexion suivants pour votre warehouse Snowflake.
- Hôte : Par exemple,
snowflake-demo.east-us-2.azure.snowflakecomputing.com - Port : par exemple,
443 - Utilisateur : Par exemple,
snowflake-user - Clé privée PEM : la clé privée non chiffrée de votre paire de clés RSA, au format PEM. Supprimez les lignes d'en-tête et de pied de page ainsi que tous les sauts de ligne, puis saisissez la clé sous la forme d'une chaîne continue unique.
- (Facultatif) Expire en secondes : le délai d'expiration (en secondes) pour la connexion établie avec une clé privée. S'il n'est pas spécifié, default est aucune expiration.
- Hôte : Par exemple,
-
Cliquez sur Suivant .
-
Sur la page Détails de la connexion , spécifiez les éléments suivants :
- Snowflake warehouse : Par exemple,
my-snowflake-warehouse - (Facultatif) Hôte proxy : Hôte du proxy utilisé pour se connecter à Snowflake. Vous devez également sélectionner Utiliser un proxy et spécifier le Port du proxy .
- (Facultatif) Utiliser un proxy : pour vous connecter à Snowflake à l'aide d'un serveur proxy.
- (Facultatif) Port du proxy : Port du proxy utilisé pour se connecter à Snowflake. Vous devez également sélectionner **Utiliser un proxy** et spécifier **Hôte proxy**.
- (Facultatif) Rôle Snowflake : Le rôle de sécurité par default à utiliser pour la session après la connexion.
- Snowflake warehouse : Par exemple,
-
Cliquez sur Suivant .
-
Sur la page **Bases du catalogue**, veuillez saisir un nom pour le catalogue étranger. 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 de cette base de données à l'aide de Databricks et de Unity Catalog.
-
(Facultatif) Cliquez sur **Tester la connexion** pour confirmer que cela fonctionne.
-
Cliquez sur **Créer un catalogue**.
-
Sur la page Accès , 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 typing a principal in the text field, and then click the principal in the returned results.
-
Accordez les **Privilèges** sur le catalogue. Cliquez sur Accorder :
-
Spécifiez les **principals** qui auront accès aux objets dans le catalogue. start typing a principal in the text field, and then click the principal in the returned results.
-
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 requêtes Databricks SQL.
CREATE CONNECTION <connection-name> TYPE snowflake
OPTIONS (
host '<hostname>',
port '<port>',
sfWarehouse '<warehouse-name>',
user '<user>',
pem_private_key '<pem-private-key>',
expires_in_secs '<expiration-time-in-seconds>'
);
Databricks recommande d’utiliser des secrets au lieu de chaînes en texte brut pour les valeurs sensibles telles que les identifiants. Par exemple :
CREATE CONNECTION <connection-name> TYPE snowflake
OPTIONS (
host '<hostname>',
port '<port>',
sfWarehouse '<warehouse-name>',
user secret ('<secret-scope>','<secret-key-user>'),
pem_private_key secret ('<secret-scope>','<secret-key-pem-private-key>'),
expires_in_secs '<expiration-time-in-seconds>'
)
Pour en savoir plus sur la configuration des secrets, consultez la gestion des secrets.
Options de connexion avancées
Les connexions Snowflake prennent en charge l'option avancée suivante pour les environnements à sortie restreinte ou de connectivité privée :
disableOCSPChecksDéfinissez surtruepour désactiver les vérifications de révocation de certificat OCSP (Online Certificate Status Protocol) dans le driver JDBC Snowflake. La désactivation des vérifications OCSP ignore la vérification de la révocation des certificats.
Autorisez le trafic sortant vers le répondeur OCSP de Snowflake chaque fois que possible. Laissez disableOCSPChecks non défini ou définissez-le à false. Définissez-le sur true uniquement si votre configuration de connectivité privée ou à egress restreint ne peut pas autoriser ce trafic.
Cette option n'est pas affichée dans l'Explorateur de catalogues. Vous pouvez le définir lorsque vous créez la connexion avec SQL :
CREATE CONNECTION <connection-name> TYPE snowflake
OPTIONS (
<connection-options>,
disableOCSPChecks 'true'
);
Pour une connexion existante, utilisez ALTER CONNECTION.
Formatez la clé privée PEM
Vous devez fournir la clé privée PEM non chiffrée sous la forme d'une seule chaîne continue :
- Supprimez les première et dernière lignes du fichier clé, y compris les lignes délimitant
BEGIN PRIVATE KEYetEND PRIVATE KEY. Chaque ligne est encadrée de cinq tirets de chaque côté. - Supprimez tous les sauts de ligne afin que la valeur de la clé entière se trouve sur une seule ligne.
Cela s'applique à la fois au champ **clé privée PEM** de l'Explorateur de catalogue et à pem_private_key l'option SQL. Pour générer une clé non chiffrée, consultez les Limitations.
Identifiants de base de données sensibles à la casse
Le champ database du catalogue étranger correspond à un identifiant de base de données Snowflake. Si l'identifiant de la base de données Snowflake n'est pas sensible à la casse, la casse que vous utilisez dans le catalogue étranger <database-name> est conservée. Toutefois, si l'identifiant de la base de données Snowflake est sensible à la casse, vous devez envelopper le catalogue étranger <database-name> entre guillemets pour préserver la casse.
Par exemple :
-
databaseest converti enDATABASE -
"database"est converti endatabase -
"database"""est converti endatabase"Pour échapper un guillemet double, utilisez un autre guillemet double.
-
"database""entraîne une erreur car le guillemet double n'est pas correctement échappé.
Pour plus d'informations, consultez Exigences en matière d'identifiants dans la documentation Snowflake.
Pushdowns pris en charge
Les pushdowns suivants sont pris en charge :
- Filtres
- Projections
- Limite
- Décalage
- Jointures
- Agrégats (Average, Corr, CovPopulation, CovSample, Count, Max, Min, StddevPop, StddevSamp, Sum, VariancePop, VarianceSamp)
- Fonctions (fonctions de chaîne, fonctions mathématiques, fonctions de date, d'heure et de Timestamp, et autres fonctions diverses, telles que Alias, Cast, SortOrder)
- Fonctions de fenêtre (DenseRank, Rank, RowNumber)
- Tri
- Top-N (combinant le tri et la limite en une seule opération), pris en charge dans Databricks Runtime 17.3 et versions supérieures.
Mappages des types de données
Lorsque vous lisez depuis Snowflake vers Spark, les types de données sont mappés comme suit :
Type Snowflake | Type Spark |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Limitations
-
Le driver JDBC Snowflake ne prend pas en charge l'authentification avec des clés privées chiffrées. Pour éviter les erreurs, générez une clé avec l'option
-nocryptajoutée, comme suit :Bashopenssl genrsa 2048 | openssl pkcs8 -topk8 -inform PEM -out rsa_key.p8 -nocrypt
Ressources supplémentaires
- Snowflake : authentification par paire de clés et rotation des paires de clés dans la documentation Snowflake