Accueil A propos Tech Stack Projets Blog Tracker
Retour au Blog

Snowflake pour les Debutants :
Par ou commencer ?

Guide complet pour comprendre l'architecture Snowflake, creer votre premier environnement, charger des donnees et ecrire vos premieres requetes SQL.

Serie : Snowflake Fondamentaux
  1. Partie 1 : Par ou commencer ? (cet article)
  2. Partie 2 : Charger des donnees avec COPY INTO et Snowpipe
  3. Partie 3 : Transformer vos donnees avec SQL et Dynamic Tables
  4. Partie 4 : Securite, Roles et Bonnes Pratiques
Sommaire
  1. Qu'est-ce que Snowflake ?
  2. L'architecture 3 couches
  3. Creer votre premier environnement
  4. Databases, Schemas et Tables
  5. Virtual Warehouses : la puissance de calcul
  6. Les Stages : la zone de transit
  7. Charger des donnees avec COPY INTO
  8. Premieres requetes SQL
  9. Bonnes pratiques de nommage
  10. Prochaines etapes

01. Qu'est-ce que Snowflake ?

Snowflake est une plateforme de donnees cloud-native qui fonctionne sur AWS, Azure et Google Cloud. Contrairement aux data warehouses traditionnels, Snowflake separe le stockage du calcul, ce qui signifie que vous pouvez scaler l'un sans toucher a l'autre.

En tant que Data Engineer, Snowflake vous offre :

  • Zero administration : pas de serveurs a gerer, pas de tuning d'index, pas de VACUUM
  • Scaling automatique : augmentez/diminuez la puissance en quelques secondes
  • Support multi-format : donnees structurees (CSV), semi-structurees (JSON, Parquet, Avro) et non-structurees
  • Pay-per-use : vous ne payez que quand vos warehouses tournent
Essai gratuit

Snowflake offre un essai gratuit de 30 jours avec 400$ de credits. C'est largement suffisant pour suivre ce guide et experimenter. Inscrivez-vous sur signup.snowflake.com.

02. L'architecture 3 couches

Snowflake repose sur une architecture unique a 3 couches independantes. Comprendre cette architecture est fondamental pour bien utiliser la plateforme :

Cloud Services
Securite, Optimisation, Metadata
Virtual Warehouses (Compute)
Execution des requetes, scaling independant
Storage (Micro-partitions)
Donnees compressees, format colonnaire

Couche Storage

Snowflake stocke toutes les donnees dans un format colonnaire compresse et optimise, organise en micro-partitions. Vous n'avez jamais a gerer le stockage directement : Snowflake s'occupe de la compression, du partitionnement et de l'optimisation.

Couche Compute

Les Virtual Warehouses sont des clusters de calcul independants. Chaque warehouse fonctionne de maniere isolee : un warehouse lent ne ralentit jamais un autre. Vous pouvez en creer autant que necessaire et les dimensionner selon vos besoins.

Couche Cloud Services

C'est le "cerveau" de Snowflake. Cette couche gere l'authentification, l'optimisation des requetes, la gestion des metadonnees et le controle d'acces. Elle est toujours active et ne genere presque aucun cout.

03. Creer votre premier environnement

