Cours
Lorsque vous travaillez avec Snowflake, l'une des opérations fondamentales que vous effectuez est l'insertion de données dans les tableaux. L'instruction INSERT INTO
vous permet d'ajouter de nouveaux enregistrements dans un tableau, que ce soit en saisissant manuellement des valeurs, en insérant plusieurs lignes ou en extrayant des données d'autres tableaux.
Dans ce guide, je vous guiderai à travers la syntaxe, les différents cas d'utilisation, les meilleures pratiques et les étapes de dépannage courantes pour utiliser efficacement INSERT INTO
dans Snowflake.
Qu'est-ce que la commande INSERT INTO dans Snowflake ?
Avant d'aborder la syntaxe, nous devons d'abord comprendre l'objectif de INSERT INTO
dans Snowflake et ses différents cas d'utilisation.
L'ajout de données à une base de données est un élément essentiel de la gestion d'une base de données. L'instruction INSERT INTO
dans Snowflake est utilisée pour ajouter de nouvelles lignes de données dans un tableau. Il peut insérer des tableaux individuels, des lignes multiples ou des données en vrac provenant d'un autre tableau. Vous pouvez soit insérer des données en saisissant manuellement chaque valeur d'une ligne particulière ou d'un ensemble de lignes, soit utiliser une instruction SQL pour charger en masse des données à partir d'autres sources de données.
> Bien que INSERT INTO
soit une commande fondamentale, s'assurer que vous comprenez Snowflake et son architecture est un excellent point de départ. Consultezce tutoriel sur Snowflake pour vous familiariser avec les principes de base !
Cas d'utilisation de INSERT INTO
Voici quelques-uns des cas d'utilisation courants de la clause INSERT INTO
.
- Ajout manuel de nouveaux enregistrements à un tableau.
- Insertion en bloc de plusieurs lignes dans une seule requête.
- Transfert de données d'un tableau à un autre.
- Ajout de nouvelles données à un ensemble de données existant.
- Alimentation d'un tableau à partir des résultats d'une requête
SELECT
.
> L'apprentissage de cette clause est grégalement pour les entretiens avec Snowflake!
Syntaxe de INSERT INTO dans Snowflake
Nous entrons maintenant dans la syntaxe proprement dite. Examinons tout d'abord l'utilisation la plus simple de INSERT INTO
: ajouter simplement des données à une ligne en saisissant manuellement les valeurs.
La syntaxe de base de INSERT INTO
est la suivante :
INSERT INTO table_name (column1, column2, column3)
VALUES (value1, value2, value3);
Vous écrivez la clause INSERT INTO
suivie de table_name
, qui est l'endroit où nous insérons les données. Pour préciser l'ordre des données, nous pouvons spécifier les noms des colonnes qui suivent entre parenthèses comme (column1, column2, column3)
. La dernière partie consiste à rédiger le site VALUES (value1, value2, value3)
, qui sera inséré dans les colonnes correspondantes.
Insérer des données sans spécifier le nom des colonnes
Si vous omettez les noms de colonnes, Snowflake suppose que les tableaux sont fournis dans le même ordre que le schéma de la table. En d'autres termes, la première valeur sera supposée correspondre à la première colonne du tableau, et ainsi de suite.
INSERT INTO table_name
VALUES (value1, value2, value3);
Avec cette approche, vous devez vous assurer que les valeurs sont dans le même ordre que les colonnes, sinon vous risquez de rencontrer des problèmes avec les types de données ou la cohérence des données.
Utilisation avancée de INSERT INTO dans Snowflake
Parmi les utilisations les plus avancées de INSERT INTO
, citons l'insertion d'une seule ligne à partir d'un autre tableau, l'insertion de plusieurs lignes ou l'insertion de données assorties de conditions. C'est un moyen utile d'ajouter des données à un tableau ou d'archiver des données dans un tableau séparé.
Utilisation de INSERT INTO avec plusieurs lignes
Au lieu d'insérer une ligne à la fois, vous pouvez insérer plusieurs lignes dans une seule instruction :
INSERT INTO employees (id, name, department)
VALUES
(1, 'Alice', 'HR'),
(2, 'Bob', 'Finance'),
(3, 'Charlie', 'IT');
Cette approche permet de réduire les frais généraux liés à l'exécution des requêtes et d'améliorer les performances. Notez que chaque ligne est entièrement entourée de parenthèses et suivie d'une virgule. Ne pas le faire peut entraîner des erreurs.
Insertion de données provenant d'un autre tableau
Pour copier des données d'un tableau à un autre, utilisez INSERT INTO
avec une instruction SELECT
:
INSERT INTO target_table (column1, column2)
SELECT
column1,
column2
FROM source_table ;
Cette fonction est utile pour archiver des données, les transformer avant de les insérer ou ajouter des enregistrements filtrés. Si les données source sont dans le même ordre de colonne que la cible, vous pouvez omettre de nommer les colonnes à côté de target_table
.
Insertions conditionnelles
Vous pouvez insérer des données en fonction d'une condition dans votre déclaration SELECT
, de sorte que vous ne copiez pas un tableau entier.
INSERT INTO high_salary_employees (id, name, salary)
SELECT
id,
name,
salary
FROM employees
WHERE salary > 100000;
Cela permet de s'assurer que seuls les salariés remplissant la condition sont insérés dans le nouveau tableau. Cela permet de préserver l'intégrité des données et de réduire les frais de stockage et de calcul.
Meilleures pratiques pour l'utilisation de INSERT INTO dans Snowflake
Voici quelques bonnes pratiques lors de l'utilisation de INSERT INTO
dans Snowflake. Il s'agit notamment d'utiliser des instructions plus efficaces telles que MERGE
et de valider les données avant de les insérer.
Utilisation de MERGE au lieu d'INSERT INTO pour les insertions ultérieures
Si vous devez insérer de nouveaux enregistrements mais mettre à jour des enregistrements existants, MERGE
est une meilleure option car il peut faire correspondre des données existantes.
Il recherche les tableaux dont les lignes actuelles répondent à un certain critère (par exemple, un ID de salarié existant) et peut mettre à jour des valeurs spécifiques dans le tableau cible à l'aide d'un tableau source. S'il n'y a pas de correspondance, il insère les nouvelles données. Il s'agit d'un concept connu sous le nom de "upsert" (mise à jour et insertion).
Vous trouverez ci-dessous un exemple d'utilisation de MERGE
:
MERGE INTO target_table AS t
USING source_table AS s
ON t.id = s.id
WHEN MATCHED THEN
UPDATE SET t.salary = s.salary
WHEN NOT MATCHED THEN
INSERT (id, name, salary) VALUES (s.id, s.name, s.salary);
> La déclaration MERGE
devient rapidement une procédure standard et fait partie intégrante des certifications Snowflake.e partie intégrante des certifications Snowflake.
Insertions de lots et performance
Pour améliorer les performances lors de l'insertion de grands ensembles de données, essayez d'effectuer des insertions par lots. Cela permet de réduire les frais généraux en évitant d'établir de nouvelles connexions à chaque chargement et d'améliorer les performances globales. Voici quelques conseils pour l'insertion par lots :
- Utilisez les insertions en bloc au lieu d'insérer ligne par ligne.
- Utilisez
COPY INTO
lorsque vous chargez des données volumineuses à partir de sources externes. Ceci est utile lorsque vous vous connectez à quelque chose comme S3. - Évitez d'insérer des données dans les boucles des scripts ; le traitement par lots est plus efficace. Terminez donc la boucle, stockez les données dans une source de données unique, puis chargez l'ensemble de la source de données en une seule fois.
Validation des données avant insertion
Avant d'insérer des données, validez-les. Si vos données ne sont pas validées, cela peut entraîner de nombreux problèmes, voire un échec pur et simple. Réfléchissez à la manière dont les données pourraient être utilisées en aval et à la forme que devraient prendre vos données insérées. Voici quelques points essentiels à surveiller :
- Les types de données correspondent aux définitions des colonnes.
- Les champs obligatoires ne sont pas nuls.
- Pas de clés primaires en double ni de violation de la contrainte d'unicité.
Gestion des erreurs avec INSERT INTO dans Snowflake
Comme indiqué précédemment, il peut arriver qu'une erreur se produise lors de l'insertion de données. Voici quelques conseils sur la manière de traiter les erreurs courantes.
Traitement des doubles de clés
Snowflake lui-même n'applique pas nécessairement les contraintes d'unicité, ce qui signifie qu'il est possible d'insérer des données en double.
Si vous êtes préoccupé par la duplication des clés, il peut être préférable d'envisager de la traiter avec MERGE
ou ON CONFLICT
(s'il est pris en charge). Enfin, vous pouvez également ajouter une condition à votre insertion en utilisant WHERE
pour exclure tout ce qui existe dans le tableau cible.
INSERT INTO employees (id, name)
SELECT id, name FROM new_employees
WHERE id NOT IN (SELECT id FROM employees);
Traitement des valeurs NULL
Veillez à ce que les colonnes nullables autorisent les valeurs NULL ou fournissent des valeurs par défaut. Snowflake applique toutes les contraintes de colonne NOT NULL, donc si vous avez des données NULL dans une colonne avec cette contrainte, votre insertion échouera. La chose la plus importante ici est de comprendre vos données, où les NULL sont autorisés à exister, et où ils ne le sont pas.
Résolution des problèmes courants avec INSERT INTO
D'autres problèmes peuvent se résumer à des types de données ou à des questions de permissions. Nous verrons brièvement comment traiter ces questions.
Inadéquation des types de données
Des erreurs se produisent lors de l'insertion d'une valeur d'un type de données incorrect. Vous pouvez parfois y remédier en utilisant le type-casting de vos données, mais cela peut conduire à des NULL. Pour vous assurer que les données insérées sont les mêmes que celles de la cible, vous pouvez essayer de consulter le site information_schema
(où vous avez des droits) et d'évaluer votre schéma de cette manière :
SELECT column_name,
data_type
FROM information_schema.columns
WHERE table_name = 'employees';
Problèmes de permissions
Si vous recevez une erreur d'autorisation, vérifiez les rôles et les privilèges de l'utilisateur :
SHOW GRANTS TO USER current_user;
Si vous n'avez pas l'autorisation d'utiliser INSERT
, vérifiez auprès de votre responsable, de votre service informatique ou du propriétaire de l'ensemble de données. Si vous êtes en mesure de vous accorder des permissions, utilisez le code suivant :
GRANT INSERT ON TABLE employees TO user_name;
Conclusion
La commande INSERT INTO de Snowflake est un outil puissant pour ajouter efficacement des données aux tableaux. Qu'il s'agisse d'insérer des tableaux individuels, des données en masse ou de copier à partir d'un autre tableau, la compréhension de sa syntaxe et des meilleures pratiques garantit l'intégrité des données et les performances. Vous pouvez maintenir une base de données Snowflake robuste et efficace en gérant les erreurs, en validant les données et en optimisant les insertions.
Pour en savoir plus sur Snowflake, je vous recommande de consulter les cours suivants :
FAQ
Quelle est la différence entre INSERT INTO et COPY INTO dans Snowflake ?
INSERT INTO
est utilisé pour insérer des lignes de données spécifiques, tandis que COPY INTO
est optimisé pour le chargement en masse de grands ensembles de données à partir de sources externes telles que AWS S3 ou Azure Blob Storage.
INSERT INTO supporte-t-il les transactions dans Snowflake ?
Oui, Snowflake prend en charge les transactions, vous pouvez donc utiliser BEGIN
, COMMIT
, et ROLLBACK
pour garantir l'intégrité des données lors de l'insertion de données.
Quelles sont les meilleures pratiques en matière de performance lors de l'insertion de grandes quantités de données ?
Utilisez des insertions par lots au lieu d'insérer ligne par ligne, exploitez COPY INTO
pour les chargements en masse et évitez les index inutiles qui peuvent ralentir les performances d'insertion.
Puis-je INSERER DANS une vue sécurisée dans Snowflake ?
Non. Les vues, y compris les vues sécurisées, sont des tableaux virtuels sur lesquels on ne peut pas écrire directement. Vous devez insérer dans le tableau de base sous-jacent ou utiliser un tableau transitoire, puis recréer ou actualiser la vue.
Comment insérer des données JSON dans une colonne VARIANT ?
Mettez le JSON entre guillemets simples et convertissez-le en VARIANT
, par exemple INSERT INTO t (payload) VALUES (PARSE_JSON('{\"key\":\"value\"}'));
. Snowflake préserve automatiquement le format semi-structuré en vue d'une interrogation ultérieure.
Quel est le moyen le plus rapide d'annuler un INSERT INTO accidentel ?
Tirez parti du voyage dans le temps pour restaurer le tableau à un point antérieur à l'insertion : CREATE OR REPLACE TABLE my_table AS SELECT * FROM my_table AT (TIMESTAMP => '2025-06-17 09:00:00');
. Cela permet d'éviter les déclarations manuelles DELETE et de préserver le regroupement.
INSERT INTO crée-t-il automatiquement des micro-partitions ?
Oui. Chaque opération DML (y compris les insertions) déclenche le moteur de micropartitionnement de Snowflake, qui organise les données en vue de leur élagage et de leur compression. Vous n'avez pas besoin de gérer manuellement les partitions.
Quel est l'impact du clustering sur les performances INSERT ?
Les clés de regroupement permettent d'accélérer les requêtes, mais ajoutent des frais généraux aux écritures. Les insertions fréquentes dans un tableau fortement clusterisé peuvent être plus lentes. Choisissez donc les clés de clustering avec soin et reclusterisez pendant les heures creuses si possible.
Puis-je utiliser INSERT INTO avec Snowpipe ?
Indirectement. Snowpipe ingère les fichiers dans un tableau de préparation ; vous pouvez ensuite INSERT INTO
tableaux analytiques après les transformations. Pour un chargement continu, combinez le Snowpipe avec des flux et des tâches au lieu d'inserts manuels.
Combien de données puis-je insérer dans une seule déclaration ?
Snowflake prend en charge des opérations très volumineuses INSERT INTO … SELECT
opérations très volumineuses (plusieurs téraoctets en pratique), car il divise le travail en micro-lots. La principale limite est la taille de l'entrepôt et les paramètres de temporisation.
Je suis un data scientist avec de l'expérience dans l'analyse spatiale, l'apprentissage automatique et les pipelines de données. J'ai travaillé avec GCP, Hadoop, Hive, Snowflake, Airflow et d'autres processus d'ingénierie et de science des données.