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 :
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.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
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" } }, ]
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;
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;
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;
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;
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;
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;
Windows
PUT file://C:\temp\load\contacts*.csv @my_csv_stage AUTO_COMPRESS=TRUE;
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 | |
+---------------+------------------+-------------+-------------+--------------------+--------------------+----------+---------+
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;
Windows
PUT file://C:\temp\load\contacts.json @my_json_stage AUTO_COMPRESS=TRUE;
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 | |
+---------------+------------------+-------------+-------------+--------------------+--------------------+----------+---------+
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;
Snowflake affiche une liste de vos fichiers préparés.
JSON¶
LIST @my_json_stage;
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 :
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';
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 | +-----------------------------+--------+-------------+-------------+-------------+-------------+-------------+------------------+-----------------------+-------------------------+
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 tablemycsvtable
.COPY INTO mycsvtable FROM @my_csv_stage FILE_FORMAT = (FORMAT_NAME = mycsvformat) PATTERN='.*contacts[1-5].csv.gz' ON_ERROR = 'skip_file';
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 | +-----------------------------+-------------+-------------+-------------+-------------+-------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------+------------------+-----------------------+-------------------------+
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
, etcontacts5.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';
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 |
+------------------------------+--------+-------------+-------------+-------------+-------------+-------------+------------------+-----------------------+-------------------------+
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.
Récupérez la requête ID.
Connectez-vous à Snowsight.
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.
Sélectionnez Monitoring » Query History.
Sélectionnez la ligne correspondant à la commande COPY INTO spécifique pour ouvrir le volet d’informations sur la requête.
Copiez la valeur Query ID.
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
.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>'));
Interroger la table
save_copy_errors
.SELECT * FROM SAVE_COPY_ERRORS;
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 | +----------------------------------------------------------------------------------------------------------------------------------------------------------------------+-------------------------------------+------+-----------+-------------+----------+--------+-----------+-------------------------------+------------+----------------+-----------------------------------------------------------------------------------------------------------------------------------------------------+
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.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.
Correction des erreurs et rechargement des fichiers de données¶
Corrigez les erreurs dans les enregistrements manuellement dans le fichier
contacts3.csv
dans votre environnement local.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;
Windows :
PUT file://C:\temp\load\contacts3.csv @my_csv_stage AUTO_COMPRESS=TRUE OVERWRITE=TRUE;
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';
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 | +-----------------------------+--------+-------------+-------------+-------------+-------------+-------------+------------------+-----------------------+-------------------------+
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;
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 | +----+-----------+------------+----------------------------------+----------------------------------------+----------------+----------------+---------------------------------+------------------+------------+
JSON¶
SELECT * FROM myjsontable;
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" | | } | | } | +-----------------------------------------------------------------+
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';
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 | +-------------------------------+---------+REMOVE @my_json_stage PATTERN='.*.json.gz';
Snowflake renvoie les résultats suivants :
+--------------------------------+---------+ | name | result | |--------------------------------+---------| | my_json_stage/contacts.json.gz | removed | +--------------------------------+---------+
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;
Détruire la base de données supprime automatiquement toutes les objets de base de données liés, par exemple les tables.