Une fois connecte a Snowflake via Snowsight (l'interface web), la premiere etape est de creer votre espace de travail. Voici la hierarchie a comprendre :

AccountDatabaseSchemaTables / Views / Stages

SNOWFLAKE SQL 01_setup_environment.sql
-- ═══ Creer un warehouse de travail ═══
CREATE WAREHOUSE IF NOT EXISTS DEV_WH
    WITH
    WAREHOUSE_SIZE = 'X-SMALL'          -- Le plus petit (1 credit/heure)
    AUTO_SUSPEND = 60                    -- Suspend apres 60 secondes d'inactivite
    AUTO_RESUME = TRUE                   -- Redemarre automatiquement
    INITIALLY_SUSPENDED = TRUE;         -- Ne demarre pas tout de suite

-- ═══ Creer la database ═══
CREATE DATABASE IF NOT EXISTS LEARNING_DB
    COMMENT = 'Database pour apprendre Snowflake';

-- ═══ Utiliser la database ═══
USE DATABASE LEARNING_DB;

-- ═══ Creer des schemas (couches de donnees) ═══
CREATE SCHEMA IF NOT EXISTS RAW
    COMMENT = 'Donnees brutes - zone de landing';

CREATE SCHEMA IF NOT EXISTS STAGING
    COMMENT = 'Donnees nettoyees et transformees';

CREATE SCHEMA IF NOT EXISTS ANALYTICS
    COMMENT = 'Donnees metier prets pour le reporting';
Credits

Le warehouse X-SMALL consomme 1 credit par heure. Avec AUTO_SUSPEND = 60, il s'eteint apres 1 minute d'inactivite. Vous ne payez que quand il execute des requetes.

04. Databases, Schemas et Tables

La hierarchie d'objets dans Snowflake est simple mais importante a maitriser :

Objet Role Analogie
Database Conteneur principal pour organiser vos donnees Un classeur
Schema Sous-dossier a l'interieur d'une database Un onglet du classeur
Table Structure qui contient les donnees en lignes/colonnes Une feuille de calcul
View Requete sauvegardee (pas de stockage) Un raccourci vers une feuille
SNOWFLAKE SQL 02_create_tables.sql
-- Utiliser le bon contexte
USE LEARNING_DB.RAW;
USE WAREHOUSE DEV_WH;

-- ═══ Table des clients ═══
CREATE TABLE IF NOT EXISTS customers (
    customer_id     INT           NOT NULL,
    first_name      VARCHAR(100)  NOT NULL,
    last_name       VARCHAR(100)  NOT NULL,
    email           VARCHAR(255),
    city            VARCHAR(100),
    country         VARCHAR(50)   DEFAULT 'France',
    created_at      TIMESTAMP     DEFAULT CURRENT_TIMESTAMP()
);

-- ═══ Table des commandes ═══
CREATE TABLE IF NOT EXISTS orders (
    order_id        INT           NOT NULL,
    customer_id     INT           NOT NULL,
    product_name    VARCHAR(200),
    quantity        INT,
    unit_price      DECIMAL(10,2),
    order_date      DATE,
    status          VARCHAR(20)   DEFAULT 'pending'
);

-- Verifier les tables creees
SHOW TABLES IN SCHEMA LEARNING_DB.RAW;

05. Virtual Warehouses : la puissance de calcul

Les Virtual Warehouses sont le moteur de Snowflake. Chaque warehouse est un cluster de calcul independant que vous pouvez dimensionner selon vos besoins :

Taille Credits/heure Cas d'usage
X-SMALL 1 Dev, tests, petites requetes
SMALL 2 Requetes moyennes, BI legere
MEDIUM 4 ETL courant, dashboards
LARGE 8 Grosses transformations
X-LARGE + 16+ Chargements massifs, ML
SNOWFLAKE SQL 03_warehouse_management.sql
-- Creer un warehouse dedie a l'ETL
CREATE WAREHOUSE IF NOT EXISTS ETL_WH
    WITH
    WAREHOUSE_SIZE = 'MEDIUM'
    AUTO_SUSPEND = 120
    AUTO_RESUME = TRUE
    COMMENT = 'Warehouse dedie aux pipelines ETL';

-- Redimensionner a la volee (pas de downtime !)
ALTER WAREHOUSE ETL_WH SET WAREHOUSE_SIZE = 'LARGE';

-- Suspendre manuellement pour economiser
ALTER WAREHOUSE ETL_WH SUSPEND;

-- Voir tous vos warehouses
SHOW WAREHOUSES;
Best Practice

Creez des warehouses separes par usage : un pour le dev (X-SMALL), un pour l'ETL (MEDIUM), un pour le reporting (SMALL). Cela permet d'isoler les performances et de controler les couts par equipe.

06. Les Stages : la zone de transit

Un Stage est un emplacement de stockage intermediaire ou vous deposez vos fichiers avant de les charger dans une table. C'est le point d'entree de vos donnees dans Snowflake.

Il existe deux types de stages :

  • Internal Stage : stockage gere par Snowflake (ideal pour debuter)
  • External Stage : pointe vers S3, Azure Blob, ou GCS (pour la production)
SNOWFLAKE SQL 04_stages_and_formats.sql
USE LEARNING_DB.RAW;

-- ═══ Creer un file format pour les CSV ═══
CREATE FILE FORMAT IF NOT EXISTS csv_format
    TYPE = 'CSV'
    FIELD_DELIMITER = ','
    SKIP_HEADER = 1
    NULL_IF = ('', 'NULL', 'null')
    FIELD_OPTIONALLY_ENCLOSED_BY = '"'
    TRIM_SPACE = TRUE;

-- ═══ Creer un file format pour JSON ═══
CREATE FILE FORMAT IF NOT EXISTS json_format
    TYPE = 'JSON'
    STRIP_OUTER_ARRAY = TRUE;

-- ═══ Creer un internal stage ═══
CREATE STAGE IF NOT EXISTS raw_data_stage
    FILE_FORMAT = csv_format
    COMMENT = 'Stage pour les fichiers bruts CSV';

-- ═══ External stage (exemple avec AWS S3) ═══
-- CREATE STAGE IF NOT EXISTS s3_stage
--     URL = 's3://mon-bucket/data/'
--     CREDENTIALS = (AWS_KEY_ID='...' AWS_SECRET_KEY='...')
--     FILE_FORMAT = csv_format;

-- Lister les fichiers dans un stage
LIST @raw_data_stage;

07. Charger des donnees avec COPY INTO

La commande COPY INTO est la methode principale pour charger des donnees dans Snowflake. C'est l'equivalent du INSERT mais optimise pour le chargement en masse de fichiers.

SNOWFLAKE SQL 05_load_data.sql
-- ═══ Etape 1 : Uploader un fichier vers le stage ═══
-- Via Snowsight : cliquez sur le stage > Upload
-- Ou via SnowSQL CLI :
-- PUT file:///chemin/vers/customers.csv @raw_data_stage;

-- ═══ Etape 2 : Charger dans la table ═══
COPY INTO customers
    FROM @raw_data_stage/customers.csv
    FILE_FORMAT = csv_format
    ON_ERROR = 'CONTINUE'              -- Continue malgre les erreurs
    PURGE = TRUE;                        -- Supprime le fichier apres chargement

-- ═══ Verifier le chargement ═══
SELECT COUNT(*) AS total_rows FROM customers;

-- ═══ Voir l'historique des chargements ═══
SELECT *
FROM TABLE(INFORMATION_SCHEMA.LOAD_HISTORY(
    TABLE_NAME => 'CUSTOMERS'
))
ORDER BY LAST_LOAD_TIME DESC
LIMIT 5;
ON_ERROR

CONTINUE ignore les lignes en erreur et charge le reste. ABORT_STATEMENT stoppe tout si une seule ligne echoue (plus strict, recommande en production). Utilisez VALIDATION_MODE pour tester avant de charger.

Charger du JSON (semi-structure)

SNOWFLAKE SQL 06_load_json.sql
-- Table avec une colonne VARIANT pour le JSON
CREATE TABLE IF NOT EXISTS raw_events (
    event_data  VARIANT,
    loaded_at   TIMESTAMP DEFAULT CURRENT_TIMESTAMP()
);

-- Charger le JSON
COPY INTO raw_events (event_data)
    FROM @raw_data_stage/events.json
    FILE_FORMAT = json_format;

-- Interroger les donnees semi-structurees
SELECT
    event_data:user_id::INT AS user_id,
    event_data:event_type::STRING AS event_type,
    event_data:timestamp::TIMESTAMP AS event_time
FROM raw_events
LIMIT 10;

08. Premieres requetes SQL

Snowflake utilise du SQL standard ANSI enrichi de fonctions proprietaires. Si vous connaissez SQL, vous etes deja operationnel. Voici les requetes essentielles :

SNOWFLAKE SQL 07_first_queries.sql
-- ═══ Inserer des donnees de test ═══
INSERT INTO customers (customer_id, first_name, last_name, email, city)
VALUES
    (1, 'Marie',  'Dupont',  'marie@email.com',   'Paris'),
    (2, 'Ousmane','Diallo',  'ousmane@email.com', 'Dakar'),
    (3, 'Sophie', 'Martin',  'sophie@email.com',  'Nantes'),
    (4, 'Amadou', 'Ba',      'amadou@email.com',  'Paris');

INSERT INTO orders (order_id, customer_id, product_name, quantity, unit_price, order_date, status)
VALUES
    (101, 1, 'Laptop Pro',    1, 1299.99, '2026-02-10', 'completed'),
    (102, 2, 'Ecran 27"',     2, 349.00,  '2026-02-15', 'completed'),
    (103, 1, 'Clavier meca',  1, 159.00,  '2026-02-20', 'pending'),
    (104, 3, 'Souris ergo',   1, 89.99,   '2026-02-22', 'completed'),
    (105, 4, 'Laptop Pro',    1, 1299.99, '2026-02-25', 'pending');

-- ═══ Jointure : commandes par client ═══
SELECT
    c.first_name || ' ' || c.last_name AS client,
    c.city,
    COUNT(o.order_id) AS nb_commandes,
    SUM(o.quantity * o.unit_price) AS chiffre_affaires
FROM customers c
JOIN orders o ON c.customer_id = o.customer_id
GROUP BY c.first_name, c.last_name, c.city
ORDER BY chiffre_affaires DESC;

-- ═══ Window function : classement par CA ═══
SELECT
    c.first_name || ' ' || c.last_name AS client,
    SUM(o.quantity * o.unit_price) AS ca,
    RANK() OVER (ORDER BY SUM(o.quantity * o.unit_price) DESC) AS rang
FROM customers c
JOIN orders o ON c.customer_id = o.customer_id
GROUP BY c.first_name, c.last_name;

09. Bonnes pratiques de nommage

Un nommage coherent est essentiel des le debut. Voici les conventions que j'utilise sur mes projets Snowflake :

Objet Convention Exemple
Database PROJET_ENV ECOMMERCE_PROD
Schema COUCHE (Medallion) RAW, STAGING, ANALYTICS
Table prefixe_nom dim_customers, fact_orders
Warehouse USAGE_WH ETL_WH, BI_WH, DEV_WH
Stage source_stage s3_raw_stage, azure_stage
Role EQUIPE_NIVEAU DATA_ENGINEER, ANALYST_READ
Conseil

Snowflake convertit tout en MAJUSCULES par defaut. Si vous voulez preserver la casse, entourez les noms avec des guillemets doubles ("mon_Table"), mais evitez cette pratique : restez en UPPER_CASE pour la coherence.

10. Prochaines etapes

Vous avez maintenant les bases pour demarrer avec Snowflake. Voici la feuille de route pour la suite :

Semaine Objectif Sujets cles
Semaine 1-2 Maitriser les bases SQL, Databases, Tables, Warehouses
Semaine 3-4 Charger des donnees Stages, COPY INTO, Snowpipe, File Formats
Semaine 5-6 Transformer SQL avance, Dynamic Tables, Streams, Tasks
Semaine 7-8 Securiser et optimiser Roles, RBAC, Cost Management, Monitoring

Dans le prochain article de cette serie, nous plongerons dans le chargement de donnees en profondeur : COPY INTO avance, Snowpipe pour l'ingestion en continu, et les patterns de chargement incrementaux.

Si vous avez des questions ou souhaitez echanger, retrouvez-moi sur LinkedIn.

Ce que vous savez faire maintenant

Creer un warehouse, une database et des schemas • Creer des tables • Configurer des stages et file formats • Charger des donnees avec COPY INTO • Ecrire des requetes SQL avec JOIN et Window Functions • Interroger du JSON avec VARIANT.

Sources & References