チュートリアル: COPY の使用によるローカルファイルシステムからの一括ロード¶
このチュートリアルでは、ローカルファイルシステムのファイルからテーブルにデータをロードする方法について説明します。
概要¶
このチュートリアルでは、次の方法を学習します。
データファイルを記述する名前付きファイル形式オブジェクトを作成します。
名前付きステージオブジェクトを作成します。
内部ステージにデータをアップロードします。
データをテーブルにロードします。
データファイルのエラーを解決します。
このチュートリアルでは、SnowSQLを使用して、CSVとJSONの両方のデータを読み込みます。
前提条件¶
このチュートリアルでは、次を前提としています。
Snowflakeアカウントと、データベース、テーブル、および仮想ウェアハウスオブジェクトを作成するために必要な権限を付与するロールを持つユーザーがある。
SnowSQL がインストールされている。
Snowflakeを20分で紹介 チュートリアルでは、これらの要件を満たすための関連する段階的な手順が提供されています。
さらに、チュートリアルを開始する前に、次を実行する必要があります。
この練習用に提供されているサンプルファイルをダウンロードする。
このチュートリアル用のデータベース、テーブル、および仮想ウェアハウスを作成する。これらは、Snowflakeのほとんどのアクティビティに必要となる基本的なSnowflakeオブジェクトです。
サンプルデータファイルをダウンロードする¶
このチュートリアルには、Snowflakeが提供するサンプルデータファイルをダウンロードする必要があります。
サンプルデータファイルをダウンロードして解凍するには、
アーカイブファイル名
data-load-internal.zip
を右クリックして、リンク/ファイルをローカルファイルシステムに保存します。サンプルファイルを解凍します。このチュートリアルでは、次のディレクトリにファイルを解凍したことを前提としています。
Linux/macOS:
/tmp/load
Windows:
C:\tempload
これらのデータファイルには、サンプルの連絡先データが次の形式で含まれています。
CSV ヘッダー行と5つのレコードを含むファイル。フィールド区切り文字はパイプ(
|
)文字です。次の例は、ヘッダー行と1つの記録を示しています。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
1つの配列と3つのオブジェクトを含む JSON 形式の1つファイル。オブジェクトの1つを含む配列の例を次に示します。
[ { "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" } }, ]
データベース、テーブル、ウェアハウスの作成¶
次のステートメントを実行して、データベース、2つのテーブル(csvおよびJSONデータ用)、およびこのチュートリアルに必要な仮想ウェアハウスを作成します。チュートリアルの完了後に、これらのオブジェクトをドロップできます。
-- 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;
CREATE WAREHOUSE
ステートメントは、ウェアハウスを中断された初期状態に設定します。このステートメントは AUTO_RESUME = true
も設定します。これにより、コンピューティングリソースを必要とする SQL ステートメントを実行すると、ウェアハウスが自動的に開始されます。
ファイル形式オブジェクトを作成する¶
ファイルからテーブルにデータをロードする場合は、ファイルの形式を記述し、ファイル内のデータを解釈および処理する方法を指定する必要があります。たとえば、 CSV ファイルからパイプで区切られたデータをロードする場合は、ファイルがパイプ記号を区切り文字として使用する CSV 形式を使用するように指定する必要があります。
COPY INTO <テーブル> コマンドを実行するときに、この形式情報を指定します。この情報をコマンドのオプション(例: TYPE = CSV
、 FIELD_DELIMITER = '|'
)として指定するか、この形式情報を含むファイル形式オブジェクトを指定できます。 CREATE FILE FORMAT コマンドを使用して、名前付きファイル形式オブジェクトを作成できます。
このステップでは、このチュートリアルで提供されるサンプル CSV および JSON データのデータ形式を記述するファイル形式オブジェクトを作成します。
CSV データのファイル形式オブジェクトの作成¶
CREATE FILE FORMAT コマンドを実行して、 mycsvformat
ファイル形式を作成します。
CREATE OR REPLACE FILE FORMAT mycsvformat
TYPE = 'CSV'
FIELD_DELIMITER = '|'
SKIP_HEADER = 1;
条件:
TYPE = 'CSV'
は、ソースファイル形式の種類を示します。CSV は、デフォルトのファイル形式の種類です。FIELD_DELIMITER = '|'
は、「|」がフィールド区切り文字であることを示します。デフォルト値は「,」です。SKIP_HEADER = 1
は、ソースファイルに1つのヘッダー行が含まれていることを示します。COPY コマンドは、データをロードするときにこれらのヘッダー行をスキップします。デフォルト値は0です。
JSON データのファイル形式オブジェクトの作成¶
CREATE FILE FORMAT コマンドを実行して、 myjsonformat
ファイル形式を作成します。
CREATE OR REPLACE FILE FORMAT myjsonformat
TYPE = 'JSON'
STRIP_OUTER_ARRAY = TRUE;
条件:
TYPE = 'JSON'
は、ソースファイル形式の種類を示します。STRIP_OUTER_ARRAY = TRUE
は、データをテーブルにロードするときにルートブラケット([])を除外するように COPY コマンドに指示します。
ステージオブジェクトを作成する¶
ステージは、ファイル内のデータをテーブルにロードできるように、データファイルの保存場所(つまり、「ステージングした場所」)を指定します。名前付き 内部ステージ は、Snowflakeによって管理されるクラウドストレージの場所です。
複数のユーザーまたはプロセスでファイルをアップロードする場合は、名前付きステージを作成すると便利です。自分だけがロードするようにデータファイルをステージングする場合や、単一のテーブルにのみロードする場合は、ユーザーステージまたはテーブルステージを使用することをお勧めします。詳細については、 ローカルファイルシステムからの一括ロード をご参照ください。
このステップでは、さまざまな種類のサンプルデータファイル用に名前付きステージを作成します。
CSV データファイル用ステージの作成¶
CREATE STAGE を実行して my_csv_stage
ステージを作成します。
CREATE OR REPLACE STAGE my_csv_stage
FILE_FORMAT = mycsvformat;
ステージの作成時に FILE_FORMAT
オプションを指定する場合は、ステージからデータをロードするために使用される COPY コマンドで、同じ FILE_FORMAT
オプションを指定する必要はないことに注意してください。
JSON データファイル用ステージの作成¶
CREATE STAGE を実行して my_json_stage
ステージを作成します。
CREATE OR REPLACE STAGE my_json_stage
FILE_FORMAT = myjsonformat;
データファイルをステージングする¶
PUT を実行して、サンプルデータファイルをローカルファイルシステムから チュートリアル: COPY の使用によるローカルファイルシステムからの一括ロード で作成したステージにアップロード(ステージ)します。
CSV サンプルデータファイルのステージング¶
PUT コマンドを実行して、ローカルファイルシステムから CSV ファイルをアップロードします。
Linuxまたは 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;
コマンドを詳しく見てみましょう。
file://<ファイルパス >[/]contacts*.csv
は、ステージするローカルマシン上のファイルの完全なディレクトリパスとファイル名を指定します。ファイルシステムのワイルドカードが許可されています@my_csv_stage
は、データをステージするステージ名です。auto_compress=true;
は、ステージング時にデータを圧縮するようコマンドに指示します。これもデフォルトです。
このコマンドは、ステージングされたファイルを示す次の結果を返します。
+---------------+------------------+-------------+-------------+--------------------+--------------------+----------+---------+
| 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 | |
+---------------+------------------+-------------+-------------+--------------------+--------------------+----------+---------+
JSON サンプルデータファイルのステージング¶
PUT コマンドを実行して、 JSON ファイルをローカルファイルシステムから名前付きステージにアップロードします。
Linuxまたは 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;
このコマンドは、ステージングされたファイルを示す次の結果を返します。
+---------------+------------------+-------------+-------------+--------------------+--------------------+----------+---------+
| source | target | source_size | target_size | source_compression | target_compression | status | message |
|---------------+------------------+-------------+-------------+--------------------+--------------------+----------+---------|
| contacts.json | contacts.json.gz | 965 | 446 | NONE | GZIP | UPLOADED | |
+---------------+------------------+-------------+-------------+--------------------+--------------------+----------+---------+
ステージングされたファイルをリストする(オプション)¶
LIST コマンドを使用すると、ステージングされたファイルをリストできます。
CSV¶
LIST @my_csv_stage;
Snowflakeは、ステージングされたファイルのリストを返します。
JSON¶
LIST @my_json_stage;
Snowflakeは、ステージングされたファイルのリストを返します。
ターゲットテーブルにデータをコピーする¶
COPY INTO <テーブル> を実行して、ステージングされたデータをターゲットテーブルにロードします。
CSV¶
サンプル CSV ファイルからデータをロードするには、
ファイルの1つ(
contacts1.csv.gz
)からデータをロードすることから始めます。次を実行します。COPY INTO mycsvtable FROM @my_csv_stage/contacts1.csv.gz FILE_FORMAT = (FORMAT_NAME = mycsvformat) ON_ERROR = 'skip_file';
条件:
FROM
句は、ステージングされたデータファイルの場所を指定します(ステージ名の後にファイル名が続きます)。ON_ERROR
句は、 COPY コマンドでファイルにエラーが発生した場合の処理を指定します。デフォルトでは、コマンドは最初のエラーが発生するとデータのロードを停止します。ただし、エラーを含むファイルはスキップし、次のファイルのロードに進むように指示しています。これは単に説明を目的としたものです。このチュートリアルのファイルにはエラーが含まれていません。
COPY コマンドは、コピーされたファイルの名前と関連情報を示す結果を返します。
+-----------------------------+--------+-------------+-------------+-------------+-------------+-------------+------------------+-----------------------+-------------------------+ | 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 | +-----------------------------+--------+-------------+-------------+-------------+-------------+-------------+------------------+-----------------------+-------------------------+
ステージングされたファイルの残りを
mycsvtable
テーブルにロードします。次の例では、パターンマッチングを使用して、正規表現
.*contacts[1-5].csv.gz
に一致するすべてのファイルからデータをmycsvtable
テーブルにロードします。COPY INTO mycsvtable FROM @my_csv_stage FILE_FORMAT = (FORMAT_NAME = mycsvformat) PATTERN='.*contacts[1-5].csv.gz' ON_ERROR = 'skip_file';
ここで、
PATTERN
句は、コマンドがこの正規表現(.*employees0[1-5].csv.gz)
に一致するファイル名からデータをロードする必要があることを指定します。COPY コマンドは、コピーされたファイルの名前と関連情報を示す結果を返します。
+-----------------------------+-------------+-------------+-------------+-------------+-------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------+------------------+-----------------------+-------------------------+ | 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 | +-----------------------------+-------------+-------------+-------------+-------------+-------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------+------------------+-----------------------+-------------------------+
結果の次のハイライトに注意してください。
contacts1.csv.gz
のデータは、既にデータを正常にロードしたため無視されます。これらのファイル
contacts2.csv.gz
、contacts5.csv.gz
、およびcontacts4.csv.gz
のデータは正常にロードされました、2つのデータエラーのため、
contacts3.csv.gz
のデータはスキップされました。このチュートリアルの次のステップでは、エラーを検証および修正する方法について説明します。
JSON¶
contacts.json.gz
ステージングデータファイルを myjsontable
テーブルにロードします。
COPY INTO myjsontable
FROM @my_json_stage/contacts.json.gz
FILE_FORMAT = (FORMAT_NAME = myjsonformat)
ON_ERROR = 'skip_file';
COPY コマンドは、コピーされたファイルの名前と関連情報を示す結果を返します。
+------------------------------+--------+-------------+-------------+-------------+-------------+-------------+------------------+-----------------------+-------------------------+
| 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 INTO コマンドは、最初のエラーが発生したときにファイル1つのロードをスキップしました。すべてのエラーを見つけて修正する必要があります。このステップでは、 VALIDATE 関数を使用して COPY INTO コマンドの前回の実行を検証し、すべてのエラーを返します。
サンプルデータファイルを検証し、エラーを取得する¶
最初に、以前に実行した COPY INTO コマンドに関連付けられたクエリ ID が必要です。次に、クエリ ID を指定して VALIDATE
関数を呼び出します。
クエリ ID を取得します。
Snowsight にサインインします。
Snowsight のロールが、このチュートリアルの SQL ステートメントを実行するために SnowSQL で使用しているロールと同じであることを確認してください。
Monitoring » Query History を選択します。
特定の COPY INTO コマンドの行を選択して、クエリ情報ペインを開きます。
Query ID 値をコピーします。
クエリ ID で表される COPY INTO コマンドの実行を検証し、
save_copy_errors
という名前の新しいテーブルにエラーを保存します。SnowSQL で、次のコマンドを実行します。
query_id
を Query ID 値に置き換えます。CREATE OR REPLACE TABLE save_copy_errors AS SELECT * FROM TABLE(VALIDATE(mycsvtable, JOB_ID=>'<query_id>'));
save_copy_errors
テーブルをクエリします。SELECT * FROM SAVE_COPY_ERRORS;
クエリは次の結果を返します。
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------+-------------------------------------+------+-----------+-------------+----------+--------+-----------+-------------------------------+------------+----------------+-----------------------------------------------------------------------------------------------------------------------------------------------------+ | 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 | +----------------------------------------------------------------------------------------------------------------------------------------------------------------------+-------------------------------------+------+-----------+-------------+----------+--------+-----------+-------------------------------+------------+----------------+-----------------------------------------------------------------------------------------------------------------------------------------------------+
結果は、 mycsvtable/contacts3.csv.gz
に2つのデータエラーがあることを示しています。
Number of columns in file (11) does not match that of the corresponding table (10)
行1で、ハイフンが誤ってパイプ(
|
)文字(データファイルの区切り文字)に置き換えられ、事実上レコードに追加の列が作成されました。Field delimiter '|' found while expecting record delimiter 'n'
行5で、ハイフンの後に追加のパイプ(
|
)文字が導入され、記録が破壊されました。
エラーを修正してデータファイルを再ロードする¶
ローカル環境で、
contacts3.csv
ファイルにある記録のエラーを手動で修正します。PUT コマンドを使用して、変更したデータファイルをステージにアップロードします。変更されたファイルは、既存のステージングされたファイルを上書きします。
Linuxまたは 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;
ステージングされたファイルからテーブルにデータをコピーします。
COPY INTO mycsvtable FROM @my_csv_stage/contacts3.csv.gz FILE_FORMAT = (FORMAT_NAME = mycsvformat) ON_ERROR = 'skip_file';
Snowflakeは次の結果を返し、 contacts3.csv.gz
のデータが正常にロードされたことを示します。
+-----------------------------+--------+-------------+-------------+-------------+-------------+-------------+------------------+-----------------------+-------------------------+ | 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 | +-----------------------------+--------+-------------+-------------+-------------+-------------+-------------+------------------+-----------------------+-------------------------+
ロードされたデータを確認する¶
SELECT クエリを実行して、データが正常にロードされたことを確認します。
CSV¶
SELECT * FROM mycsvtable;
クエリは次の結果を返します。
+----+-----------+------------+----------------------------------+----------------------------------------+----------------+----------------+---------------------------------+------------------+------------+ | 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;
クエリは次の結果を返します。
+-----------------------------------------------------------------+ | 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" | | } | | } | +-----------------------------------------------------------------+
正常にコピーされたデータファイルを削除する¶
ステージからテーブルにデータが正常にコピーされたことを確認した後に、 REMOVE コマンドを使用して内部ステージからデータファイルを削除し、 データストレージ を節約することができます。
REMOVE @my_csv_stage PATTERN='.*.csv.gz';
Snowflakeは次の結果を返します。
+-------------------------------+---------+ | name | result | |-------------------------------+---------| | my_csv_stage/contacts1.csv.gz | removed | | my_csv_stage/contacts4.csv.gz | removed | | my_csv_stage/contacts2.csv.gz | removed | | my_csv_stage/contacts3.csv.gz | removed | | my_csv_stage/contacts5.csv.gz | removed | +-------------------------------+---------+REMOVE @my_json_stage PATTERN='.*.json.gz';
Snowflakeは次の結果を返します。
+--------------------------------+---------+ | name | result | |--------------------------------+---------| | my_json_stage/contacts.json.gz | removed | +--------------------------------+---------+
クリーンアップする¶
おめでとうございます。チュートリアルを無事完了しました。
チュートリアルのクリーンアップ(オプション)¶
次の DROP <オブジェクト> コマンドを実行して、システムをチュートリアルを開始する前の状態に戻します。
DROP DATABASE IF EXISTS mydatabase; DROP WAREHOUSE IF EXISTS mywarehouse;
データベースをドロップすると、テーブルなどのすべての子データベースオブジェクトが自動的に削除されます。