Développement d’applications dans Snowflake

Pour commencer à développer des applications dans Snowflake, vous devez d’abord vous familiariser avec certaines notions de base de Snowflake. Ce chapitre vous guidera à travers les tâches fondamentales requises pour le développement d’applications dans Snowflake. Dans ce chapitre, vous apprendrez à :

  • Installer et configurer le client SnowSQL CLI.

  • Créer un entrepôt virtuel, une base de données et une table.

  • Charger les données dans la table et interroger la table.

  • Utiliser Python pour vous connecter à Snowflake, effectuer des requêtes et manipuler les données renvoyées.

Vous pouvez ensuite utiliser ces connaissances pour explorer les fonctionnalités et les capacités plus avancées disponibles dans Snowflake.

Dans ce chapitre :

Télécharger et installer le client SnowSQL CLI

La première étape consiste à télécharger le client SnowSQL CLI à partir du Snowflake Client Repository. Les instructions pour le téléchargement et l’installation de SnowSQL sont spécifiques à chaque OS :

Linux

Vous pouvez utiliser curl pour télécharger la version Linux du client à partir du Snowflake Client Repository :

curl -O https://sfc-repo.snowflakecomputing.com/snowsql/bootstrap/1.2/linux_x86_64/snowsql-<version>-linux_x86_64.bash

Après le téléchargement, installez le client via bash dans la fenêtre du terminal :

bash snowsql-<version>-linux_x86_64.bash

Vous pouvez également télécharger la version RPM du client (snowflake-snowsql-<version>-1.x86_64.rpm) et l’installer :

rpm -i snowflake-snowsql-<version>-1.x86_64.rpm
macOS

Vous pouvez utiliser curl pour télécharger la version macOS du client à partir du Snowflake Client Repository :

curl -O https://sfc-repo.snowflakecomputing.com/snowsql/bootstrap/1.2/darwin_x86_64/snowsql-<version>-darwin_x86_64.pkg

Après le téléchargement, installez le client en double-cliquant sur le fichier snowsql-<version>-darwin_x86_64.pkg .

Si vous avez Homebrew, vous pouvez également installer le client via le Homebrew Cask :

brew cask install snowflake-snowsql
Windows

Utilisez curl pour télécharger la version Windows du client à partir du Snowflake Client Repository :

curl -O https://sfc-repo.snowflakecomputing.com/snowsql/bootstrap/1.2/windows_x86_64/snowsql-<version>-windows_x86_64.msi

Ensuite, lancez le fichier MSI pour l’installer.

Après l’installation, vérifiez que le client a été installé avec succès en exécutant la commande snowsql dans la fenêtre de votre terminal :

snowsql

La sortie affiche tous les paramètres disponibles que vous pouvez utiliser avec le client.

Créer un entrepôt virtuel, un exemple de base de données et une table à l’aide de SnowSQL

Se connecter à Snowflake

Une fois l’installation de SnowSQL effectuée, vous pouvez vous connecter à Snowflake. Pour ce faire, vous aurez besoin des informations suivantes :

  • <nom_compte> : nom attribué à votre compte par Snowflake. Il s’agit de la chaîne de caractères qui précède .snowflakecomputing.com dans l’URL que vous avez reçue de Snowflake.

  • <nomutilisateur> (et le mot de passe qui l’accompagne) : utilisateur Snowflake qui a été créé pour vous dans votre compte.

Pour vous connecter, ouvrez une fenêtre de terminal et entrez la commande suivante :

snowsql -a <account_name> -u <username>

Un mot de passe vous est demandé. Si votre tentative de connexion est réussie, une session Snowflake est lancée pour votre utilisateur. La connexion et l’invite SnowSQL sont affichées. Par exemple, si vous avez installé SnowSQL 1.2.9 et que votre nom d’utilisateur Snowflake est user1, la connexion et l’invite seront :

* SnowSQL * v1.2.9
Type SQL statements or !help
user1#(no warehouse)@(no database).(no schema)>

Notez que l’invite SnowSQL indique qu’il n’y a pas d’entrepôt virtuel, ni base de données, ni schéma actuellement utilisé dans votre session.

Les sections suivantes décrivent comment créer ces objets Snowflake requis et les utiliser dans la session.

Créer un entrepôt virtuel

Les entrepôts virtuels fournissent les ressources de calcul nécessaires pour effectuer des requêtes et des opérations DML, telles que le chargement de données, sur des tables de Snowflake. Les entrepôts virtuels sont de tailles différentes pour permettre d’adapter chaque entrepôt à votre charge de travail en matière d’interrogation et de chargement de données.

