View a markdown version of this page

Connexions Snowflake - AWS Glue

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Connexions Snowflake

Vous pouvez utiliser AWS Glue for Spark pour lire et écrire dans des tables dans Snowflake dans AWS Glue 4.0 et versions ultérieures. Vous pouvez lire depuis Snowflake à l'aide d'une requête SQL. Vous pouvez vous connecter à Snowflake en utilisant l'une des trois méthodes suivantes : authentification de base (à l'aide du nom d'utilisateur et du mot de passe), OAuth authentification ou authentification par paire de clés. Vous pouvez vous référer aux informations d'identification Snowflake stockées AWS Secrets Manager via les connexions AWS Glue Data. Les informations d'identification Snowflake pour AWS Glue for Spark sont stockées séparément des informations d'identification Snowflake du catalogue de données pour les robots d'exploration. Vous devez choisir un type de connexion SNOWFLAKE et non un type de connexion JDBC configuré pour se connecter à Snowflake.

Pour en savoir plus sur Snowflake, consultez le site web Snowflake. Pour plus d'informations sur Snowflake on AWS, consultez Snowflake Data Warehouse sur Amazon Web Services.

Configuration des connexions Snowflake

Il n'y a aucune AWS condition préalable pour se connecter aux bases de données Snowflake disponibles sur Internet.

Vous pouvez éventuellement effectuer la configuration suivante pour gérer vos informations de connexion avec AWS Glue.

Pour gérer vos informations de connexion avec AWS Glue
  1. Dans AWS Secrets Manager, créez un secret à l'aide de vos informations d'identification Snowflake. Pour créer un secret dans Secrets Manager, suivez le didacticiel disponible dans la section Créer un AWS Secrets Manager secret dans la AWS Secrets Manager documentation. Après avoir créé le secret, conservez le nom du secret secretName pour l'étape suivante.

    • Pour OAuth l'authentification :

      • Lorsque vous sélectionnez des paires clé/valeur, créez une paire pour snowflakeUser avec la clé sfUser

      • Lorsque vous sélectionnez des paires clé/valeur, créez une paire pour OAUTH_CLIENT_SECRET avec la clé USER_MANAGED_CLIENT_APPLICATION_CLIENT_SECRET

    • Pour l'authentification par paire de clés :

      • Lorsque vous sélectionnez des paires clé/valeur, créez une paire pour snowflakeUser avec la clé sfUser

      • Lorsque vous sélectionnez des paires clé/valeur, créez une paire pour private key avec la clé pem_private_key

    • Pour l'authentification de base :

      • Lorsque vous sélectionnez des paires clé/valeur, créez une paire pour snowflakeUser avec la clé USERNAME

      • Lorsque vous sélectionnez des paires clé/valeur, créez une paire pour snowflakePassword avec la clé PASSWORD

    • Lorsque vous sélectionnez des paires clé/valeur, vous pouvez fournir à votre entrepôt Snowflake la clé sfWarehouse.

    • Lorsque vous sélectionnez des paires clé/valeur, vous pouvez fournir des propriétés de connexion Snowflake supplémentaires en utilisant les noms de propriété Spark correspondants comme clés. Les propriétés prises en charge sont les suivantes :

      • sfDatabase : nom de la base de données Snowflake

      • sfSchema : nom du schéma Snowflake

      • sfRole : nom du rôle Snowflake

  2. Dans la console AWS Glue Studio, créez une connexion en choisissant Data Connections, puis Create connection. Suivez les étapes décrites dans l’assistant de connexion pour finaliser le processus :

    • Lorsque vous sélectionnez une source de données, sélectionnez Snowflake, puis Suivant.

    • Saisissez les détails de connexion tels que l’hôte et le port. Lorsque vous saisissez l’URL Snowflake hôte, indiquez l’URL de votre instance Snowflake. L’URL utilisera généralement un nom d’hôte sous la forme account_identifier.snowflakecomputing.com. Cependant, le format de l'URL peut varier en fonction du type de compte Snowflake (par exemple AWS, Azure ou hébergé par Snowflake).

    • Lorsque vous sélectionnez le rôle de service IAM, choisissez dans le menu déroulant. Il s'agit du rôle IAM de votre compte qui sera utilisé pour accéder à l'adresse IP AWS Secrets Manager et l'attribuer si un VPC est spécifié.

    • Lorsque vous sélectionnez un AWS secret, fournissezsecretName.

  3. À l’étape suivante de l’assistant, définissez les propriétés de votre connexion Snowflake.

  4. Dans la dernière étape de l’assistant, examinez vos paramètres, puis terminez le processus de création de votre connexion.

