Tutorial: carregamento em massa a partir de um sistema de arquivo local usando COPY

Este tutorial descreve como carregar dados de arquivos em seu sistema de arquivos local em uma tabela.

Introdução

Neste tutorial, você aprenderá como:

  • Crie objetos de formato de arquivo nomeado que descrevam seus arquivos de dados.

  • Criar objetos de preparação nomeados.

  • Carregue seus dados nos estágios internos.

  • Carregue seus dados em tabelas.

  • Resolver os erros em seus arquivos de dados.

O tutorial aborda como carregar dados CSV e JSON usando SnowSQL.

Pré-requisitos

O tutorial considera o seguinte:

  • Você tem uma conta Snowflake e um usuário com uma função que concede os privilégios necessários para criar um banco de dados, tabelas e objetos de warehouse virtual.

  • Você tem o SnowSQL instalado.

O tutorial Snowflake em 20 minutos fornece as instruções passo a passo relacionadas para atender a estes requisitos.

Além disso, você precisa fazer o seguinte antes de iniciar o tutorial:

  • Baixe os arquivos de amostra fornecidos para este exercício.

  • Crie um banco de dados, tabelas e um warehouse virtual para este tutorial. Estes são os objetos básicos do Snowflake necessários para a maioria das atividades do Snowflake.

Download dos arquivos de dados de amostra

Para este tutorial, você precisa baixar os arquivos de dados de amostra fornecidos pelo Snowflake.

Para baixar e descompactar os arquivos de dados de amostra:

  1. Clique com o botão direito do mouse sobre o nome do arquivo, data-load-internal.zip e salve o link/arquivo em seu sistema de arquivo local.

  2. Descompacte os arquivos de amostra. O tutorial considera que você tenha descompactado os arquivos nos seguintes diretórios:

  • Linux/macOS: /tmp/load

  • Windows: C:\tempload

Estes arquivos de dados incluem amostras de dados de contato nos seguintes formatos:

  • Arquivos CSV que contêm uma linha de cabeçalho e cinco registros. O delimitador de campo é o caractere de canal (|). O exemplo a seguir mostra uma linha de cabeçalho e um registro:

    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
  • Um único arquivo no formato JSON que contém uma matriz e três objetos. A seguir, um exemplo de uma matriz que contém um dos objetos:

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

Criação do banco de dados, tabelas e warehouses

Execute as seguintes instruções para criar um banco de dados, duas tabelas (para dados csv e json) e um warehouse virtual necessário para este tutorial. Depois de concluir o tutorial, você poderá descartar estes objetos.

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

A instrução CREATE WAREHOUSE configura o warehouse a ser suspenso inicialmente. A instrução também define AUTO_RESUME = true, que inicia automaticamente o warehouse quando você executa instruções SQL que exigem recursos computacionais.

Criação de objetos de formato de arquivo

Ao carregar dados de um arquivo em uma tabela, você deve descrever o formato do arquivo e especificar como os dados no arquivo devem ser interpretados e processados. Por exemplo, se você estiver carregando dados delimitados por barras verticais de um arquivo CSV, você deverá especificar que o arquivo usa o formato CSV com símbolos de barras verticais como delimitadores.

Quando você executa o comando COPY INTO <tabela>, você especifica esta informação de formato. Você pode especificar estas informações como opções no comando (por exemplo, TYPE = CSV, FIELD_DELIMITER = '|' etc.) ou pode especificar um objeto de formato de arquivo que contenha estas informações de formato. Você pode criar um objeto de formato de arquivo nomeado usando o comando CREATE FILE FORMAT.

Nesta etapa, você cria objetos de formato de arquivo descrevendo o formato dos dados de amostra CSV e JSON fornecidos para este tutorial.

Criação de um objeto de formato de arquivo para dados CSV

Execute o comando CREATE FILE FORMAT para criar o formato de arquivo mycsvformat.

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

Onde:

  • TYPE = 'CSV' indica o tipo de formato do arquivo de origem. CSV é o tipo de formato de arquivo padrão.

  • FIELD_DELIMITER = '|' indica que o caractere “|” é um separador de campo. O valor padrão é “,”.

  • SKIP_HEADER = 1 indica que o arquivo de origem inclui uma linha de cabeçalho. O comando COPY ignora essas linhas de cabeçalho ao carregar dados. O valor padrão é 0.

Criação de um objeto de formato de arquivo para dados JSON

