Didacticiel : Chargement en masse à partir d’un système de fichiers local à l’aide de COPY

Ce tutoriel décrit comment charger dans une table des données provenant de fichiers de votre système de fichiers local.

Introduction

Dans ce tutoriel, vous apprendrez à :

  • Créez des objets de format de fichier nommés qui décrivent vos fichiers de données.

  • Créer des objets préparés nommés.

  • Téléchargez vos données vers les zones de préparation internes.

  • Chargez vos données dans des tables.

  • Résoudre les erreurs dans vos fichiers de données.

Ce tutoriel explique comment charger les données CSV et JSON à l’aide de SnowSQL.

Conditions préalables

Le tutoriel suppose les éléments suivants :

  • Vous disposez d’un compte Snowflake et d’un utilisateur avec un rôle qui accorde les privilèges nécessaires pour créer une base de données, des tables et des objets d’entrepôt virtuel.

  • Vous avez installé SnowSQL.

Le tutoriel Snowflake en 20 minutes fournit les instructions étape par étape nécessaires pour répondre à ces exigences.

En outre, vous devez effectuer les opérations suivantes avant de commencer le tutoriel :

  • Téléchargez les fichiers d’exemple fournis pour cet exercice.

  • Créez une base de données, des tables et un entrepôt virtuel pour ce tutoriel. Ce sont les objets Snowflake de base nécessaires pour la plupart des activités Snowflake.

Téléchargement des fichiers de données d’exemple

Pour ce tutoriel, vous devez télécharger les fichiers de données d’exemple fournis par Snowflake.

Pour télécharger et décompresser les fichiers de données d’exemple :

  1. Cliquez avec le bouton droit de la souris sur le nom du fichier d’archive, data-load-internal.zip et enregistrez le lien/fichier dans votre système de fichiers local.

  2. Décompressez les fichiers d’exemple. Le tutoriel suppose que vous avez décompressé les fichiers dans les répertoires suivants :

  • Linux/macOS : /tmp/load

  • Windows : C:\tempload

Ces fichiers de données comprennent des données de contact d’exemple dans les formats suivants :

  • Des fichiers CSV qui contiennent une ligne d’en-tête et cinq enregistrements. Le délimiteur de champ est le caractère de barre verticale (|). L’exemple suivant montre une ligne d’en-tête et un enregistrement :

    ID|lastname|firstname|company|email|workphone|cellphone|streetaddress|city|postalcode
    6|Reed|Moses|Neque Corporation|eget.lacus@facilisis.com|1-449-871-0780|1-454-964-5318|Ap #225-4351 Dolor Ave|Titagarh|62631
    
    Copy
  • Un seul fichier au format JSON qui contient un tableau et trois objets. Voici un exemple de tableau contenant l’un de ces objets :

    [
     {
       "customer": {
         "address": "509 Kings Hwy, Comptche, Missouri, 4848",
         "phone": "+1 (999) 407-2274",
         "email": "blankenship.patrick@orbin.ca",
         "company": "ORBIN",
         "name": {
           "last": "Patrick",
           "first": "Blankenship"
         },
         "_id": "5730864df388f1d653e37e6f"
       }
     },
    ]
    
    Copy

Création de la base de données, des tables et de l’entrepôt

Exécutez les instructions suivantes pour créer une base de données, deux tables (pour les données CSV et JSON) et un entrepôt virtuel nécessaires pour ce tutoriel. Après avoir terminé le tutoriel, vous pouvez détruire ces objets.

-- Create a database. A database automatically includes a schema named 'public'.

CREATE OR REPLACE DATABASE mydatabase;

/* Create target tables for CSV and JSON data. The tables are temporary, meaning they persist only for the duration of the user session and are not visible to other users. */

CREATE OR REPLACE TEMPORARY TABLE mycsvtable (
  id INTEGER,
  last_name STRING,
  first_name STRING,
  company STRING,
  email STRING,
  workphone STRING,
  cellphone STRING,
  streetaddress STRING,
  city STRING,
  postalcode STRING);

CREATE OR REPLACE TEMPORARY TABLE myjsontable (
  json_data VARIANT);

-- Create a warehouse

CREATE OR REPLACE WAREHOUSE mywarehouse WITH
  WAREHOUSE_SIZE='X-SMALL'
  AUTO_SUSPEND = 120
  AUTO_RESUME = TRUE
  INITIALLY_SUSPENDED=TRUE;
