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 pour Spark pour lire et écrire dans des tables dans Snowflake dans la version 4.0 et ultérieure d'AWS Glue. Vous pouvez lire depuis Snowflake à l'aide d'une requête SQL. Vous pouvez vous connecter à Snowflake à l'aide d'un nom d'utilisateur et d'un mot de passe. Vous pouvez vous référer aux informations d'identification Snowflake stockées dans AWS Secrets Manager via le catalogue de données AWS Glue. Les informations d'identification Snowflake du catalogue de données pour AWS Glue pour Spark sont stockées séparément des informations d'identification du catalogue de données Snowflake pour les Crawlers. 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 à propos de Snowflake sur AWS, consultez Snowflake Data Warehouse on Amazon Web Services.

Configuration des connexions Snowflake

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

Vous pouvez également effectuer la configuration suivante pour gérer vos informations d'identification de connexion avec AWS Glue.

Pour gérer vos informations d'identification de connexion avec AWS Glue
  1. Dans Snowflake, générez un utilisateur, snowflakeUser et un mot de passe, snowflakePassword.

  2. 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 secret AWS Secrets Manager dans la documentation AWS Secrets Manager. Après avoir créé le secret, conservez le nom du secret, secretName, pour l'étape suivante.

    • 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 snowflakePassword avec la clé sfPassword.

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

  3. Dans le catalogue de données AWS Glue, créez une connexion en suivant les étapes décrites dans Ajouter une AWS Glue connexion. Après avoir créé la connexion, conservez le nom de la connexion, connectionName, pour l'étape suivante.

    • Lorsque vous sélectionnez un type de connexion, sélectionnez Snowflake.

    • Lorsque vous sélectionnez URL Snowflake, indiquez l'URL de votre instance Snowflake. L'URL utilisera un nom d'hôte sous la forme account_identifier.snowflakecomputing.com.

    • Lorsque vous sélectionnez un Secret AWS, fournissez secretName.

  4. Dans la configuration de votre tâche AWS Glue, indiquez connectionName en tant que connexion réseau supplémentaire.

Dans les situations suivantes, vous pouvez avoir besoin des éléments suivants :

  • Pour Snowflake hébergé sur AWS dans un Amazon VPC

    • 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 AWS Glue. Configuration des VPC points de terminaison d'interface (AWS PrivateLink) pour AWS Glue (AWS PrivateLink).

    • Vous devrez créer une connexion au catalogue de données AWS Glue qui fournit les informations de connexion Amazon VPC (en plus de l'identifiant d'un secret AWS Secrets Manager qui définit vos informations d'identification de sécurité Snowflake). Votre URL changera lors de l'utilisation de AWS PrivateLink, comme décrit dans la documentation Snowflake dont le lien figure dans un point 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. Vous aurez besoin de votre URL Snowflake snowflakeUrl, de votre nom d'utilisateur snowflakeUser et de votre mot de passe snowflakePassword. Si votre utilisateur Snowflake ne dispose pas d'un espace de noms par défaut, vous aurez besoin du nom de la base de données Snowflake, databaseName et du nom du schéma schemaName. De plus, si votre utilisateur Snowflake ne dispose pas d'un entrepôt par défaut, vous aurez besoin d'un nom d'entrepôt warehouseName.

Par exemple :

Conditions préalables supplémentaires : suivez les étapes Pour gérer vos informations d'identification de connexion avec AWS Glue afin de configurer snowflakeUrl, snowflakeUsername et snowflakePassword. Pour passer en revue ces étapes, reportez-vous à la section précédente, Configuration des connexions Snowflake. Pour sélectionner la connexion réseau supplémentaire à laquelle se connecter, nous utiliserons le paramètre connectionName.

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. Vous aurez besoin de votre URL Snowflake snowflakeUrl, de votre nom d'utilisateur snowflakeUser et de votre mot de passe snowflakePassword. Si votre utilisateur Snowflake ne dispose pas d'un espace de noms par défaut, vous aurez besoin du nom de la base de données Snowflake, databaseName et du nom du schéma schemaName. De plus, si votre utilisateur Snowflake ne dispose pas d'un entrepôt par défaut, vous aurez besoin d'un nom d'entrepôt warehouseName.

Par exemple :

Conditions préalables supplémentaires : suivez les étapes Pour gérer vos informations d'identification de connexion avec AWS Glue afin de configurer snowflakeUrl, snowflakeUsername et snowflakePassword. Pour passer en revue ces étapes, reportez-vous à la section précédente, Configuration des connexions Snowflake. Pour sélectionner la connexion réseau supplémentaire à laquelle se connecter, nous utiliserons le paramètre connectionName.

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 au catalogue de données (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 certains paramètres de cette section à partir d'un secret AWS Secrets Manager (sfUser, sfPassword), auquel cas vous n'êtes pas obligé de les fournir. Le secret doit fournir le contenu situé sous les clés sfUser et sfPassword. Pour ce faire, fournissez le paramètre secretId.

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 sauf si la clé pem_private_key est fournie) utilisé pour la lecture/l’é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 : utilisé pour la lecture/l'é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.

  • 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 AWS Glue. 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.

Limites du connecteur Snowflake

La connexion à Snowflake avec AWS Glue pour Spark est soumise aux limitations 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 de Snowflake via les tables du catalogue de données AWS Glue à l'aide des méthodes create_dynamic_frame.from_catalog et write_dynamic_frame.from_catalog.

  • Ce connecteur ne prend pas en charge la connexion à Snowflake avec des informations d'identification autres que l'utilisateur et le mot de passe.

  • 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.