Pour Snowflake hébergé sur AWS un Amazon VPC, vous aurez peut-être besoin des éléments suivants :

  • Vous aurez besoin d'une configuration Amazon VPC appropriée pour Snowflake. Pour plus d'informations sur la configuration de votre Amazon VPC, consultez AWS PrivateLink et Snowflake dans la documentation Snowflake.

  • Vous aurez besoin d'une configuration Amazon VPC appropriée pour Glue AWS . Configuration de points de terminaison d’un VPC d’interface (AWS PrivateLink) pour AWS Glue (AWS PrivateLink).

  • Vous devrez créer une connexion AWS Glue Data Catalog qui fournit les informations de connexion Amazon VPC (en plus de l'identifiant d'un AWS Secrets Manager secret qui définit vos informations de sécurité Snowflake). Votre URL changera lors de l'utilisation AWS PrivateLink, comme décrit dans la documentation Snowflake dont le lien figure dans un article précédent.

  • Vous aurez besoin de la configuration de votre tâche pour inclure la connexion au catalogue de données en tant que connexion réseau supplémentaire.

Lecture à partir de tables Snowflake

Conditions préalables : une table Snowflake à partir de laquelle vous souhaitez lire. Vous aurez besoin du nom de la table Snowflake,. tableName Si aucun espace de noms par défaut n'est défini pour votre utilisateur Snowflake, vous aurez besoin du nom de la base de données Snowflake et du nom du schéma. databaseName schemaName De plus, si votre utilisateur Snowflake n'a pas défini d'entrepôt par défaut, vous aurez besoin d'un nom d'entrepôt. warehouseName Pour sélectionner la connexion réseau supplémentaire à laquelle se connecter, le connectionName paramètre sera utilisé.

snowflake_read = glueContext.create_dynamic_frame.from_options( connection_type="snowflake", connection_options={ "connectionName": "connectionName", "dbtable": "tableName", "sfDatabase": "databaseName", "sfSchema": "schemaName", "sfWarehouse": "warehouseName", } )

De plus, vous pouvez utiliser les paramètres autopushdown et query pour lire une partie d'une table Snowflake. Cela peut être nettement plus efficace que de filtrer vos résultats une fois qu'ils ont été chargés dans Spark. Prenons un exemple où toutes les ventes sont stockées dans la même table, mais où vous n'avez besoin d'analyser que les ventes d'un certain magasin pendant les jours fériés. Si ces informations sont stockées dans la table, vous pouvez utiliser le pushdown de prédicat pour récupérer les résultats comme suit :

snowflake_node = glueContext.create_dynamic_frame.from_options( connection_type="snowflake", connection_options={ "autopushdown": "on", "query": "select * from sales where store='1' and IsHoliday='TRUE'", "connectionName": "snowflake-glue-conn", "sfDatabase": "databaseName", "sfSchema": "schemaName", "sfWarehouse": "warehouseName", } )

Écrire sur les tables Snowflake