Copy

L’instruction CREATE WAREHOUSE configure l’entrepôt pour qu’il soit suspendu initialement. L’instruction définit également AUTO_RESUME = true, qui démarre l’entrepôt automatiquement lorsque vous exécutez des instructions SQL qui nécessitent des ressources de calcul.

Création d’objets de format de fichier

Lorsque vous chargez des données d’un fichier dans une table, vous devez décrire le format du fichier et spécifier comment les données du fichier doivent être interprétées et traitées. Par exemple, si vous chargez des données délimitées par des barres verticales à partir d’un fichier CSV, vous devez spécifier que le fichier utilise le format CSV avec des symboles de barre verticale comme délimiteurs.

Lorsque vous exécutez la commande COPY INTO <table> vous spécifiez ces informations de format. Vous pouvez soit spécifier ces informations sous forme d’options dans la commande (par exemple TYPE = CSV, FIELD_DELIMITER = '|', etc.), soit spécifier un objet de format de fichier qui contient ces informations de format. Vous pouvez créer un objet de format de fichier nommé à l’aide de la commande CREATE FILE FORMAT.

Dans cette étape, vous créez des objets de format de fichier décrivant le format des données CSV et JSON d’exemple fournies pour ce tutoriel.

Création d’un objet de format de fichier pour des données CSV

Exécutez la commande CREATE FILE FORMAT pour créer le format de fichier mycsvformat.

CREATE OR REPLACE FILE FORMAT mycsvformat
  TYPE = 'CSV'
  FIELD_DELIMITER = '|'
  SKIP_HEADER = 1;
Copy

Où :

  • TYPE = 'CSV' indique le type de format du fichier source. CSV est le type de format de fichier par défaut.

  • FIELD_DELIMITER = '|' indique que le caractère « | » est un séparateur de champ. La valeur par défaut est « , ».

  • SKIP_HEADER = 1 indique que le fichier source comprend une ligne d’en-tête. La commande COPY ignore ces lignes d’en-tête lors du chargement des données. La valeur par défaut est 0.

Création d’un objet de format de fichier pour des données JSON

Exécutez la commande CREATE FILE FORMAT pour créer le format de fichier myjsonformat.

CREATE OR REPLACE FILE FORMAT myjsonformat
  TYPE = 'JSON'
  STRIP_OUTER_ARRAY = TRUE;
Copy

Où :

  • TYPE = 'JSON' indique le type de format du fichier source.

  • STRIP_OUTER_ARRAY = TRUE indique à la commande COPY d’exclure les crochets ([]) lors du chargement de données dans la table.

Création d’objets de zone de préparation

Une zone de préparation indique où les fichiers de données sont stockés (c’est-à-dire « préparés ») afin que les données contenues dans les fichiers puissent être chargées dans une table. Une zone de préparation interne nommée est un emplacement de stockage Cloud géré par Snowflake.

La création d’une zone de préparation nommée est utile si vous souhaitez que plusieurs utilisateurs ou processus puissent charger des fichiers. Si vous prévoyez de charger les fichiers de données en zone de préparation juste vous, ou juste que dans une seule table, alors vous préférerez peut-être utiliser votre zone de préparation d’utilisateur ou la zone de préparation de table. Pour plus d’informations, voir Chargement en masse à partir d’un système de fichiers local.

Dans cette étape, vous créez des zones de préparation nommées pour les différents types de fichiers de données d’exemple.

Création d’une zone de préparation pour des fichiers de données CSV

Exécutez CREATE STAGE pour créer la zone de préparation my_csv_stage :

CREATE OR REPLACE STAGE my_csv_stage
  FILE_FORMAT = mycsvformat;
Copy

Notez que si vous spécifiez l’option FILE_FORMAT lors de la création de la zone de préparation, il n’est pas nécessaire de spécifier la même option FILE_FORMAT dans la commande COPY utilisée pour charger des données depuis la zone de préparation.

Création d’une zone de préparation pour des fichiers de données JSON

Exécutez CREATE STAGE pour créer la zone de préparation my_json_stage :

CREATE OR REPLACE STAGE my_json_stage
  FILE_FORMAT = myjsonformat;
Copy

Mise en zone de préparation des fichiers de données

Exécutez PUT pour charger (mettre en zone de préparation) des fichiers de données d’exemple depuis votre système de fichiers local vers les zones de préparation que vous avez créées dans Didacticiel : Chargement en masse à partir d’un système de fichiers local à l’aide de COPY.

