AWS Glue avec flocon de neige | Blog sur l’entreposage de données Snowflake

AWS Glue avec flocon de neige | Blog sur l’entreposage de données Snowflake


VEUILLEZ NOTER : Ce message a été initialement publié en 2018. Il a été mis à jour pour refléter les produits, fonctionnalités et/ou fonctionnalités actuellement disponibles.

Le processus d’extraction, de transformation et de chargement (ETL) est au cœur de toute initiative d’entreposage de données. Avec les progrès des architectures d’entrepôt de données cloud, les clients bénéficient également de l’approche alternative d’extraction, de chargement et de transformation (ELT), où le traitement des données est poussé vers la base de données.

Quelle que soit l’approche, le débat se poursuit : devez-vous utiliser une méthode codée manuellement ou tirer parti d’un certain nombre d’outils d’intégration de données ETL ou ELT disponibles ? Bien qu’il y ait des avantages aux deux, et que certains choisiront une approche « l’une ou l’autre », de nombreuses organisations choisissent d’utiliser une combinaison d’un outil d’intégration de données avec le codage manuel.

Le code offre aux développeurs la flexibilité de créer en utilisant les langages préférés tout en maintenant un haut niveau de contrôle sur les processus et les structures d’intégration. Le défi a été que les options de codage manuel sont traditionnellement plus complexes et coûteuses à entretenir. Cependant, avec AWS Glue, les développeurs ont désormais la possibilité de créer et de gérer plus facilement leurs processus de préparation et de chargement des données avec un code généré personnalisable, réutilisable et portable sans infrastructure à acheter, configurer ou gérer.

Dans cet article de blog, nous expliquerons comment tirer parti de la puissance d’AWS Glue avec Snowflake et comment le traitement est optimisé grâce à l’utilisation du refoulement des requêtes pour ELT.

Pourquoi AWS Glue avec Snowflake ?

Les clients Snowflake ont désormais une option simple pour gérer leurs processus d’intégration de données programmatiques sans se soucier des serveurs, Étincelle clusters, ou la maintenance continue traditionnellement associée à ces systèmes. AWS Glue fournit un environnement entièrement géré qui s’intègre facilement à l’entrepôt de données de Snowflake en tant que service. Ensemble, ces deux solutions permettent aux clients de gérer leurs pipelines d’ingestion et de transformation de données avec plus de facilité et de flexibilité que jamais.

Avec AWS Glue et Snowflake, les clients bénéficient en plus du refoulement des requêtes de Snowflake, qui transfère automatiquement les charges de travail Spark, traduites en SQL, dans Snowflake. Les clients peuvent se concentrer sur l’écriture de leur code et l’instrumentation de leurs pipelines sans avoir à se soucier de l’optimisation des performances de Spark. Avec AWS Glue et Snowflake, les clients peuvent profiter des avantages d’un traitement ELT optimisé à faible coût et facile à utiliser et à entretenir.

AWS Glue et Snowflake en action

Conditions préalables

REMARQUE: AWS Glue 3.0 nécessite Spark 3.1.1 – Snowflake Spark Connector 2.10.0-spark_3.1 ou supérieur, et Snowflake JDBC Driver 3.13.14 peut être utilisé.

Installer

  1. Connectez-vous à AWS.
  2. Recherchez et cliquez sur le S3 lien.
    • Créez un compartiment et un dossier S3.
    • Ajoutez les fichiers Spark Connector et JDBC .jar au dossier.
    • Créez un autre dossier dans le même compartiment à utiliser comme répertoire temporaire Glue dans les étapes ultérieures (voir ci-dessous).
  3. Passez à la Colle AWS Service.
  4. Cliquer sur Travaux sur le panneau de gauche sous ETL.
  5. Ajoutez une tâche en sélectionnant le Éditeur de script Spark option et en cliquant Créerpuis cliquez sur l’onglet Détails de la tâche.
    • Indiquez un nom pour le travail.
    • Sélectionnez un rôle IAM. Créez un nouveau rôle IAM s’il n’en existe pas déjà un et assurez-vous d’ajouter toutes les stratégies Glue à ce rôle.
    • Sélectionnez le type Étincelle.
    • Sélectionnez la version Glue (voir la remarque ci-dessus pour la version 3.0 de Glue).
    • Sélectionnez Python 3 comme langage.
    • Cliquer sur Propriétés avancées pour agrandir cette section.
    • Donnez un nom au script.
    • Définissez le répertoire temporaire sur celui que vous avez créé à l’étape 2c.
    • En dessous de Bibliothèques dans le Chemin des pots dépendants, ajouter des entrées pour les deux fichiers .jar à partir de 2b.

