Connecteur Python natif pour Snowflake

Connecteur Python natif pour Snowflake


Remerciements supplémentaires aux co-auteurs Greg Rahn, Product Management et Shige Takeda, Engineering.

Une priorité clé pour nous chez Snowflake est d’élargir les choix d’outils dont disposent les développeurs et les analystes qui peuvent tirer parti des capacités uniques de Snowflake. Il y a quelques mois, nous avons annoncé la prise en charge de R avec notre package R dplyr, qui combine l’élasticité de Snowflake avec les capacités de refoulement SQL, permettant aux passionnés de R d’exécuter efficacement leurs fonctions R préférées sur de grands ensembles de données semi-structurées et structurées (obtenez les fonctionnalités de Snowflake paquet dplyr sur Github).

Aujourd’hui, nous sommes ravis d’annoncer la disponibilité générale d’un connecteur Python natif pour Snowflake. Le connecteur Python est un package Python pur distribué via APIPy et publié sous la licence Apache, version 2.0.

Nous tenons à remercier les nombreux clients et partenaires qui ont travaillé en étroite collaboration avec nous lors de l’avant-première technologique du connecteur. Cette assistance nous a aidés à hiérarchiser les fonctionnalités clés et à affiner le connecteur en fonction de l’utilisation réelle. Ron Dunn de Ajilusun fournisseur de solutions d’automatisation d’entrepôt de données, a déclaré : « La disponibilité précoce d’un adaptateur Python a montré l’engagement de Snowflake envers l’intégration, et l’engagement profond de l’équipe tout au long du processus bêta a été la preuve de son solide soutien aux développeurs.

Qu’y a-t-il dans le connecteur ?

Indubitablement, Python est devenu l’un des langages les plus populaires que les développeurs choisissent pour la programmation moderne et c’est celui que beaucoup de nos clients nous ont dit utiliser. Avec la sortie d’un connecteur Python natif, nous offrons un moyen élégant et simple d’exécuter des scripts Python sur Snowflake, en combinant la puissance et l’expressivité de Python avec les capacités uniques du service Snowflake Elastic Data Warehouse. Certaines des fonctionnalités clés du connecteur :

  • Prise en charge de Python 2 (2.7.9 ou supérieur) et Python 3 (3.4.3 ou supérieur).
  • Connecteur Python natif pour toutes les plates-formes, y compris OS X, Linux et Windows.
  • Installation facile via le système de gestion de paquets pip de Python, sans avoir besoin d’un pilote JDBC ou ODBC.
  • Implémentation de API DB v2 de Python.
  • Prise en charge de la connexion à Snowflake et de l’exécution de commandes DDL ou DML.
  • Prise en charge de la commande COPY (pour le chargement parallèle) et des méthodes chiffrées PUT & GET.
  • Prise en charge des types de données de date et d’horodatage.
  • Amélioration de la gestion des erreurs.

Mise en œuvre du connecteur : chargement automatique et planifié via AWS Lambda et Python

Le chargement des données est l’un des défis dont les clients se plaignent fréquemment lorsqu’ils décrivent leur environnements d’entrepôt de données traditionnels. L’une de ces questions vous semble-t-elle familière ?

  • Comment mettre en place un ou des serveur(s) de charge ?
  • Comment configurer la mise en réseau pour connecter le serveur de charge à l’entrepôt de données ?
  • Comment maintenir et programmer les scripts de chargement ?
  • Comment évoluer avec des charges croissantes ?

Avec Snowflake, ces tâches fastidieuses ne sont plus nécessaires ou grandement simplifiées et automatisées. En combinant Python via notre connecteur Python avec AWS Lambdales utilisateurs disposent d’un moyen simple et puissant de charger des données dans Snowflake sans avoir à configurer de serveurs ou de mise en réseau.

Pour illustrer, utilisons l’exemple de la façon d’opérationnaliser facilement les étapes pour extraire les données de MongoDB et pour invoquer automatiquement le chargement programmé des données JSON arrivant dans S3 dans Snowflake. Nous montrerons comment y parvenir en utilisant des événements Lambda planifiés pour émettre des charges régulières et incrémentielles via Python et le connecteur Python.

Flux de flocon de neige MongoDB Lambda
Workflow de haut niveau pour le chargement de JSON dans Snowflake avec Python et AWS Lambda