Mise en zone de préparation des fichiers de données d’exemple CSV

Exécutez la commande PUT pour charger les fichiers CSV depuis votre système de fichiers local.

  • Linux ou macOS

    PUT file:///tmp/load/contacts*.csv @my_csv_stage AUTO_COMPRESS=TRUE;
    
    Copy
  • Windows

    PUT file://C:\temp\load\contacts*.csv @my_csv_stage AUTO_COMPRESS=TRUE;
    
    Copy

Regardons la commande de plus près :

  • file://<file-path>[/]contacts*.csv spécifie le chemin complet du répertoire et les noms des fichiers sur votre machine locale vers la zone de préparation. Notez que les caractères génériques du système de fichiers sont autorisés.

  • @my_csv_stage est le nom de la zone de préparation où les données seront placées.

  • auto_compress=true; indique à la commande de compresser les données lors de la mise en zone de préparation. Il s’agit également de la valeur par défaut.

La commande renvoie le résultat suivant, montrant les fichiers en zone de préparation :

+---------------+------------------+-------------+-------------+--------------------+--------------------+----------+---------+
| source        | target           | source_size | target_size | source_compression | target_compression | status   | message |
|---------------+------------------+-------------+-------------+--------------------+--------------------+----------+---------|
| contacts1.csv | contacts1.csv.gz |         694 |         506 | NONE               | GZIP               | UPLOADED |         |
| contacts2.csv | contacts2.csv.gz |         763 |         565 | NONE               | GZIP               | UPLOADED |         |
| contacts3.csv | contacts3.csv.gz |         771 |         567 | NONE               | GZIP               | UPLOADED |         |
| contacts4.csv | contacts4.csv.gz |         750 |         561 | NONE               | GZIP               | UPLOADED |         |
| contacts5.csv | contacts5.csv.gz |         887 |         621 | NONE               | GZIP               | UPLOADED |         |
+---------------+------------------+-------------+-------------+--------------------+--------------------+----------+---------+
Copy

Mise en zone de préparation des fichiers de données d’exemple JSON

Exécutez la commande PUT pour charger le fichier JSON de votre système de fichiers local vers la zone de préparation nommée.

  • Linux ou macOS

    PUT file:///tmp/load/contacts.json @my_json_stage AUTO_COMPRESS=TRUE;
    
    Copy
  • Windows

    PUT file://C:\temp\load\contacts.json @my_json_stage AUTO_COMPRESS=TRUE;
    
    Copy

La commande renvoie le résultat suivant, montrant les fichiers en zone de préparation :

+---------------+------------------+-------------+-------------+--------------------+--------------------+----------+---------+
| source        | target           | source_size | target_size | source_compression | target_compression | status   | message |
|---------------+------------------+-------------+-------------+--------------------+--------------------+----------+---------|
| contacts.json | contacts.json.gz |         965 |         446 | NONE               | GZIP               | UPLOADED |         |
+---------------+------------------+-------------+-------------+--------------------+--------------------+----------+---------+
Copy

Liste des fichiers en zone de préparation (facultatif)

Vous pouvez répertorier les fichiers en zone de préparation en utilisant la commande LIST.

CSV

LIST @my_csv_stage;
Copy

Snowflake affiche une liste de vos fichiers préparés.

JSON

LIST @my_json_stage;
Copy

Snowflake affiche une liste de vos fichiers préparés.

Copie de données dans les tables cibles

Exécutez COPY INTO <table> pour charger les données en zone de préparation dans les tables cibles.

CSV

