Tutorial: Massenladen aus einem lokalen Dateisystem mit COPY

In diesem Tutorial wird beschrieben, wie Sie Daten aus Dateien in Ihrem lokalen Dateisystem in eine Tabelle laden können.

Einführung

In diesem Tutorial erfahren Sie Folgendes:

  • Erstellen benannter Dateiformatobjekte, die Ihre Datendateien beschreiben.

  • Erstellen benannter Stagingobjekte.

  • Hochladen Ihrer Daten in den internen Stagingbereich.

  • Laden Ihrer Daten in Tabellen.

  • Beheben von Fehlern in Ihren Datendateien.

In diesem Tutorial erfahren Sie, wie Sie mit SnowSQL sowohl CSV- als auch JSON-Daten laden können.

Voraussetzungen

Das Tutorial setzt Folgendes voraus:

  • Sie haben ein Snowflake-Konto sowie einen Benutzer mit einer Rolle, die die erforderlichen Berechtigungen zum Erstellen von Datenbank-, Tabellen- und virtuellen Warehouse-Objekten erteilt.

  • Sie haben SnowSQL installiert.

Das Snowflake in 20 Minuten-Tutorial enthält die entsprechende Schritt-für-Schritt-Anleitung, um diese Anforderungen zu erfüllen.

Außerdem müssen Sie vor Beginn des Tutorials Folgendes tun:

  • Herunterladen der für diese Übung bereitgestellten Beispieldateien

  • Erstellen einer Datenbank, einiger Tabellen und eines virtuelles Warehouse für dieses Tutorial. Dies sind die grundlegenden Snowflake-Objekte, die für die meisten Snowflake-Aktivitäten benötigt werden.

Herunterladen der Beispieldatendateien

Für dieses Tutorial müssen Sie die von Snowflake bereitgestellten Beispieldatendateien herunterladen.

So laden Sie die Beispieldatendateien herunter und entpacken diese:

  1. Klicken Sie mit der rechten Maustaste auf den Namen der Archivdatei data-load-internal.zip, und speichern Sie den Link/die Datei in Ihrem lokalen Dateisystem.

  2. Entpacken Sie die Beispieldateien. Das Tutorial setzt voraus, dass Sie die Dateien in die folgenden Verzeichnisse entpackt haben:

  • Linux/macOS: /tmp/load

  • Windows: C:\tempload