Dans cet exemple, utilisez la commande CREATE WAREHOUSE pour créer un petit entrepôt X-Small nommé sf_tuts_wh :

CREATE OR REPLACE WAREHOUSE sf_tuts_wh WITH
  WAREHOUSE_SIZE='X-SMALL'
  AUTO_SUSPEND = 180
  AUTO_RESUME = TRUE
  INITIALLY_SUSPENDED=TRUE;

Le seul paramètre requis est le nom de l’entrepôt ; toutefois, cet exemple définit quelques paramètres supplémentaires et facultatifs :

  • AUTO_SUSPEND : indique le nombre de secondes d’inactivité après lesquelles un entrepôt est automatiquement suspendu.

  • AUTO_RESUME : s’il est défini sur TRUE, un entrepôt suspendu reprend automatiquement lorsqu’une requête lui est soumise.

  • INITIALLY_SUSPENDED : s’il est défini sur TRUE, l’entrepôt est créé dans un état suspendu.

Ces paramètres supplémentaires garantissent que vous n’utilisez pas de crédits excédentaires, car l’entrepôt est créé dans un état suspendu et n’utilise pas de crédits sauf s’il est en cours d’exécution. Ils veillent également à ce que l’entrepôt soit prêt à reprendre dès que les demandes sont soumises afin que votre flux de travail ne soit pas interrompu.

Astuce

Les noms d’objets dans Snowflake, également appelés identificateurs, ne sont pas sensibles à la casse (et s’affichent en majuscules), sauf indication contraire explicite. Pour plus de détails, voir Identificateurs d’objet.

Une fois créé, l’entrepôt virtuel (sf_tuts_wh) est automatiquement utilisé pour la session, comme indiqué dans votre invite SnowSQL mise à jour :

user1#SF_TUTS_WH@(no database).(no schema)>

Pour voir l’entrepôt utilisé pour une session, vous pouvez également utiliser la fonction CURRENT_WAREHOUSE :

SELECT CURRENT_WAREHOUSE();

Pour spécifier explicitement l’entrepôt à utiliser dans la session, utilisez la commande USE WAREHOUSE :

USE WAREHOUSE sf_tuts_wh;

Vous avez maintenant réussi à créer un entrepôt virtuel. Passons maintenant aux bases de données et aux tables.

Créer une base de données

Utilisez la commande CREATE DATABASE pour créer des bases de données. Dans cet exemple, vous créez une base de données nommée sf_tuts :

CREATE OR REPLACE DATABASE sf_tuts;

Lorsque vous créez une base de données dans Snowflake, un schéma par défaut nommé public est automatiquement créé dans la base de données. La base de données et le schéma sont automatiquement utilisés lors de la session, comme indiqué dans votre invite SnowSQL mise à jour :

user1#SF_TUTS_WH@SF_TUTS.PUBLIC>

Voir aussi :

Créer une table

Pour commencer à travailler avec des données stockées dans la base de données, vous devez d’abord créer une table pour les données. Pour ce faire, vous pouvez utiliser la commande CREATE TABLE .

Les noms des colonnes et les types de données de votre table doivent correspondre aux données à charger. Pour les besoins de cette rubrique, les données à charger sont des informations relatives aux employés fournies dans les fichiers d’échantillon CSV situés ici à télécharger.

Téléchargez le fichier ZIP puis extrayez les fichiers CSV à n’importe quel endroit de votre environnement. Dans les exemples suivants de cette rubrique, l’emplacement est supposé être un répertoire nommé tmp.

L’exemple suivant CREATE TABLE illustre les noms de colonnes et les types de données qui correspondent aux données à charger. Les noms des colonnes de table correspondent aux colonnes des fichiers d’échantillon CSV :

CREATE OR REPLACE TABLE emp_basic (
  first_name STRING ,
  last_name STRING ,
  email STRING ,
  streetaddress STRING ,
  city STRING ,
  start_date DATE
  );

Charger et interroger des données à l’aide de SnowSQL

Cette section décrit comment utiliser les commandes SQL et SnowSQL pour le chargement en masse de données ; cependant, Snowflake prend en charge de nombreuses autres options pour le chargement des données.

Voir la barre latérale (à droite) pour des liens vers d’autres rubriques liées au chargement de données.

Télécharger des fichiers de données