Pour charger les données des fichiers CSV d’exemple :

  1. Commencez par charger les données d’un des fichiers (contacts1.csv.gz). Exécutez ce qui suit :

    COPY INTO mycsvtable
      FROM @my_csv_stage/contacts1.csv.gz
      FILE_FORMAT = (FORMAT_NAME = mycsvformat)
      ON_ERROR = 'skip_file';
    
    Copy

    Où :

    • La clause FROM spécifie l’emplacement du fichier de données en zone de préparation (nom de la zone de préparation suivi du nom du fichier).

    • La clause ON_ERROR spécifie ce qu’il faut faire lorsque la commande COPY rencontre des erreurs dans les fichiers. Par défaut, la commande arrête le chargement des données lorsque la première erreur est rencontrée. Cependant, nous lui avons demandé d’ignorer tout fichier contenant une erreur et de passer au chargement du fichier suivant. Notez qu’il ne s’agit que d’une illustration, aucun des fichiers de ce tutoriel ne contient d’erreurs.

    La commande COPY renvoie un résultat indiquant le nom du fichier copié et les informations connexes :

    +-----------------------------+--------+-------------+-------------+-------------+-------------+-------------+------------------+-----------------------+-------------------------+
    | file                        | status | rows_parsed | rows_loaded | error_limit | errors_seen | first_error | first_error_line | first_error_character | first_error_column_name |
    |-----------------------------+--------+-------------+-------------+-------------+-------------+-------------+------------------+-----------------------+-------------------------|
    | mycsvtable/contacts1.csv.gz | LOADED |           5 |           5 |           1 |           0 |        NULL |             NULL |                  NULL |                    NULL |
    +-----------------------------+--------+-------------+-------------+-------------+-------------+-------------+------------------+-----------------------+-------------------------+
    
    Copy
  2. Chargez le reste des fichiers en zone de préparation dans la table mycsvtable.

    L’exemple suivant utilise le filtrage par critères spéciaux pour charger les données des fichiers correspondant à l’expression régulière .*contacts[1-5].csv.gz à l’intérieur de la table mycsvtable .

    COPY INTO mycsvtable
      FROM @my_csv_stage
      FILE_FORMAT = (FORMAT_NAME = mycsvformat)
      PATTERN='.*contacts[1-5].csv.gz'
      ON_ERROR = 'skip_file';
    
    Copy

    Où la clause PATTERN spécifie que la commande doit charger les données à partir des noms de fichiers correspondant à cette expression régulière (.*employees0[1-5].csv.gz).

    La commande COPY renvoie un résultat indiquant le nom du fichier copié et les informations connexes :

    +-----------------------------+-------------+-------------+-------------+-------------+-------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------+------------------+-----------------------+-------------------------+
    | file                        | status      | rows_parsed | rows_loaded | error_limit | errors_seen | first_error                                                                                                                                                          | first_error_line | first_error_character | first_error_column_name |
    |-----------------------------+-------------+-------------+-------------+-------------+-------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------+------------------+-----------------------+-------------------------|
    | mycsvtable/contacts2.csv.gz | LOADED      |           5 |           5 |           1 |           0 | NULL                                                                                                                                                                 |             NULL |                  NULL | NULL                    |
    | mycsvtable/contacts3.csv.gz | LOAD_FAILED |           5 |           0 |           1 |           2 | Number of columns in file (11) does not match that of the corresponding table (10), use file format option error_on_column_count_mismatch=false to ignore this error |                3 |                     1 | "MYCSVTABLE"[11]        |
    | mycsvtable/contacts4.csv.gz | LOADED      |           5 |           5 |           1 |           0 | NULL                                                                                                                                                                 |             NULL |                  NULL | NULL                    |
    | mycsvtable/contacts5.csv.gz | LOADED      |           6 |           6 |           1 |           0 | NULL                                                                                                                                                                 |             NULL |                  NULL | NULL                    |
    +-----------------------------+-------------+-------------+-------------+-------------+-------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------+------------------+-----------------------+-------------------------+
    
    Copy

    Notez les points suivants dans le résultat :

    • Les données de contacts1.csv.gz sont ignorées parce que nous avons déjà chargé les données avec succès.

    • Les données de ces fichiers ont été chargées avec succès : contacts2.csv.gz, contacts4.csv.gz, et contacts5.csv.gz.

    • Les données dans contacts3.csv.gz sont ignorées en raison de 2 erreurs de données. L’étape suivante de ce tutoriel traite de la validation et de la correction des erreurs.

JSON

Chargez le fichier de données en zone de préparation contacts.json.gz dans la table myjsontable.

COPY INTO myjsontable
  FROM @my_json_stage/contacts.json.gz
  FILE_FORMAT = (FORMAT_NAME = myjsonformat)
  ON_ERROR = 'skip_file';
Copy

La commande COPY renvoie un résultat indiquant le nom du fichier copié et les informations connexes :