REMARQUE: Vous devez ajouter le chemin d’accès complet aux fichiers .jars réels. Exemple : s3://[bucket_name]/GlueJars/spark-snowflake_22.12-2.10.0-spark_3.1.jar,s3://[bucket_name]/GlueJars/flocon-de-neige-jdbc-3.13.14.jar

  • En dessous de Paramètres du travail, entrez les informations suivantes avec les informations de votre compte Snowflake. Assurez-vous d’inclure les deux tirets avant chaque clé.

REMARQUE: Stocker les informations de votre compte et vos informations d’identification de cette manière les exposera à toute personne ayant accès à ce travail. Cela peut être utile à des fins de test, mais il est recommandé de stocker vos informations d’identification en toute sécurité, comme indiqué dans la section « Stocker les informations d’identification en toute sécurité ».

REMARQUE: URL est l’URL du compte Snowflake après le https:// ; par exemple, abcd123.snowflakecomputing.com

  1. Cliquez sur sauvegarder en haut à droite.
  2. Cliquez en haut Scénario onglet pour saisir un script.

Exemple de scénario

Utilisez l’exemple de script suivant pour tester l’intégration entre AWS Glue et votre compte Snowflake. Ce script suppose que vous avez stocké vos informations de compte et vos informations d’identification à l’aide des paramètres de travail, comme décrit dans le tableau ci-dessus.

import sys
from awsglue.transforms import *
from awsglue.utils import getResolvedOptions
from pyspark.context import SparkContext
from awsglue.context import GlueContext
from awsglue.job import Job
from py4j.java_gateway import java_import

## @params: [JOB_NAME, URL, WAREHOUSE, DB, SCHEMA, USERNAME, PASSWORD]
SNOWFLAKE_SOURCE_NAME = "net.snowflake.spark.snowflake"
args = getResolvedOptions(sys.argv, ['JOB_NAME', 'URL', 'WAREHOUSE', 'DB', 'SCHEMA', 'USERNAME', 'PASSWORD'])
sc = SparkContext()
glueContext = GlueContext(sc)
spark = glueContext.spark_session
job = Job(glueContext)
job.init(args['JOB_NAME'], args)
java_import(spark._jvm, SNOWFLAKE_SOURCE_NAME)
## uj = sc._jvm.net.snowflake.spark.snowflake
spark._jvm.net.snowflake.spark.snowflake.SnowflakeConnectorUtils.enablePushdownSession(spark._jvm.org.apache.spark.sql.SparkSession.builder().getOrCreate())
sfOptions = {
"sfURL" : args['URL'],

"sfUser" : args['USERNAME'],
"sfPassword" : args['PASSWORD'],
"sfDatabase" : args['DB'],
"sfSchema" : args['SCHEMA'],
"sfWarehouse" : args['WAREHOUSE'],
"application" : "AWSGlue"
}

## Read from a Snowflake table into a Spark Data Frame
df = spark.read.format(SNOWFLAKE_SOURCE_NAME).options(**sfOptions).option("dbtable", "[table_name]").load()

## Perform any kind of transformations on your data and save as a new Data Frame: df1 = df.[Insert any filter, transformation, or other operation]
## Write the Data Frame contents back to Snowflake in a new table df1.write.format(SNOWFLAKE_SOURCE_NAME).options(**sfOptions).option("dbtable", "[new_table_name]").mode("overwrite").save() job.commit()

Sécurisation des identifiants

Pour stocker en toute sécurité les informations et les informations d’identification de votre compte, consultez l’article suivant qui décrit comment cela est accompli avec EC2 : Comment stocker en toute sécurité les informations d’identification avec EC2.

Conclusion

AWS Glue et Snowflake facilitent le démarrage et la gestion de vos processus d’intégration de données programmatiques. AWS Glue peut être utilisé de manière autonome ou en conjonction avec un outil d’intégration de données sans ajouter de surcharge significative. Avec le refoulement des requêtes natives via le connecteur Snowflake Spark, cette approche optimise à la fois le traitement et le coût pour un véritable traitement ELT. Avec AWS Glue et Snowflake, les clients bénéficient d’une plateforme entièrement gérée et entièrement optimisée pour prendre en charge un large éventail d’exigences d’intégration de données personnalisées.

Liens supplémentaires

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.