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:
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.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
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" } }, ]
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;
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;
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;
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;
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;
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;
Windows
PUT file://C:\temp\load\contacts*.csv @my_csv_stage AUTO_COMPRESS=TRUE;
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 | |
+---------------+------------------+-------------+-------------+--------------------+--------------------+----------+---------+
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;
Windows
PUT file://C:\temp\load\contacts.json @my_json_stage AUTO_COMPRESS=TRUE;
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 | |
+---------------+------------------+-------------+-------------+--------------------+--------------------+----------+---------+
Listagem dos arquivos preparados (opcional)¶
Você pode listar os arquivos preparados usando o comando LIST.
CSV¶
LIST @my_csv_stage;
O Snowflake retorna uma lista de seus arquivos preparados.
JSON¶
LIST @my_json_stage;
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:
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';
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 | +-----------------------------+--------+-------------+-------------+-------------+-------------+-------------+------------------+-----------------------+-------------------------+
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 tabelamycsvtable
.COPY INTO mycsvtable FROM @my_csv_stage FILE_FORMAT = (FORMAT_NAME = mycsvformat) PATTERN='.*contacts[1-5].csv.gz' ON_ERROR = 'skip_file';
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 | +-----------------------------+-------------+-------------+-------------+-------------+-------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------+------------------+-----------------------+-------------------------+
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
econtacts5.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';
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 |
+------------------------------+--------+-------------+-------------+-------------+-------------+-------------+------------------+-----------------------+-------------------------+
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.
Recupere a ID de consulta.
Faça login no Snowsight.
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.
Selecione Monitoring » Query History.
Selecione a linha para o comando específico COPY INTO para abrir o painel de informações da consulta.
Copie o valor Query ID.
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
.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>'));
Consultar a tabela
save_copy_errors
.SELECT * FROM SAVE_COPY_ERRORS;
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 | +----------------------------------------------------------------------------------------------------------------------------------------------------------------------+-------------------------------------+------+-----------+-------------+----------+--------+-----------+-------------------------------+------------+----------------+-----------------------------------------------------------------------------------------------------------------------------------------------------+
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.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.
Solução de erros e novo carregamento dos arquivos de dados¶
Corrija os erros nos registros manualmente no arquivo
contacts3.csv
em seu ambiente local.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;
Windows:
PUT file://C:\temp\load\contacts3.csv @my_csv_stage AUTO_COMPRESS=TRUE OVERWRITE=TRUE;
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';
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 | +-----------------------------+--------+-------------+-------------+-------------+-------------+-------------+------------------+-----------------------+-------------------------+
Verificar os dados carregados¶
Execute uma consulta SELECT para verificar se os dados foram carregados com sucesso.
CSV¶
SELECT * FROM mycsvtable;
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 | +----+-----------+------------+----------------------------------+----------------------------------------+----------------+----------------+---------------------------------+------------------+------------+
JSON¶
SELECT * FROM myjsontable;
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" | | } | | } | +-----------------------------------------------------------------+
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';
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 | +-------------------------------+---------+REMOVE @my_json_stage PATTERN='.*.json.gz';
O Snowflake retorna os seguintes resultados:
+--------------------------------+---------+ | name | result | |--------------------------------+---------| | my_json_stage/contacts.json.gz | removed | +--------------------------------+---------+
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;
Descartar o banco de dados remove automaticamente todos os objetos do banco de dados filho, tais como tabelas.