+------------------------------+--------+-------------+-------------+-------------+-------------+-------------+------------------+-----------------------+-------------------------+
| file                         | status | rows_parsed | rows_loaded | error_limit | errors_seen | first_error | first_error_line | first_error_character | first_error_column_name |
|------------------------------+--------+-------------+-------------+-------------+-------------+-------------+------------------+-----------------------+-------------------------|
| myjsontable/contacts.json.gz | LOADED |           3 |           3 |           1 |           0 |        NULL |             NULL |                  NULL |                    NULL |
+------------------------------+--------+-------------+-------------+-------------+-------------+-------------+------------------+-----------------------+-------------------------+
Copy

Résolution des erreurs de chargement de données

Dans l’étape précédente, la commande COPY INTO a ignoré le chargement d’un des fichiers lorsqu’elle a rencontré la première erreur. Vous devez trouver toutes les erreurs et les corriger. Dans cette étape, vous utilisez la fonction VALIDATE pour valider l’exécution précédente de la commande COPY INTO et retourner toutes les erreurs.

Validation des fichiers de données d’exemple et récupération des erreurs éventuelles

Vous avez d’abord besoin de l’ID de requête associé à la commande COPY INTO que vous avez exécutée précédemment. Vous appelez ensuite la fonction VALIDATE en spécifiant l’ID de requête.

  1. Récupérez la requête ID.

    1. Connectez-vous à Snowsight.

    2. Assurez-vous que le rôle dans Snowsight est le même que celui que vous utilisez dans SnowSQL pour exécuter les instructions SQL de ce didacticiel.

    3. Sélectionnez Monitoring » Query History.

    4. Sélectionnez la ligne correspondant à la commande COPY INTO spécifique pour ouvrir le volet d’informations sur la requête.

    5. Copiez la valeur Query ID.

  2. Validez l’exécution de la commande COPY INTO, représentée par l’ID de requête et enregistrez les erreurs dans une nouvelle table nommée save_copy_errors.

    1. Dans SnowSQL, exécutez la commande suivante : Remplacez query_id par la valeur Query ID.

      CREATE OR REPLACE TABLE save_copy_errors AS SELECT * FROM TABLE(VALIDATE(mycsvtable, JOB_ID=>'<query_id>'));
      
      Copy
    2. Interroger la table save_copy_errors.

      SELECT * FROM SAVE_COPY_ERRORS;
      
      Copy

      La requête renvoie les résultats suivants :

      +----------------------------------------------------------------------------------------------------------------------------------------------------------------------+-------------------------------------+------+-----------+-------------+----------+--------+-----------+-------------------------------+------------+----------------+-----------------------------------------------------------------------------------------------------------------------------------------------------+
      | ERROR                                                                                                                                                                | FILE                                | LINE | CHARACTER | BYTE_OFFSET | CATEGORY |   CODE | SQL_STATE | COLUMN_NAME                   | ROW_NUMBER | ROW_START_LINE | REJECTED_RECORD                                                                                                                                     |
      |----------------------------------------------------------------------------------------------------------------------------------------------------------------------+-------------------------------------+------+-----------+-------------+----------+--------+-----------+-------------------------------+------------+----------------+-----------------------------------------------------------------------------------------------------------------------------------------------------|
      | Number of columns in file (11) does not match that of the corresponding table (10), use file format option error_on_column_count_mismatch=false to ignore this error | mycsvtable/contacts3.csv.gz         |    3 |         1 |         234 | parsing  | 100080 |     22000 | "MYCSVTABLE"[11]              |          1 |              2 | 11|Ishmael|Burnett|Dolor Elit Pellentesque Ltd|vitae.erat@necmollisvitae.ca|1-872|600-7301|1-513-592-6779|P.O. Box 975, 553 Odio, Road|Hulste|63345 |
      | Field delimiter '|' found while expecting record delimiter '\n'                                                                                                      | mycsvtable/contacts3.csv.gz         |    5 |       125 |         625 | parsing  | 100016 |     22000 | "MYCSVTABLE"["POSTALCODE":10] |          4 |              5 | 14|Sophia|Christian|Turpis Ltd|lectus.pede@non.ca|1-962-503-3253|1-157-|850-3602|P.O. Box 824, 7971 Sagittis Rd.|Chattanooga|56188                  |
      +----------------------------------------------------------------------------------------------------------------------------------------------------------------------+-------------------------------------+------+-----------+-------------+----------+--------+-----------+-------------------------------+------------+----------------+-----------------------------------------------------------------------------------------------------------------------------------------------------+
      
      Copy