En un mot, un utilisateur doit simplement effectuer les étapes suivantes pour activer le chargement automatique des données dans Snowflake à l’aide de Python et AWS Lambda :

ÉTAPE 1 : Exportez les données JSON de MongoDB vers Amazon S3

Pour extraire des données de MongoDB, utilisez simplement la fonctionnalité d’exportation fournie par MongoDB :

  mongoexport --db <dbname> --collection <data> --out out.json

Veuillez noter que vous devez transformer les données exportées en JSON valide en supprimant les spécificités BSON (format JSON étendu de MongoDB). Par exemple, vous pouvez utiliser ce script de conversion pour convertir du JSON étendu en JSON. Une fois exportées, vous pouvez charger les données dans un compartiment AWS S3 à l’aide de l’un des méthodes disponibles.

ÉTAPE 2 : Configurer l’environnement Python pour AWS Lambda

Pour configurer AWS Lambda afin de permettre l’exécution de scripts Python, un utilisateur doit d’abord créer un environnement de déploiement Python virtuel pour AWS Lambda et installer le connecteur Python. Vous pouvez trouver les scripts shell correspondants sur notre emplacement github.

Le connecteur Python lui-même est pris en charge sur toutes les plates-formes de système d’exploitation et est publié à l’adresse suivante Emplacement de l’API. Exécutez simplement la commande PIP :

  pip install --upgrade snowflake-connector-python 

ÉTAPE 3 : Développer un script de chargement basé sur Python

Dans l’exemple suivant, nous démontrons un script Python simple qui charge les données d’un compartiment S3 autre que Snowflake dans Snowflake. Le script exploite le nouveau connecteur Snowflake pour Python :

  1. Tout d’abord, importez le connecteur Python pour Snowflake :
      import snowflake.connector
  2. Ensuite, configurez les informations et les informations d’identification de votre compte Snowflake pour votre compartiment S3 :
      ACCOUNT = '<your account name>'
      USER = '<your user name>'
      PASSWORD = '<your password>'
    
      AWS_ACCESS_KEY_ID = '<your access key for S3 bucket>'
      AWS_SECRET_ACCESS_KEY = '<your access key for S3 bucket>'
    
  3. Connectez-vous à Snowflake et choisissez une base de données, un schéma et un entrepôt virtuel :
      cnx = snowflake.connector.connect (
        	user=USER,
       	password=PASSWORD,
        	account=ACCOUNT,
        	database=myDB,
        	schema=mySchema,
       	warehouse=myDW
      )
    
  4. Créez une table pour vos données JSON et chargez les données dans Snowflake via la commande de copie. Notez que vous n’avez pas besoin de définir un schéma ; utilisez simplement le type de colonne variant :
      cnx.cursor().execute("create JsonTable (col1 variant)")
      sql = """copy into JsonTable FROM 
      s3://<your_s3_bucket>/data/
      credentials = (aws_key_id='<aws_access_key_id>',         
                     aws_secret_key=('<aws_secret_access_key>'))
      file_format=(type=JSON)"""
    
      cnx.cursor().execute(sql)
    

Pour créer une fonction de base du gestionnaire Lambda, veuillez consulter le script shell du gestionnaire lambda correspondant dans notre emplacement github.

ÉTAPE 4 : Configurez un événement AWS Lambda planifié pour Amazon S3

La dernière étape consiste à configurer Lambda pour que les événements planifiés soient déclenchés avec Amazon S3 comme source d’événement. Par exemple, un utilisateur peut programmer un événement Lambda pour qu’il se déclenche à une heure particulière de la journée ou toutes les 5 minutes. À ce jour, le temps d’exécution maximal pour chaque invocation Lambda est de 300 secondes. C’est-à-dire que le chargement doit se terminer dans cette fenêtre de temps. Veuillez également noter que les événements planifiés ne sont pris en charge que par la console AWS Lambda (voir ci-dessous). Plus d’informations sur AWS Lambda peuvent être trouvées ici.

Console AWS Lambda

C’est ça! Nous avons maintenant un moyen automatisé de prendre les données exportées de MongoDB et de les charger dans Snowflake. Dans notre exemple ici, la sortie de la fonction Lambda montre que nous avons chargé 132 lignes dans Snowflake.

Sortie Lambda

Laisser un commentaire

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