Diese Datendateien enthalten Beispielkontaktdaten in den folgenden Formaten:

  • CSV-Dateien, die eine Kopfzeile und fünf Datensätze enthalten. Das Feldtrennzeichen ist das Pipe-Zeichen (|). Das folgende Beispiel zeigt eine Kopfzeile und einen Datensatz:

    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
  • Eine einzelne Datei im JSON-Format, die ein Array und drei Objekte enthält. Es folgt ein Beispiel für ein Array, das eines der Objekte enthält:

    [
     {
       "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

Erstellen von Datenbank, Tabellen und Warehouse

Führen Sie die folgenden Anweisungen aus, um eine Datenbank, zwei Tabellen (für CSV- und JSON-Daten) und ein virtuelles Warehouse zu erstellen, die für dieses Tutorial benötigt werden. Nachdem Sie das Tutorial abgeschlossen haben, können Sie diese Objekte wieder löschen.

-- 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

Die Anweisung CREATE WAREHOUSE erstellt das Warehouse, das zunächst angehalten ist. Die Anweisung legt auch AUTO_RESUME = true fest, wodurch das Warehouse automatisch gestartet wird, wenn Sie SQL-Anweisungen ausführen, die Computeressourcen benötigen.

Dateiformatobjekte erstellen

Wenn Sie Datendateien aus einer Datei in eine Tabelle laden, müssen Sie das Format der Datei beschreiben und angeben, wie die Daten in der Datei interpretiert und verarbeitet werden sollen. Wenn Sie beispielsweise Daten aus einer CSV-Datei laden, die durch senkrechte Striche voneinander getrennt sind, müssen Sie angeben, dass die Datei das CSV-Format mit dem senkrechten Strich als Trennzeichen verwendet.

Diese Formatinformation geben Sie beim Ausführen des COPY INTO <Tabelle>-Befehls an. Sie können diese Informationen entweder als Option im Befehl angeben (z. B. TYPE = CSV, FIELD_DELIMITER = '|' usw.), oder Sie können ein Dateiformatobjekt angeben, das diese Formatinformationen enthält. Sie können ein benanntes Dateiformatobjekt mit dem Befehl CREATE FILE FORMAT erstellen.

In diesem Schritt erstellen Sie Dateiformatobjekte, die das Datenformat der CSV- und JSON-Beispieldaten beschreiben, die für dieses Tutorial bereitgestellt werden.

Erstellen eines Dateiformatobjekts für CSV-Daten

Führen Sie den Befehl CREATE FILE FORMAT aus, um das Dateiformat mycsvformat zu erstellen.

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

Wobei:

  • TYPE = 'CSV' gibt den Dateiformattyp der Quelldatei an. CSV ist der Standard-Dateiformattyp.

  • FIELD_DELIMITER = '|' gibt an, dass das Zeichen „| “ ein Feldtrennzeichen ist. Der Standardwert ist „,“.

  • SKIP_HEADER = 1 zeigt an, dass die Quelldatei eine Kopfzeile enthält. Der COPY-Befehl überspringt diese Kopfzeilen beim Laden von Daten. Der Standardwert ist 0.

Erstellen eines Dateiformatobjekts für JSON-Daten

Führen Sie den Befehl CREATE FILE FORMAT aus, um das Dateiformat myjsonformat zu erstellen.

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

Wobei:

  • TYPE = 'JSON' gibt den Dateiformattyp der Quelldatei an.

  • STRIP_OUTER_ARRAY = TRUE weist den COPY-Befehl an, die Wurzelklammern ([]) beim Laden von Daten in die Tabelle wegzulassen.

Stagingobjekte erstellen

Ein Stagingbereich gibt an, wo Datendateien gespeichert (d. h. „bereitgestellt“) werden, damit die Daten in den Dateien in eine Tabelle geladen werden können. Ein benannter interner Stagingbereich ist ein Cloudspeicherort, der von Snowflake verwaltet wird.

Das Erstellen eines benannten Stagingbereichs ist nützlich, wenn Sie möchten, dass mehrere Benutzer oder Prozesse Dateien hochladen. Wenn Sie planen, Datendateien bereitzustellen, die nur von Ihnen selbst oder nur in eine einzelne Tabelle geladen werden, dann können Sie auch einfach entweder Ihren Benutzer-Stagingbereich oder den Tabellen-Stagingbereich verwenden. Weitere Informationen dazu finden Sie unter Massenladen aus einem lokalen Dateisystem.

In diesem Schritt erstellen Sie benannte Stagingbereiche für die verschiedenen Typen von Beispieldatendateien.

Erstellen eines Stagingbereichs für CSV-Datendateien

Führen Sie CREATE STAGE aus, um den Stagingbereich my_csv_stage zu erstellen:

CREATE OR REPLACE STAGE my_csv_stage
  FILE_FORMAT = mycsvformat;
Copy

Hinweis: Wenn Sie die FILE_FORMAT-Option beim Erstellen des Stagingbereichs angeben, ist es nicht erforderlich, dieselbe FILE_FORMAT-Option im COPY-Befehl anzugeben, der zum Laden von Daten aus dem Stagingbereich verwendet wird.

Erstellen eines Stagingbereichs für JSON-Datendateien

Führen Sie CREATE STAGE aus, um den Stagingbereich my_json_stage zu erstellen:

CREATE OR REPLACE STAGE my_json_stage
  FILE_FORMAT = myjsonformat;
Copy

Datendateien im Stagingbereich bereitstellen

Führen Sie PUT aus, um Beispieldatendateien aus Ihrem lokalen Dateisystem in die unter Tutorial: Massenladen aus einem lokalen Dateisystem mit COPY erstellten Stagingbereiche hochzuladen.

Staging der CSV-Beispieldatendateien

Führen Sie den PUT-Befehl aus, um die CSV-Dateien aus Ihrem lokalen Dateisystem hochzuladen.

  • Linux oder 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

Lassen Sie uns einen genaueren Blick auf den Befehl werfen:

  • file://<file-path>[/]contacts*.csv gibt den vollständigen Verzeichnispfad und die Namen der Dateien auf Ihrem lokalen Computer an, die im Stagingbereich bereitgestellt werden sollen. Beachten Sie, dass Platzhalter für Dateisysteme erlaubt sind.

  • @my_csv_stage ist der Name des Stagingbereichs, in dem die Daten bereitgestellt werden sollen.

  • auto_compress=true; weist den Befehl an, die Daten im Stagingbereich zu komprimieren. Dies ist auch die Standardeinstellung.

Der Befehl liefert das folgende Ergebnis, das die Stagingdateien anzeigt:

+---------------+------------------+-------------+-------------+--------------------+--------------------+----------+---------+
| 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

Staging der JSON-Beispieldatendateien

Führen Sie den PUT-Befehl aus, um die JSON-Dateien aus Ihrem lokalen Dateisystem in den benannten Stagingbereich hochzuladen.

  • Linux oder 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

Der Befehl liefert das folgende Ergebnis, das die Stagingdateien anzeigt:

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

Liste der Stagingdateien (optional)

Sie können die Stagingdateien mit dem Befehl LIST auflisten.

CSV

LIST @my_csv_stage;
Copy

Snowflake gibt eine Liste Ihrer bereitgestellten Dateien zurück.

JSON

LIST @my_json_stage;
Copy

Snowflake gibt eine Liste Ihrer bereitgestellten Dateien zurück.

Daten in die Zieltabellen kopieren

Führen Sie COPY INTO <Tabelle> aus, um die im Stagingbereich bereitgestellten Daten in die Zieltabellen zu laden.

CSV

So laden Sie die Daten aus den CSV-Beispieldateien:

  1. Laden Sie zunächst die Daten aus einer der Dateien (contacts1.csv.gz). Führen Sie den folgenden Befehl aus:

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

    Wobei:

    • Die FROM-Klausel gibt den Speicherort der Staging-Datendatei an (Stagingbereichsname gefolgt vom Dateinamen).

    • Die ON_ERROR-Klausel gibt an, was zu tun ist, wenn der COPY-Befehl Fehler in den Dateien feststellt. Standardmäßig stoppt der Befehl das Laden von Daten beim ersten Auftreten eines Fehlers. Wir haben den Befehl jedoch so angepasst, dass jede Datei mit einem Fehler übersprungen und mit dem Laden der nächsten Datei fortgefahren wird. Beachten Sie, dass dies nur zur Veranschaulichung dient. Keine der Dateien in diesem Tutorial enthält Fehler.

    Der COPY-Befehl gibt als Ergebnis die Namen der kopierten Dateien und zugehörige Informationen zurück:

    +-----------------------------+--------+-------------+-------------+-------------+-------------+-------------+------------------+-----------------------+-------------------------+
    | 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. Laden Sie den Rest der Stagingdateien in die Tabelle mycsvtable.

    Im folgenden Beispiel wird die Mustererkennung verwendet, um Daten aus allen Dateien, die mit dem regulären Ausdruck .*contacts[1-5].csv.gz übereinstimmen, in die Tabelle mycsvtable zu laden.

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

    Dabei gibt die PATTERN-Klausel an, dass der Befehl Daten aus Dateien mit Namen laden soll, die mit dem regulären Ausdruck (.*employees0[1-5].csv.gz) übereinstimmen.

    Der COPY-Befehl gibt als Ergebnis die Namen der kopierten Dateien und zugehörige Informationen zurück:

    +-----------------------------+-------------+-------------+-------------+-------------+-------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------+------------------+-----------------------+-------------------------+
    | 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

    Das Ergebnis liefert die folgenden Informationen:

    • Die Daten in contacts1.csv.gz werden ignoriert, da Sie die Daten bereits erfolgreich geladen haben.

    • Die Daten folgender Dateien wurden erfolgreich geladen: contacts2.csv.gz, contacts4.csv.gz und contacts5.csv.gz.

    • Die Daten in contacts3.csv.gz wurden aufgrund von 2 Datenfehlern übersprungen. Der nächste Schritt in diesem Tutorial befasst sich mit der Validierung und Behebung der Fehler.

JSON

Laden Sie die Staging-Datendatei contacts.json.gz in die Tabelle myjsontable.

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

Der COPY-Befehl gibt als Ergebnis die Namen der kopierten Dateien und zugehörige Informationen zurück:

+------------------------------+--------+-------------+-------------+-------------+-------------+-------------+------------------+-----------------------+-------------------------+
| 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

Datenladefehler beheben

Im vorangegangenen Schritt hat der COPY INTO-Befehl einen ersten Fehler festgestellt und das Laden einer der Dateien übersprungen. Sie müssen alle Fehler finden und beheben. In diesem Schritt verwenden Sie die Funktion VALIDATE, um die vorherige Ausführung des COPY INTO-Befehls zu überprüfen und alle Fehler zurückzugeben.

Beispieldatendateien validieren und alle Fehler abrufen

Sie benötigen zunächst die Abfrage-ID, die mit dem zuvor ausgeführten COPY INTO-Befehl verbunden ist. Rufen Sie dann die Funktion VALIDATE auf, und geben Sie die Abfrage-ID an.

  1. Rufen Sie die Abfrage-ID ab.

    1. Melden Sie sich bei Snowsight an.

    2. Stellen Sie sicher, dass die Rolle in Snowsight mit der Rolle übereinstimmt, die Sie in SnowSQL zum Ausführen der SQL-Anweisungen dieses Tutorials verwenden.

    3. Wählen Sie Monitoring » Query History aus.

    4. Wählen Sie die Zeile für den spezifischen COPY INTO-Befehl aus, um den Abfrageinformationsbereich zu öffnen.

    5. Kopieren Sie den Query ID-Wert.

  2. Überprüfen Sie die Ausführung des COPY INTO-Befehls, der mit dieser Abfrage-ID verbunden ist, und speichern Sie die Fehler in einer neuen Tabelle namens save_copy_errors.

    1. Führen Sie den folgenden Befehl in SnowSQL aus. Ersetzen Sie query_id durch den Wert Query ID.

      CREATE OR REPLACE TABLE save_copy_errors AS SELECT * FROM TABLE(VALIDATE(mycsvtable, JOB_ID=>'<query_id>'));
      
      Copy
    2. Fragen Sie die Tabelle save_copy_errors ab.

      SELECT * FROM SAVE_COPY_ERRORS;
      
      Copy

      Die Abfrage gibt die folgenden Ergebnisse zurück:

      +----------------------------------------------------------------------------------------------------------------------------------------------------------------------+-------------------------------------+------+-----------+-------------+----------+--------+-----------+-------------------------------+------------+----------------+-----------------------------------------------------------------------------------------------------------------------------------------------------+
      | 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

Das Ergebnis zeigt zwei Datenfehler in mycsvtable/contacts3.csv.gz an:

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

    In Zeile 1 wurde ein Bindestrich versehentlich durch einen senkrechten Strich (|), das Trennzeichen der Datendatei, ersetzt, wodurch eine zusätzliche Spalte im Datensatz erstellt wurde.

    Beispiel 1: Datenfehler im Datensatz
  • Field delimiter '|' found while expecting record delimiter 'n'

    In Zeile 5 wurde nach einem Bindestrich ein zusätzlicher senkrechter Strich (|) eingefügt, was zum Unterbrechen des Datensatzes führte.

    Beispiel 1: Datenfehler im Datensatz

Fehler beheben und Datendateien erneut laden

  1. Beheben Sie die Fehler in den Datensätze manuell in contacts3.csv in Ihrer lokalen Umgebung.

  2. Verwenden Sie den Befehl PUT, um die geänderte Datendatei in den Stagingbereich hochzuladen. Die geänderte Datei überschreibt die bestehende Stagingdatei.

    • Linux oder 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. Kopieren Sie die Daten aus den Stagingdateien in die Tabellen.

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

Snowflake liefert die folgenden Ergebnisse, die anzeigen, dass die Daten in contacts3.csv.gz erfolgreich geladen wurden.

+-----------------------------+--------+-------------+-------------+-------------+-------------+-------------+------------------+-----------------------+-------------------------+
| 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

Überprüfen der geladenen Daten

Führen Sie eine SELECT-Abfrage aus, um sicherzustellen, dass die Daten erfolgreich geladen wurden.

CSV

SELECT * FROM mycsvtable;
Copy

Die Abfrage gibt die folgenden Ergebnisse zurück:

+----+-----------+------------+----------------------------------+----------------------------------------+----------------+----------------+---------------------------------+------------------+------------+
| 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

Die Abfrage gibt die folgenden Ergebnisse zurück:

+-----------------------------------------------------------------+
| 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

Erfolgreich kopierte Datendateien entfernen

Nachdem Sie sich vergewissert haben, dass Sie die Daten erfolgreich aus Ihrem Stagingbereich in die Tabellen kopiert haben, können Sie die Datendateien mit dem Befehl REMOVE aus dem internen Stagingbereich entfernen, um Datenspeicher zu sparen.

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

Snowflake gibt die folgenden Ergebnisse zurück:

+-------------------------------+---------+
| 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 gibt die folgenden Ergebnisse zurück:

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

Bereinigen

Herzlichen Glückwunsch, Sie haben das Tutorial erfolgreich abgeschlossen.

Tutorialdaten bereinigen (optional)

Führen Sie die folgenden DROP <Objekt>-Befehle aus, um Ihr System in den Zustand zu versetzen, bevor Sie das Tutorial begonnen haben:

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

Wenn Sie die Datenbank löschen, werden automatisch alle untergeordneten Datenbankobjekte wie Tabellen entfernt.

Weitere Tutorials zum Laden von Daten