Le résultat montre deux erreurs de données dans mycsvtable/contacts3.csv.gz :

  • Number of columns in file (11) does not match that of the corresponding table (10)

    Dans la ligne 1, un trait d’union a été remplacé par erreur par le caractère de barre verticale (|), le délimiteur de fichier de données, créant ainsi une colonne supplémentaire dans l’enregistrement.

    Exemple 1 d'erreur de données dans un enregistrement
  • Field delimiter '|' found while expecting record delimiter 'n'

    Dans la ligne 5, un caractère de barre verticale supplémentaire (|) a été introduit après un trait d’union, ce qui a conduit à un problème d’enregistrement.

    Exemple 1 d'erreur de données dans un enregistrement

Correction des erreurs et rechargement des fichiers de données

  1. Corrigez les erreurs dans les enregistrements manuellement dans le fichier contacts3.csv dans votre environnement local.

  2. Utilisez la commande PUT pour charger le fichier de données modifié vers la zone de préparation. Le fichier modifié écrase le fichier préparé existant.

    • Linux ou macOS :

      PUT file:///tmp/load/contacts3.csv @my_csv_stage AUTO_COMPRESS=TRUE OVERWRITE=TRUE;
      
      Copy
    • Windows :

      PUT file://C:\temp\load\contacts3.csv @my_csv_stage AUTO_COMPRESS=TRUE OVERWRITE=TRUE;
      
      Copy
  3. Copiez les données des fichiers en zone de préparation dans les tables.

    COPY INTO mycsvtable
      FROM @my_csv_stage/contacts3.csv.gz
      FILE_FORMAT = (FORMAT_NAME = mycsvformat)
      ON_ERROR = 'skip_file';
    
    Copy

Snowflake renvoie les résultats suivants indiquant que les données de contacts3.csv.gz sont chargées avec succès.

+-----------------------------+--------+-------------+-------------+-------------+-------------+-------------+------------------+-----------------------+-------------------------+
| file                        | status | rows_parsed | rows_loaded | error_limit | errors_seen | first_error | first_error_line | first_error_character | first_error_column_name |
|-----------------------------+--------+-------------+-------------+-------------+-------------+-------------+------------------+-----------------------+-------------------------|
| mycsvtable/contacts3.csv.gz | LOADED |           5 |           5 |           1 |           0 |        NULL |             NULL |                  NULL |                    NULL |
+-----------------------------+--------+-------------+-------------+-------------+-------------+-------------+------------------+-----------------------+-------------------------+
Copy

Vérification des données chargées

Exécutez une requête SELECT pour vérifier que les données ont été chargées avec succès.

CSV

SELECT * FROM mycsvtable;
Copy

La requête renvoie les résultats suivants :