Conditions préalables : une base de données Snowflake sur laquelle vous souhaitez écrire. Vous aurez besoin d'un nom de table actuel ou souhaité,tableName. Si aucun espace de noms par défaut n'est défini pour votre utilisateur Snowflake, vous aurez besoin du nom de la base de données Snowflake et du nom du schéma. databaseName schemaName De plus, si votre utilisateur Snowflake n'a pas défini d'entrepôt par défaut, vous aurez besoin d'un nom d'entrepôt. warehouseName Pour sélectionner la connexion réseau supplémentaire à laquelle se connecter, le connectionName paramètre sera utilisé.

glueContext.write_dynamic_frame.from_options( connection_type="snowflake", connection_options={ "connectionName": "connectionName", "dbtable": "tableName", "sfDatabase": "databaseName", "sfSchema": "schemaName", "sfWarehouse": "warehouseName", }, )

Référence des options de connexion Snowflake

Le type de connexion Snowflake accepte les options de connexion suivantes :

Vous pouvez récupérer certains paramètres de cette section à partir d'une connexion AWS Glue (sfUrl,sfUser,sfPassword), auquel cas vous n'êtes pas obligé de les fournir. Pour ce faire, fournissez le paramètre connectionName.

Vous pouvez récupérer les paramètres de connexion à partir des AWS Secrets Manager secrets à l'aide du secretId paramètre. Lorsque vous utilisez Secrets Manager, les propriétés Spark suivantes peuvent être automatiquement récupérées si elles sont présentes dans le secret :

  • sfUser (à l’aide d’une clé USERNAME ou sfUser)

  • sfPassword(à l'aide d'PASSWORDune clé ousfPassword, lors de l'utilisation de l'authentification de base)

  • sfWarehouse (à l’aide d’une clé sfWarehouse)

  • sfDatabase (à l’aide d’une clé sfDatabase)

  • sfSchema (à l’aide d’une clé sfSchema)

  • sfRole (à l’aide d’une clé sfRole)

  • pem_private_key(en utilisant une clépem_private_key, lors de l'utilisation de l'authentification par paire de clés)

  • USER_MANAGED_CLIENT_APPLICATION_CLIENT_SECRET(lors de l'utilisation de OAuth l'authentification)

