---
title: "Snowflake et SQL"
url: https://kwanzeo.com/ressources/snowflake-et-sql
date: 2025-06-23
updated: 2026-10-16
---

# Snowflake et SQL

> Les fonctionnalités SQL de Snowflake : requêtes avancées, données semi-structurées, optimisation, UDF, transactions ACID, Time Travel, chargement et gouvernance.

**En résumé :** Snowflake et SQL forment un duo naturel : Snowflake offre une expérience SQL complète. Analystes, ingénieurs et développeurs retrouvent un langage familier, enrichi de fonctionnalités avancées : requêtes structurées, données semi-structurées, optimisation automatique, fonctions personnalisées, transactions ACID, Time Travel, chargement en masse et gouvernance des accès.

*Article publié en juin 2025 : les fonctionnalités décrites sont celles de cette date. Mis à jour en octobre 2026 pour les langages pris en charge (UDF, Snowpark), d'après la documentation de Snowflake.*

## Quelles fonctionnalités de requête avancées ?

- **Common Table Expressions (CTE)** : elles structurent les requêtes complexes de façon lisible et modulaire. On crée des sous-ensembles de données temporaires réutilisables dans la requête principale, ce qui simplifie les analyses imbriquées.
- **Jointures** : Snowflake prend en charge toutes les jointures classiques (`INNER JOIN`, `LEFT JOIN`, `RIGHT JOIN`, `FULL JOIN`) et les traite efficacement sur de grandes tables, y compris pour croiser plusieurs sources de données.
- **Fonctions de fenêtrage (window functions)** : indispensables pour les cumuls, moyennes mobiles et classements, elles exécutent des calculs sur des partitions de données et facilitent les analyses temporelles et agrégées.

## Comment traiter JSON et les données semi-structurées ?

- **Support natif** : Snowflake charge et analyse JSON, Avro, Parquet et ORC sans conversion préalable en format relationnel.
- **Fonctions de manipulation JSON** : `PARSE_JSON` ou `TO_VARIANT` permettent de naviguer dans les données JSON directement en SQL, par exemple pour des données issues d'API ou de journaux applicatifs.
- **Type VARIANT** : il stocke nativement les données semi-structurées et permet de combiner données structurées et semi-structurées dans une même table.

## Comment Snowflake optimise-t-il les requêtes ?

- **Optimiseur de requêtes** : il adapte automatiquement les plans d'exécution aux ressources disponibles et à la complexité de la requête, en tenant compte de la distribution des données et des micro-partitions.
- **Plans d'exécution et supervision** : chaque plan peut être examiné, et des outils de supervision suivent la durée des requêtes et la consommation des ressources de calcul, pour mieux optimiser les charges de travail.

## Fonctions définies par l'utilisateur (UDF et UDTF)

- **UDF** : des fonctions personnalisées écrites en SQL, JavaScript, Python, Java ou Scala. Une entreprise peut par exemple créer une UDF qui calcule un taux de conversion propre à son modèle commercial, puis la réutiliser dans toutes ses requêtes.
- **UDTF** : là où une UDF renvoie une valeur, une UDTF renvoie un ensemble de lignes. Utile pour les transformations à résultats multiples : tables de fréquence, analyse de séries temporelles.

## Transactions et gestion de la concurrence

- **Transactions ACID** (atomicité, cohérence, isolation, durabilité) : les opérations `INSERT`, `UPDATE` et `DELETE` restent fiables même en cas d'erreur ou de conflit.
- **MVCC** (Multi-Version Concurrency Control) : plusieurs utilisateurs lisent et modifient les mêmes données sans conflit ; chaque session accède à une version stable des données.

## Time Travel : interroger le passé

- **Time Travel** : accéder aux versions antérieures des données, pour restaurer une table ou analyser une évolution, par exemple consulter les données telles qu'elles étaient 24 heures ou une semaine plus tôt.
- **Requêtes historiques** : interroger l'état d'une table ou d'une base à un instant passé, un atout pour les audits et l'analyse d'erreurs.

## Importer et exporter des données

- **Chargement en masse** : la commande `COPY INTO` ingère rapidement de gros volumes depuis Amazon S3, Azure Blob Storage ou Google Cloud Storage.
- **Export (unloading)** : la même commande `COPY INTO` exporte des données vers un stockage externe, pour archiver des résultats d'analyse ou partager des données hors de Snowflake.

## Compatibilité avec les langages et outils externes

- **Snowpark** : une interface qui permet aux data scientists et ingénieurs de travailler en Python, Java ou Scala directement dans Snowflake et de construire des pipelines analytiques plus riches (voir [Cortex AI et Snowpark](/ressources/cortex-ai-snowpark)).
- **JDBC et ODBC** : ces connecteurs relient Snowflake aux applications d'analyse et aux environnements de développement SQL courants.

## Gouvernance et sécurité en SQL

- **Contrôle d'accès** : rôles et autorisations se gèrent par des commandes SQL standard, pour une sécurité fine par utilisateur et par équipe.
- **Surveillance et maintenance** : l'audit des requêtes, le suivi de l'activité des utilisateurs et l'analyse des journaux aident à repérer les comportements suspects et renforcent la conformité réglementaire.

## Aller plus loin avec Snowflake

Découvrez aussi [l'écosystème et les intégrations de Snowflake](/ressources/snowflake-integrations-et-ecosysteme). Pour un projet de data platform, consultez [notre page Snowflake](/technologies/snowflake) ou [contactez nos équipes](/contact).

### Snowflake gère-t-il les données semi-structurées en SQL ?

Oui. Snowflake prend en charge nativement JSON, Avro, Parquet et ORC. Le type VARIANT stocke ces données dans une table, et des fonctions comme PARSE_JSON permettent de les manipuler directement en SQL.

### À quoi sert la fonction Time Travel de Snowflake ?

Elle donne accès aux versions antérieures des données : restaurer une table dans un état passé, ou exécuter des requêtes historiques pour un audit ou une analyse d'erreur.