À présent, chargez la table avec des données d’un ou plusieurs fichiers. Tout d’abord, utilisez la commande PUT pour télécharger les fichiers vers une zone de préparation interne. Cette zone de préparation est celle où les fichiers sont stockés avant le chargement. Vous pouvez utiliser des caractères génériques (par exemple *) pour télécharger plusieurs fichiers.

Par exemple, pour télécharger les fichiers d’échantillon CSV vers la zone de préparation interne pour la table emp_basic que vous avez créée plus tôt dans le schéma sf_tuts.public :

Linux ou macOS
PUT file:///tmp/employees0*.csv @sf_tuts.public.%emp_basic;
Windows
PUT file://C:\temp\employees0*.csv @sf_tuts.public.%emp_basic;

Astuce

Le signe @ devant le nom de la base de données et du schéma (@sf_tuts.public) indique que les fichiers sont téléchargés vers une zone de préparation interne, plutôt qu’une zone de préparation externe. Le signe % avant le nom de la table (%emp_basic) indique que la zone de préparation interne utilisée est la zone de préparation de la table. Pour plus d’informations sur les zones de préparation, voir Mise en zone de préparation des fichiers de données à partir d’un système de fichiers local.

Charger des données à partir des fichiers

Une fois les fichiers mis en zone de préparation, vous pouvez utiliser la commande COPY INTO <table> pour charger les données des fichiers dans la table que vous avez créée :

COPY INTO emp_basic
  FROM @sf_tuts.public.%emp_basic
  FILE_FORMAT = (type = csv field_optionally_enclosed_by='"')
  PATTERN = '.*employees0[1-5].csv.gz'
  ON_ERROR = 'skip_file';

FILE_FORMAT précise le type de fichier (par exemple csv) et la manière dont les champs sont délimités. Dans cet exemple, les champs sont délimités par des guillemets doubles.

Astuce

Si vous chargez plusieurs fichiers, les paramètres facultatifs suivants peuvent être utiles :

  • PATTERN : applique un modèle pour spécifier les fichiers qui correspondent à une expression régulière.

  • ON_ERROR : spécifie ce qui se passe lorsqu’une erreur est rencontrée lors du chargement d’un fichier.

Interroger la table

Les données étant chargées dans la table, vous pouvez maintenant exécuter des requêtes en utilisant des instructions SQL SELECT .

Tout d’abord, pour renvoyer toutes les colonnes et lignes de la table :

SELECT * FROM emp_basic;

Une instruction SELECT peut inclure des fonctions, telles que LIKE, pour récupérer des données répondant à certaines qualifications. Dans cet exemple, la commande renvoie les adresses e-mail avec un nom de domaine du Royaume-Uni (.uk) :

SELECT email FROM emp_basic WHERE email LIKE '%.uk';

Mettre à jour de la table

Vous pouvez également utiliser des commandes DML pour manipuler directement la table. Dans cet exemple, utilisez la commande INSERT pour insérer une seule ligne dans la table :

INSERT INTO emp_basic VALUES
  ('Clementine','Adamou','cadamou@sf_tuts.com','10510 Sachs Road','Klenak','2017-9-22');

Snowflake prend en charge de nombreuses autres commandes que vous pouvez utiliser pour interagir avec vos données. Mais pour l’instant, passons à la suite et voyons comment connecter une application Python à Snowflake pour exploiter la puissance des langages de programmation pris en charge par Snowflake.

Utiliser Python avec Snowflake

Cette section fournit quelques exemples de base pour commencer à utiliser Python ; cependant, Snowflake fournit des interfaces pour de nombreux langages de programmation parmi les plus populaires.

Voir la barre latérale (à droite) pour des liens vers d’autres sujets liés aux interfaces programmatiques prises en charge par Snowflake.

Installer le connecteur Snowflake pour Python

Pour se connecter à Snowflake en utilisant Python, Python 3.6 (ou plus) et le connecteur Snowflake pour Python doivent être installés.

Tout d’abord, vérifiez la version de Python installée dans votre environnement en exécutant la commande suivante dans une fenêtre de terminal :

python --version

Si votre version est Python 3.6 ou supérieure, vous pouvez continuer. Si votre version est inférieure ou si Python n’est pas installé, vous devez procéder à la mise à jour ou à l’installation :

Linux ou macOS

Votre distribution d’environnement a probablement Python 3.5 ou une version plus récente disponible qu’il est possible d’installer par le biais du gestionnaire de packs. Vous devrez peut-être aussi installer pip, le système de gestion des packs utilisé pour installer les packages Python. Il est également possible de le télécharger à partir des gestionnaires de packs de la plupart des distributions.