+----+-----------+------------+----------------------------------+----------------------------------------+----------------+----------------+---------------------------------+------------------+------------+
| ID | LAST_NAME | FIRST_NAME | COMPANY                          | EMAIL                                  | WORKPHONE      | CELLPHONE      | STREETADDRESS                   | CITY             | POSTALCODE |
|----+-----------+------------+----------------------------------+----------------------------------------+----------------+----------------+---------------------------------+------------------+------------|
|  6 | Reed      | Moses      | Neque Corporation                | eget.lacus@facilisis.com               | 1-449-871-0780 | 1-454-964-5318 | Ap #225-4351 Dolor Ave          | Titagarh         |      62631 |
|  7 | Audrey    | Franks     | Arcu Eu Limited                  | eu.dui@aceleifendvitae.org             | 1-527-945-8935 | 1-263-127-1173 | Ap #786-9241 Mauris Road        | Bergen           |      81958 |
|  8 | Jakeem    | Erickson   | A Ltd                            | Pellentesque.habitant@liberoProinmi.ca | 1-381-591-9386 | 1-379-391-9490 | 319-1703 Dis Rd.                | Pangnirtung      |      62399 |
|  9 | Xaviera   | Brennan    | Bibendum Ullamcorper Limited     | facilisi.Sed.neque@dictum.edu          | 1-260-757-1919 | 1-211-651-0925 | P.O. Box 146, 8385 Vel Road     | Béziers          |      13082 |
| 10 | Francis   | Ortega     | Vitae Velit Egestas Associates   | egestas.rhoncus.Proin@faucibus.com     | 1-257-584-6487 | 1-211-870-2111 | 733-7191 Neque Rd.              | Chatillon        |      33081 |
| 16 | Aretha    | Sykes      | Lobortis Tellus Justo Foundation | eget@Naminterdumenim.net               | 1-670-849-1866 | 1-283-783-3710 | Ap #979-2481 Dui. Av.           | Thurso           |      66851 |
| 17 | Akeem     | Casey      | Pharetra Quisque Ac Institute    | dictum.eu@magna.edu                    | 1-277-657-0361 | 1-623-630-8848 | Ap #363-6074 Ullamcorper, Rd.   | Idar-Oberstei    |      30848 |
| 18 | Keelie    | Mendez     | Purus In Foundation              | Nulla.eu.neque@Aeneanegetmetus.co.uk   | 1-330-370-8231 | 1-301-568-0413 | 3511 Tincidunt Street           | Lanklaar         |      73942 |
| 19 | Lane      | Bishop     | Libero At PC                     | non@dapibusligula.ca                   | 1-340-862-4623 | 1-513-820-9039 | 7459 Pede. Street               | Linkebeek        |      89252 |
| 20 | Michelle  | Dickson    | Ut Limited                       | Duis.dignissim.tempor@cursuset.org     | 1-202-490-0151 | 1-129-553-7398 | 6752 Eros. St.                  | Stornaway        |      61290 |
| 20 | Michelle  | Dickson    | Ut Limited                       | Duis.dignissim.tempor@cursuset.org     | 1-202-490-0151 | 1-129-553-7398 | 6752 Eros. St.                  | Stornaway        |      61290 |
| 21 | Lance     | Harper     | Rutrum Lorem Limited             | Sed.neque@risus.com                    | 1-685-778-6726 | 1-494-188-6168 | 663-7682 Et St.                 | Gisborne         |      73449 |
| 22 | Keely     | Pace       | Eleifend Limited                 | ante.bibendum.ullamcorper@necenim.edu  | 1-312-381-5244 | 1-432-225-9226 | P.O. Box 506, 5233 Aliquam Av.  | Woodlands County |      61213 |
| 23 | Sage      | Leblanc    | Egestas A Consulting             | dapibus@elementum.org                  | 1-630-981-0327 | 1-301-287-0495 | 4463 Lorem Road                 | Woodlands County |      33951 |
| 24 | Marny     | Holt       | Urna Nec Luctus Associates       | ornare@vitaeorci.ca                    | 1-522-364-3947 | 1-460-971-8360 | P.O. Box 311, 4839 Nulla Av.    | Port Coquitlam   |      36733 |
| 25 | Holly     | Park       | Mauris PC                        | Vestibulum.ante@Maecenasliberoest.org  | 1-370-197-9316 | 1-411-413-4602 | P.O. Box 732, 8967 Eu Avenue    | Provost          |      45507 |
|  1 | Imani     | Davidson   | At Ltd                           | nec@sem.net                            | 1-243-889-8106 | 1-730-771-0412 | 369-6531 Molestie St.           | Russell          |      74398 |
|  2 | Kelsie    | Abbott     | Neque Sed Institute              | lacus@pede.net                         | 1-467-506-9933 | 1-441-508-7753 | P.O. Box 548, 1930 Pede. Road   | Campbellton      |      27022 |
|  3 | Hilel     | Durham     | Pede Incorporated                | eu@Craspellentesque.net                | 1-752-108-4210 | 1-391-449-8733 | Ap #180-2360 Nisl. Street       | Etalle           |      84025 |
|  4 | Graiden   | Molina     | Sapien Institute                 | sit@fermentum.net                      | 1-130-156-6666 | 1-269-605-7776 | 8890 A, Rd.                     | Dundee           |      70504 |
|  5 | Karyn     | Howard     | Pede Ac Industries               | sed.hendrerit@ornaretortorat.edu       | 1-109-166-5492 | 1-506-782-5089 | P.O. Box 902, 5398 Et, St.      | Saint-Hilarion   |      26232 |
| 11 | Ishmael   | Burnett    | Dolor Elit Pellentesque Ltd      | vitae.erat@necmollisvitae.ca           | 1-872-600-7301 | 1-513-592-6779 | P.O. Box 975, 553 Odio, Road    | Hulste           |      63345 |
| 12 | Ian       | Fields     | Nulla Magna Malesuada PC         | rutrum.non@condimentumDonec.co.uk      | 1-138-621-8354 | 1-369-126-7068 | P.O. Box 994, 7053 Quisque Ave  | Ostra Vetere     |      90433 |
| 13 | Xanthus   | Acosta     | Tortor Company                   | Nunc.lectus@a.org                      | 1-834-909-8838 | 1-693-411-2633 | 282-7994 Nunc Av.               | Belcarra         |      28890 |
| 14 | Sophia    | Christian  | Turpis Ltd                       | lectus.pede@non.ca                     | 1-962-503-3253 | 1-157-850-3602 | P.O. Box 824, 7971 Sagittis Rd. | Chattanooga      |      56188 |
| 15 | Dorothy   | Watson     | A Sollicitudin Orci Company      | diam.dictum@fermentum.co.uk            | 1-158-596-8622 | 1-402-884-3438 | 3348 Nec Street                 | Qu�bec City      |      63320 |
+----+-----------+------------+----------------------------------+----------------------------------------+----------------+----------------+---------------------------------+------------------+------------+
Copy