Execute o comando CREATE FILE FORMAT para criar o formato de arquivo myjsonformat.

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

Onde:

  • TYPE = 'JSON' indica o tipo de formato do arquivo de origem.

  • STRIP_OUTER_ARRAY = TRUE direciona o comando COPY para excluir os colchetes ([]) ao carregar dados na tabela.

Criar objetos de preparação

Um estágio especifica onde os arquivos de dados são armazenados (isto é, “preparados”) para que os dados nos arquivos possam ser carregados em uma tabela. Um estágio interno nomeado é um local de armazenamento em nuvem gerenciado pelo Snowflake.

A criação de um estágio nomeado é útil se você quiser que vários usuários ou processos façam o carregamento de arquivos. Se você planeja preparar arquivos de dados para carregamento feito somente por você, ou carregar somente em uma única tabela, então você pode preferir usar seu estágio de usuário ou o estágio de tabela. Para obter mais informações, consulte Carregamento em massa a partir de um sistema de arquivo local.

Nesta etapa, você cria estágios nomeados para os diferentes tipos de arquivos de dados de amostra.

Criação de um estágio para arquivos de dados CSV

Execute CREATE STAGE para criar o estágio my_csv_stage:

CREATE OR REPLACE STAGE my_csv_stage
  FILE_FORMAT = mycsvformat;
Copy

Observe que se você especificar a opção FILE_FORMAT ao criar o estágio, não será necessário especificar a mesma opção FILE_FORMAT no comando COPY usado para carregar dados do estágio.

Criação de um estágio para arquivos de dados JSON

Execute CREATE STAGE para criar o estágio my_json_stage:

CREATE OR REPLACE STAGE my_json_stage
  FILE_FORMAT = myjsonformat;
Copy

Preparar os arquivos de dados

Execute PUT para carregar (estágio) arquivos de dados de amostra de seu sistema de arquivos local nos estágios que você criou em Tutorial: carregamento em massa a partir de um sistema de arquivo local usando COPY.

Preparação de arquivos de dados de amostra CSV

Execute o comando PUT para carregar os arquivos CSV de seu sistema de arquivos 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

Vamos analisar melhor o comando:

  • file://<caminho-arquivo>[/]contacts*.csv especifica o caminho completo do diretório e os nomes dos arquivos na máquina local que devem ser preparados. Você pode usar caracteres curinga do sistema de arquivos.

  • @my_csv_stage é o nome do estágio onde os dados devem ser preparados.

  • auto_compress=true; direciona o comando para comprimir os dados durante a preparação. Este também é o padrão.

O comando retorna o seguinte resultado, mostrando os arquivos preparados:

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

Preparação de arquivos de dados de amostra JSON

Execute o comando PUT para carregar o arquivo JSON de seu sistema de arquivos local no estágio nomeado.

  • 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

O comando retorna o seguinte resultado, mostrando os arquivos preparados:

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

Listagem dos arquivos preparados (opcional)

Você pode listar os arquivos preparados usando o comando LIST.

CSV

LIST @my_csv_stage;
Copy

O Snowflake retorna uma lista de seus arquivos preparados.

JSON

LIST @my_json_stage;
Copy

O Snowflake retorna uma lista de seus arquivos preparados.

Copiar dados para as tabelas de destino

Execute COPY INTO <tabela> para carregar dados preparados nas tabelas de destino.

CSV

Para carregar os dados dos arquivos CSV de amostra:

  1. Comece carregando os dados de um dos arquivos (contacts1.csv.gz). Execute o seguinte:

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

    Onde:

    • A cláusula FROM especifica a localização do arquivo de dados preparado (nome do estágio seguido do nome do arquivo).

    • A cláusula ON_ERROR especifica o que fazer quando o comando COPY encontra erros nos arquivos. Por padrão, o comando interrompe o carregamento de dados quando o primeiro erro é encontrado. No entanto, demos uma instrução para que ele pule qualquer arquivo que contenha erro e prossiga para carregar o próximo arquivo. Lembre-se que isso é apenas um exemplo. Nenhum arquivo deste tutorial contém erros.

    O comando COPY retorna um resultado mostrando o nome do arquivo copiado e informações relacionadas:

    +-----------------------------+--------+-------------+-------------+-------------+-------------+-------------+------------------+-----------------------+-------------------------+
    | 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. Carregue o resto dos arquivos preparados na tabela mycsvtable.

    O exemplo a seguir usa a correspondência de padrões para carregar dados de todos os arquivos que correspondem à expressão regular .*contacts[1-5].csv.gz para a tabela mycsvtable.

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

    Em que a cláusula PATTERN especifica que o comando deve carregar dados dos nomes dos arquivos que correspondem a esta expressão regular (.*employees0[1-5].csv.gz).

    O comando COPY retorna um resultado mostrando o nome do arquivo copiado e informações relacionadas:

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

    Observe os seguintes destaques no resultado:

    • Os dados em contacts1.csv.gz são ignorados porque você já carregou os dados com sucesso.

    • Os dados contidos nestes arquivos foram carregados com sucesso: contacts2.csv.gz, contacts4.csv.gz e contacts5.csv.gz.

    • Os dados em contacts3.csv.gz foram ignorados devido a 2 erros de dados. A próxima etapa neste tutorial trata de como validar e corrigir os erros.

