Featured image of post Votre première requête dans Snowflake

Votre première requête dans Snowflake

Il est temps de monter en selle et d’utiliser Snowflake pour faire votre première requête.

Contexte

Les premières fois sont importantes. Votre première requête vous permettra de mieux comprendre les bases de snowflake expliquées lors des articles précédents :

Je pars donc du principe que vous en avez pris connaissance.

Créer votre première requête

Je vous propose un exemple simple nous permettant de faire une première requête dans votre environnement Snowflake. Pour réaliser cela, nous procéderons ainsi :

  • Créer un warehouse
  • Créer une base
    • Créer un schéma
      • Créer une table
  • Charger nos données
  • Créer un rôle et lui donner les droits adéquats
  • Requêter nos données avec le rôle défini.

Maitriser le contexte de notre requête

Lorsque l’on exécute une requête dans Snowflake, cette exécution se fait toujours dans un contexte définie par les 4 paramètres suivants :

  • Le rôle : vous devez être dans un rôle défini pour exécuter une requête, cela peut être le rôle par défaut de votre utilisateur ou un autre rôle qui vous as été attribué.
  • Le warehouse : Il est obligatoire pour les requêtes sur les données et provoque une facturation. Pour les requêtes de créations d’objets dans Snowflake il n’est pas impératif.
  • La base : Permets de définir le nom de la base dans laquelle vous travaillez. Si elle n’est pas définie ou si vous voulez utiliser une autre base, vous pouvez indiquer le nom de cette base dans vos requêtes.
  • Le schéma : Permets de définir le nom du schéma dans laquelle vous travaillez. S’il n’est pas défini ou si vous voulez utiliser un autre schéma, vous pouvez indiquer le nom de ce schéma dans vos requêtes.

Ouvrir l’interface

Pour créer une requête, vous devez créer un SQL worksheet dans l’interface web.
Ce document sera automatiquement sauvegardé et versionné par Snowflake. Il vous permet de choisir votre contexte, d’écrire et d’exécuter vos requêtes.

Rendez-vous sur la page d’accueil de Snowflake.

Créer un SQL Worksheet

  1. Positionnez-vous sur Worksheet.
  2. Appuyez sur le symbole + en haut à droite.
  3. Sélectionnez SQL Worksheet.

Présentation d’un SQL Worksheet

  1. Onglet pour naviguer entre la liste de vos bases et la liste de vos worksheet.
  2. Liste des bases disponible.
  3. Sélection du rôle et du warehouse du contexte de la requête.
  4. Sélection de la base et du schéma du contexte de la requête.
  5. Zone de saisie de vos requêtes SQL.
  6. Permets d’exécuter les requêtes SQL.

Noter que vous devez séparer vos différentes requêtes par un point-virgule, en général en fin de ligne d’une requête.

Créer un warehouse

Pour interagir avec nos données, nous devons passer par un warehouse.

1
2
3
4
5
6
7
-- Création du warehouse MON_WARHOUSE
CREATE WAREHOUSE IF NOT EXISTS MON_WARHOUSE
WAREHOUSE_SIZE = xsmall     -- le plus petit, conssome 1 crédit / heure
WAREHOUSE_TYPE = standard
AUTO_SUSPEND = 60           -- Arrêt automatique après 60 secondes d'inactivité
AUTO_RESUME = true          -- Redémarrage automatique quand on envoi une requête
INITIALLY_SUSPENDED = true; -- Warehouse arréter après sa création

Exécution de la requête

  1. Pour créer le warehouse, positionnez-vous dans la zone de saisie des requêtes est copiez le code ci-dessus.
  2. Appuyez sur le bouton bleu pour l’exécuter.
  3. Vous pouvez voir le résultat.

Créer les structures de données

Nous allons maintenant créer les structures pour accueillir nos données

1
2
3
4
5
6
7
8
-- Création de la base MA_BASE
CREATE DATABASE IF NOT EXISTS MA_BASE;
-- Création du schéma MON_SCHEMA
CREATE SCHEMA IF NOT EXISTS MON_SCHEMA;
-- Création de la table MA_TABLE
CREATE OR REPLACE TABLE MA_TABLE (
     id INTEGER,
     name STRING);

Exécution de plusieurs requêtes

  1. Pour créer les 3 objets base, schéma et table en même temps, positionnez-vous dans la zone de saisie des requêtes est copiez le code ci-dessus.
  2. Sur le bouton bleu, appuyez sur le chevron vers le bas pour ouvrir le menu.
  3. Sélectionnez Run All pour exécuter toutes les requêtes de la fenêtre.
  4. Vous pouvez voir le résultat de la dernière requête exécuter.
  5. Automatiquement le contexte de votre requête c’est adapté lors de la création de la base et du schéma.