Ordre de priorité des propriétés : lorsque la même propriété est spécifiée à plusieurs emplacements, AWS Glue utilise l'ordre de priorité suivant (du plus haut au plus bas) :

  1. Options de connexion explicitement fournies dans votre code de tâche

  2. Propriétés de connexion à la colle

  3. AWS Secrets Manager valeurs secrètes (lorsqu'elles secretId sont spécifiées)

  4. Paramètres utilisateur par défaut de Snowflake

Les paramètres suivants sont généralement utilisés lors de la connexion à Snowflake.

  • sfDatabase : obligatoire si aucune valeur par défaut de l'utilisateur n'est définie dans Snowflake. Utilisé pour la lecture/l'écriture. La base de données à utiliser pour la session après la connexion.

  • sfSchema : obligatoire si aucune valeur par défaut de l'utilisateur n'est définie dans Snowflake. Utilisé pour la lecture/l'écriture. Le schéma à utiliser pour la session après la connexion.

  • sfWarehouse : obligatoire si aucune valeur par défaut de l'utilisateur n'est définie dans Snowflake. Utilisé pour la lecture/l'écriture. L'entrepôt virtuel par défaut à utiliser pour la session après la connexion.

  • sfRole : obligatoire si aucune valeur par défaut de l'utilisateur n'est définie dans Snowflake. Utilisé pour la lecture/l'écriture. Le rôle de sécurité par défaut à utiliser pour la session après la connexion.

  • sfUrl : (obligatoire) utilisé pour la lecture/l'écriture. Indique le nom d'hôte de votre compte au format suivant : account_identifier.snowflakecomputing.com. Pour plus d'informations sur les identifiants de compte, consultez Identifiants de compte dans la documentation de Snowflake.

  • sfUser : (obligatoire) utilisé pour la lecture/l'écriture. Nom de connexion de l'utilisateur Snowflake.

  • sfPassword— (Obligatoire lors de l'utilisation de l'authentification de base) Utilisé pour la lecture/écriture. Mot de passe de l'utilisateur Snowflake.

  • dbtable : obligatoire lorsque vous travaillez avec des tables complètes. Utilisé pour la lecture/l'écriture. Le nom de la table à lire ou de la table dans laquelle les données sont écrites. Lors de la lecture, toutes les colonnes et tous les enregistrements sont récupérés.

  • pem_private_key— (Obligatoire lors de l'utilisation de l'authentification par paire de clés) Utilisé pour la lecture/écriture. Chaîne de clé privée codée en b64 non chiffrée. Clé privée de l’utilisateur Snowflake. Il est courant de la copier à partir d’un fichier PEM. Pour plus d’informations, consultez Authentification par paire de clés et rotation des paires de clés dans la documentation Snowflake.

  • USER_MANAGED_CLIENT_APPLICATION_CLIENT_SECRET— (Obligatoire lors de l'utilisation de l' OAuth authentification) Utilisé à la fois pour les opérations de lecture et d'écriture. Cette valeur correspond au code OAUTH_CLIENT_SECRET, qui peut être obtenu à partir de l'intégration de sécurité Snowflake configurée pour activer l'authentification basée sur votre compte. OAuth Pour plus de détails, reportez-vous à la documentation de configuration de votre intégration OAuth de sécurité Snowflake - Configurer Snowflake OAuth pour des clients personnalisés.

  • query : obligatoire lors de la lecture avec une requête. Utilisé pour la lecture. La requête exacte (instruction SELECT) à exécuter

Les options suivantes sont utilisées pour configurer des comportements spécifiques lors du processus de connexion à Snowflake.

  • preactions : utilisé pour la lecture/l'écriture. Valeurs valides : liste d'instructions SQL séparées par des points-virgules sous forme de chaîne. Les instructions SQL sont exécutées avant le transfert des données entre AWS Glue et Snowflake. Si une instruction contient %s, %s est remplacé par le nom de table référencé pour l'opération.

  • postactions : utilisé pour la lecture/l'écriture. Les instructions SQL sont exécutées après le transfert des données entre AWS Glue et Snowflake. Si une instruction contient %s, %s est remplacé par le nom de table référencé pour l'opération.

  • autopushdown : "on" par défaut. Valeurs valides : "on", "off". Ce paramètre contrôle si le pushdown automatique des requêtes est activé. Lorsque l'option pushdown est activée, si une partie de la requête peut être « poussée vers le bas » sur le serveur Snowflake, elle est poussée vers le bas au moment de l'exécution de la requête sur Spark. Cela améliore les performances de certaines requêtes. Pour savoir si votre requête peut être poussée vers le bas, consultez Pushdown dans la documentation de Snowflake.

En outre, certaines des options disponibles sur le connecteur Snowflake Spark peuvent être prises en charge dans Glue AWS . Pour plus d'informations sur les options disponibles sur le connecteur Snowflake Spark, consultez la section Réglage des options de configuration du connecteur dans la documentation Snowflake.

Méthodes d’authentification Snowflake

AWS Glue prend en charge les méthodes d'authentification suivantes pour se connecter à Snowflake :

  • Authentification de base : fourniture sfUser et sfPassword paramètres.

  • Authentification par paire de clés : fourniture sfUser et paramètres. pem_private_key Lorsque vous utilisez l’authentification par paire de clés, le paramètre sfPassword n’est pas obligatoire.

  • OAuth authentification : le connecteur Snowflake prend en charge le type de subvention AUTHORIZATION_CODE pour demander l'accès à vos données Snowflake. Ce type de subvention est appelé « triple OAuth », car il implique de rediriger les utilisateurs vers un serveur d'autorisation tiers où ils peuvent s'authentifier et approuver l'accès. Cette méthode est utilisée lors de la création d'une connexion via la console AWS Glue.

    • Prérequis : pour utiliser cette méthode d'authentification, assurez-vous que la configuration suivante est terminée :

      • Configurez Snowflake OAuth pour un client personnalisé en suivant la documentation officielle de Snowflake : Configurer OAuth Snowflake pour les clients personnalisés.

      • Définissez l'URI de redirection correcte lors de la création de l'intégration de sécurité Snowflake. Par exemple : si vous créez la connexion dans la région DUB (eu-west-1), votre URI de redirection doit être : https://eu-west-1.console.aws.amazon.com/gluestudio/oauth

      • Après avoir créé l'intégration de sécurité, conservez les informations suivantes à utiliser lors de la création de la connexion Glue :

        • OAUTH_CLIENT_ID : Cette valeur doit être fournie en tant qu'ID client de l'application client gérée par l'utilisateur sur la page de création de la connexion Glue.

        • OAUTH_CLIENT_SECRET : Cette valeur doit être stockée dans le secret utilisé pour la connexion, sous la clé AWS USER_MANAGED_CLIENT_APPLICATION_CLIENT_SECRET.

    • OAuth Champs d'application — (Facultatif) Définit les autorisations ou niveaux d'accès spécifiques demandés au compte Snowflake. Par exemple, un champ d'application peut limiter l'accès à une ressource ou à une opération particulière.

      • Cette valeur peut être spécifiée au format suivant : session:role:Snowflake_Role_Name

      • Exemple : session:role:ANALYST_ROLE

    • URL du code d'autorisation — (obligatoire) Le point de terminaison sur lequel l'utilisateur est redirigé pour se connecter et accorder l'autorisation.

      • Exemple : https://host/oauth/authorize

    • URL du jeton d'autorisation — (obligatoire) Le point de terminaison utilisé pour échanger le code d'autorisation contre un jeton d'accès.

      • Exemple : https://host/oauth/token-request

    • ID client de l'application client gérée par l'utilisateur — (obligatoire) L'identifiant unique de votre application OAuth client enregistrée dans Snowflake

    • AWS Secret — (obligatoire) Fait référence à un secret du Gestionnaire de AWS Secrets contenant les paires clé-valeur suivantes :

      • SFuser - Le nom d'utilisateur Snowflake

      • USER_MANAGED_CLIENT_APPLICATION_CLIENT_SECRET - Le secret client associé à l'application cliente OAuth

Les trois méthodes d'authentification sont entièrement prises en charge et peuvent être configurées à l'aide de n'importe quelle combinaison d'options de connexion, de connexions Glue ou de AWS Secrets Manager secrets.

Limites du connecteur Snowflake

La connexion à Snowflake avec AWS Glue for Spark est soumise aux restrictions suivantes.

  • Ce connecteur ne prend pas en charge les signets de tâches. Pour plus d’informations sur les signets de tâche, consultez Suivi des données traitées à l'aide de signets de tâche.

  • Ce connecteur ne prend pas en charge les lectures et écritures Snowflake via les tables du catalogue de données AWS Glue à l'aide des méthodes create_dynamic_frame.from_catalog etwrite_dynamic_frame.from_catalog.

  • Ce connecteur prend en charge l'authentification de base, l'authentification par paire de clés et OAuth l'authentification. Les autres méthodes d'authentification (telles que SAML) ne sont actuellement pas prises en charge.

  • Ce connecteur n'est pas pris en charge dans les tâches de streaming.

  • Ce connecteur prend en charge les requêtes basées sur des instructions SELECT lors de la récupération d'informations (par exemple avec le paramètre query). Les autres types de requêtes (telles que SHOW, DESC ou les instructions DML) ne sont pas pris en charge.

  • Snowflake limite la taille du texte de la requête (c'est-à-dire les instructions SQL) soumis par les clients Snowflake à 1 Mo par instruction. Pour plus d'informations, consultez Limites de la taille du texte de requête.