JSON

Carregue o arquivo de dados preparado contacts.json.gz na tabela myjsontable.

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

O comando COPY retorna um resultado mostrando o nome do arquivo copiado e informações relacionadas:

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

Solução de erros de carregamento de dados

Na etapa anterior, o comando COPY INTO pulou o carregamento de um dos arquivos quando encontrou o primeiro erro. Você precisa encontrar todos os erros e consertá-los. Nesta etapa, você usa a função VALIDATE para validar a execução anterior do comando COPY INTO e retorna todos os erros.

Validação dos arquivos de dados de amostra e recuperação de eventuais erros

Primeiro você precisa da ID da consulta associada ao comando COPY INTO que você executou anteriormente. Em seguida, chame a função VALIDATE, especificando a ID de consulta.

  1. Recupere a ID de consulta.

    1. Faça login no Snowsight.

    2. Certifique-se de que a função no Snowsight seja a mesma que você está usando em SnowSQL para executar instruções SQL para este tutorial.

    3. Selecione Monitoring » Query History.

    4. Selecione a linha para o comando específico COPY INTO para abrir o painel de informações da consulta.

    5. Copie o valor Query ID.

  2. Valide a execução do comando COPY INTO, representado pela ID da consulta, e salve os erros em uma nova tabela chamada save_copy_errors.

    1. No SnowSQL, execute o seguinte comando: Substitua query_id pelo valor Query ID.

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

      SELECT * FROM SAVE_COPY_ERRORS;
      
      Copy

      A consulta retorna os seguintes resultados:

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

O resultado mostra dois erros de dados em mycsvtable/contacts3.csv.gz:

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

    Na Linha 1, um hífen foi erroneamente substituído pelo caractere de canal (|), o delimitador do arquivo de dados, criando efetivamente uma coluna adicional no registro.

    Exemplo de erro de dados 1 no registro
  • Field delimiter '|' found while expecting record delimiter 'n'

    Na Linha 5, um caractere de canal (|) adicional foi introduzido após um hífen, quebrando o registro.

    Exemplo de erro de dados 1 no registro

Solução de erros e novo carregamento dos arquivos de dados

  1. Corrija os erros nos registros manualmente no arquivo contacts3.csv em seu ambiente local.

  2. Use o comando PUT para carregar o arquivo de dados modificado no estágio. O arquivo modificado substitui o arquivo preparado existente.

    • 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. Copie os dados dos arquivos preparados nas tabelas.

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

O Snowflake retorna os seguintes resultados, indicando que os dados em contacts3.csv.gz foram carregados com sucesso.

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

Verificar os dados carregados

Execute uma consulta SELECT para verificar se os dados foram carregados com sucesso.

CSV

SELECT * FROM mycsvtable;
Copy

A consulta retorna os seguintes resultados:

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

A consulta retorna os seguintes resultados:

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

Remoção dos arquivos de dados copiados com sucesso

Após verificar que copiou com sucesso os dados de seu estágio nas tabelas, você pode remover os arquivos de dados do estágio interno usando o comando REMOVE para salvar no armazenamento de dados.

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

O Snowflake retorna os seguintes resultados:

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

O Snowflake retorna os seguintes resultados:

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

Limpeza

Parabéns, você concluiu esse tutorial com sucesso.

Tutorial de limpeza (opcional)

Execute os seguintes comandos DROP <objeto> para retornar o sistema ao seu estado antes de iniciar o tutorial:

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

Descartar o banco de dados remove automaticamente todos os objetos do banco de dados filho, tais como tabelas.

Outros tutoriais de carregamento de dados