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 :
USE DATABASE (commande) , CURRENT_DATABASE (fonction)
USE SCHEMA (commande) , CURRENT_SCHEMA (fonction)
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 :
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.) |
|
Data Lakes |
|
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 |
|
Transactions à plusieurs instructions |
|
Fonctions et procédures |
Fonctions définies par l’utilisateur (UDFs) . Fonctions externes . Procédures stockées |