JSON

SELECT * FROM myjsontable;
Copy

La requête renvoie les résultats suivants :

+-----------------------------------------------------------------+
| JSON_DATA                                                       |
|-----------------------------------------------------------------|
| {                                                               |
|   "customer": {                                                 |
|     "_id": "5730864df388f1d653e37e6f",                          |
|     "address": "509 Kings Hwy, Comptche, Missouri, 4848",       |
|     "company": "ORBIN",                                         |
|     "email": "blankenship.patrick@orbin.ca",                    |
|     "name": {                                                   |
|       "first": "Blankenship",                                   |
|       "last": "Patrick"                                         |
|     },                                                          |
|     "phone": "+1 (999) 407-2274"                                |
|   }                                                             |
| }                                                               |
| {                                                               |
|   "customer": {                                                 |
|     "_id": "5730864d4d8523c8baa8baf6",                          |
|     "address": "290 Lefferts Avenue, Malott, Delaware, 1575",   |
|     "company": "SNIPS",                                         |
|     "email": "anna.glass@snips.name",                           |
|     "name": {                                                   |
|       "first": "Anna",                                          |
|       "last": "Glass"                                           |
|     },                                                          |
|     "phone": "+1 (958) 411-2876"                                |
|   }                                                             |
| }                                                               |
| {                                                               |
|   "customer": {                                                 |
|     "_id": "5730864e375e08523150fc04",                          |
|     "address": "756 Randolph Street, Omar, Rhode Island, 3310", |
|     "company": "ESCHOIR",                                       |
|     "email": "sparks.ramos@eschoir.co.uk",                      |
|     "name": {                                                   |
|       "first": "Sparks",                                        |
|       "last": "Ramos"                                           |
|     },                                                          |
|     "phone": "+1 (962) 436-2519"                                |
|   }                                                             |
| }                                                               |
+-----------------------------------------------------------------+
Copy

Suppression des fichiers de données correctement copiés

Après avoir vérifié que vous avez bien copié les données de votre zone de préparation dans les tables, vous pouvez supprimer les fichiers de données de la zone de préparation interne en utilisant la commande REMOVE pour un enregistrement sur le stockage de données.

REMOVE @my_csv_stage PATTERN='.*.csv.gz';
Copy

Snowflake renvoie les résultats suivants :

+-------------------------------+---------+
| name                          | result  |
|-------------------------------+---------|
| my_csv_stage/contacts1.csv.gz | removed |
| my_csv_stage/contacts4.csv.gz | removed |
| my_csv_stage/contacts2.csv.gz | removed |
| my_csv_stage/contacts3.csv.gz | removed |
| my_csv_stage/contacts5.csv.gz | removed |
+-------------------------------+---------+
Copy
REMOVE @my_json_stage PATTERN='.*.json.gz';
Copy

Snowflake renvoie les résultats suivants :

+--------------------------------+---------+
| name                           | result  |
|--------------------------------+---------|
| my_json_stage/contacts.json.gz | removed |
+--------------------------------+---------+
Copy

Nettoyage

Bravo, vous avez terminé le tutoriel.

Didacticiel Nettoyage (facultatif)

Exécutez les commandes DROP <objet> suivantes pour remettre votre système dans son état initial avant de commencer le tutoriel :

DROP DATABASE IF EXISTS mydatabase;
DROP WAREHOUSE IF EXISTS mywarehouse;
Copy

Détruire la base de données supprime automatiquement toutes les objets de base de données liés, par exemple les tables.

Autres didacticiels sur le chargement de données