Windows

Vous pouvez télécharger Python par le biais du site Web de la Python Software Foundation.

Avec Python et pip installés, utilisez pip pour installer le package pour le connecteur Python via la ligne de commande suivante :

pip install snowflake-connector-python

Vous pouvez maintenant vous connecter à Snowflake en utilisant Python pour interroger des données et effectuer d’autres opérations.

Astuce

Avant de commencer, vous devriez envisager d’ajouter vos identifiants de connexion SnowSQL comme variables d’environnement afin qu’ils ne soient pas exposés dans vos scripts. Pour plus de détails, voir Connexion par le biais de SnowSQL.

Importer le connecteur

Dans votre application Python, importez d’abord le package du connecteur (snowflake.connector). Si vous utilisez des variables d’environnement, vous devez également importer le package os :

import snowflake.connector
import os

Se connecter à Snowflake

Ensuite, connectez-vous à Snowflake avec vos identifiants de connexion. Si vous avez configuré vos identifiants de connexion comme variables d’environnement, faites-en la référence ici. C’est également là que vous indiquez l’entrepôt virtuel, la base de données et le schéma à utiliser dans votre session Snowflake :

USER = os.getenv('SNOWSQL_USER')
PASSWORD = os.getenv('SNOWSQL_PWD')
ACCOUNT = os.getenv('SNOWSQL_ACCOUNT')

ctx = snowflake.connector.connect(
  user=USER,
  password=PASSWORD,
  account=ACCOUNT,
  warehouse='SF_TUTS_WH',
  database='SF_TUTS',
  schema='PUBLIC'
  )

Définir une requête

Vous pouvez utiliser des commandes pour spécifier les données dont vous avez besoin pour votre application. Dans cet exemple, vous concaténez plusieurs chaînes en une seule requête :

command = "SELECT start_date FROM emp_basic "
command += "WHERE start_date >= '2016-12-31' "
command += "ORDER by start_date;"

Exécuter la requête et renvoyer les résultats

Les commandes SQL sont exécutées par la méthode d’itérateur d’objet curseur. Les dates seront ensuite ajoutées dans une liste Python vide :

dates = []
cs = ctx.cursor()
try:
    cs.execute(command)
    for start_date in cs:
        dates.append(start_date)
finally:
    cs.close()

La lecture des données directement dans un programme Python vous permet d’utiliser des paquets Python pour traiter les données. Par exemple, les packages de visualisation seaborn et matplotlib.pyplot peuvent être utilisés pour visualiser les données :

import matplotlib.pyplot
import seaborn as sns

months = []

for i in dates:
    months.append(i.strftime('%m'))

sns.distplot(
    months,
    hist = True,
    axlabel = "Month",
    label = "Employee Growth in 2017",
    bins = 12,
    kde=False)

matplotlib.pyplot.show()

Le graphique résultant ressemblerait à ce qui suit :

Example of visualization package showing employee growth

Pour plus de détails sur ce que vous pouvez faire avec Python et Snowflake, voir la documentation Python.

Prochaines étapes

Après avoir terminé les tâches de ce chapitre, vous devriez être familiarisé avec les bases de l’utilisation de SnowSQL et du connecteur Snowflake pour Python.

Détruire l’exemple de base de données et l’entrepôt virtuel (facultatif)

Si vous n’avez pas l’intention d’utiliser les exemples de base de données d’entrepôt créés dans ce chapitre, vous devriez envisager de les détruire :

DROP DATABASE IF EXISTS sf_tuts;

DROP WAREHOUSE IF EXISTS sf_tuts_wh;

Fonctionnalités avancées de l’application

Au fur et à mesure que vous explorez plus en profondeur les capacités de Snowflake, prenez en considération les fonctionnalités suivantes, qui sont disponibles pour le développement d’applications avancées :

Domaine de fonctionnalité

Fonctionnalité

Données semi-structurées (JSON, Avro, Parquet, etc.)

Données semi-structurées

Data Lakes

Travailler avec des tables externes

Time Travel

Comprendre et utiliser la fonction « Time Travel »

Pipelines de données continues

Suivi des modifications à l’aide de flux de table . Exécution d’instructions SQL sur une planification à l’aide de tâches

Variables

Variables SQL

Transactions à plusieurs instructions

Transactions

Fonctions et procédures

Fonctions définies par l’utilisateur (UDFs) . Fonctions externes . Procédures stockées