Charger des données

Nous allons charger les données via une simple requête d’insertion de données.

1
2
-- Insertion de 5 lignes dans la table MA_TABLE
INSERT INTO MA_TABLE VALUES (1,'Luffy'),(2,'Nami'),(2,'Zoro'),(3,'Sanji'),(4,'Usop');

Comme je n’indique pas de schéma et de nom de base, les valeurs du contexte de la requête sont utilisées.
Les règles de résolution de nom sont les suivantes :

  • MA_TABLE –> utilise la base et le schéma du contexte de connexion.
  • MON_SCHEMA.MA_TABLE –> utilise le schéma du contexte de connexion.
  • MA_BASE.MON_SCHEMA.MA_TABLE –> pas d’utilisation du contexte de connexion.

Requêter vos données

Pour lire vos données, une simple requête SQL SELECT suffit :

1
2
-- Lire MA_TABLE
SELECT * FROM MA_TABLE

Exécution de la requête SELECT

  1. Positionnez-vous dans la zone de saisie des requêtes est copiez le code ci-dessus.
  2. Vérifier d’avoir le bon contexte pour la base et le schéma.
  3. Vérifier d’avoir le bon contexte pour le rôle et le warehouse.
  4. Appuyez sur le bouton bleu pour l’exécuter.
  5. Vous pouvez voir le résultat.

Un problème de sécurité.

Vous pouvez créer des objets, car vous êtes dans le rôle ACCOUNTADMIN et vous pouvez requêter les données, car vous êtes le propriétaire de la table. Dans un cadre d’entreprise, vous devrez utiliser des rôles personnalisés pour requêter vos données.
De même il est conseillé d’utiliser des rôles dédiés pour la création des ressources et au pire d’utiliser le rôle SYSADMIN.

Nous allons donc créer un rôle dédié à la lecture de nos données et lui donner les droits suivant :

  • Droit d’usage du warehouse pour pouvoir exécuter des requêtes.
  • Droit d’usage de la base et du schéma pour pouvoir y accéder.
  • Droit de sélectionner les données de la table.
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
CREATE ROLE IF NOT EXISTS MON_ROLE;
-- On affecte le rôle MON_ROLE au rôle SYSADMIN
GRANT ROLE MON_ROLE TO ROLE SYSADMIN;
-- On donne à MON_ROLE le droit d'accéder au warehouse MON_WARHOUSE
GRANT USAGE ON WAREHOUSE MON_WARHOUSE TO ROLE MON_ROLE;
-- On donne à MON_ROLE le droit d'accéder à la base MA_BASE
GRANT USAGE ON DATABASE MA_BASE TO ROLE MON_ROLE;
-- On donne à MON_ROLE le droit d'accéder au schéma MON_SCHEMA
GRANT USAGE ON SCHEMA MON_SCHEMA TO ROLE MON_ROLE;
-- On donne à MON_ROLE le droit de lire la table MA_TABLE
GRANT SELECT ON TABLE MA_TABLE TO ROLE MON_ROLE;
-- Maintenant MON_ROLE peut faire la requête : SELECT * FROM MA_TABLE;

Comme pour la création des structures de données, utiliser Run All pour exécuter toutes les requêtes.

Changeons de contexte

Nous allons maintenant nous mettre dans le rôle MON_ROLA, et pour cela changer de contexte directement en SQL et ensuite requêter notre table.

1
2
3
4
5
USE ROLE MON_ROLE;          -- On change le contexte du rôle
USE WAREHOUSE MON_WARHOUSE; -- On change le contexte du warehouse
USE DATABASE MA_BASE;       -- On change le contexte de la base
USE SCHEMA MON_SCHEMA;      -- On change le contexte du schéma
SELECT * FROM MA_TABLE;

Exécution de la requête SELECT avec MON_ROLE

  1. Positionnez-vous dans la zone de saisie des requêtes est copiez le code ci-dessus.
  2. Sur le bouton bleu, appuyez sur le chevron vers le bas pour ouvrir le menu.
  3. Sélectionnez Run All pour exécuter toutes les requêtes de la fenêtre.
  4. Vous pouvez voir que le contexte pour le rôle et le warehouse sont ceux demandés par la requête.
  5. Vous pouvez voir que le contexte pour la base et le schéma sont ceux demandés par la requête.
  6. Vous pouvez voir le résultat de la dernière requête exécuter.

Bravo, vous avez fini votre première requête dans Snowflake.

Merci de votre attention.

comments powered by Disqus
Généré avec Hugo
Thème Stack conçu par Jimmy