皆さんこんにちは! 宮地です。
9月に入りました。(1年はあっという間ですね)食欲の秋、読書の秋、スポーツの秋、勉学の秋・・・、個人的には食欲+スポーツですが、
勉学の秋にもしたいです。
今回から数回、Snowflakeにスポットを当てた内容をお送りします。
Unistore(パブリックプレビュー)、Snowparkの話に入る前に、まずは基本機能であるCOPYについて見ていきます。
COPYは外部ステージ、内部ステージに配置されたファイルをSnowflakeのテーブルにデータとしてロードするコマンドです。
対応しているファイル形式は、構造化ファイル(CSV, TSV等)、半構造化ファイル(JSON, Avro, ORC, Parquet, XML)となります。
ロードの流れは下記のようになります。
ーーーーーーーーーーーー
- FILE FORMAT作成
- STAGE作成
- データをPUT(2.で内部ステージSnowflakeローカルストレージを指定した場合のみ)
- データをターゲットテーブルにCOPY
ーーーーーーーーーーーー
※今回は、1、 2は事前に作成したものを使用しています。
それでは早速試してみましょう。
[入力ファイル]
事前にQlik Replicate(弊社取り扱い製品)を使用して、Snowflakeにロードしたテーブルからparuquetファイルを下記コマンドで作成します。
■発行コマンド
copy into @STG_TS_NO2/ from lineitem
file_format = (type=parquet)
header=true
max_file_size = 262144000;
これで、サイズ250Mのファイルが142個作成されました。(約35GB)
次に、COPYコマンドを使用してテーブルにデータをロードします。
■発行コマンド
copy into lineitem_copy(
L_SHIPDATE, L_ORDERKEY, L_DISCOUNT, L_EXTENDEDPRICE, L_SUPPKEY, L_QUANTITY,
L_RETURNFLAG, L_PARTKEY, L_LINESTATUS, L_TAX, L_COMMITDATE, L_RECEIPTDATE,
L_SHIPMODE, L_LINENUMBER, L_SHIPINSTRUCT, L_COMMENT, EXPIRATIONDATE, ROWSTATUS)
from(
select
$1:L_SHIPDATE::TIMESTAMP_NTZ(9), $1:L_ORDERKEY::NUMBER(38,20), $1:L_DISCOUNT::NUMBER(38,20),
$1:L_EXTENDEDPRICE::NUMBER(38,20), $1:L_SUPPKEY::NUMBER(38,20), $1:L_QUANTITY::NUMBER(38,20),
$1:L_RETURNFLAG::VARCHAR(1), $1:L_PARTKEY::NUMBER(38,20), $1:L_LINESTATUS::VARCHAR(1),
$1:L_TAX::NUMBER(38,20), $1:L_COMMITDATE::TIMESTAMP_NTZ(9), $1:L_RECEIPTDATE::TIMESTAMP_NTZ(9),
$1:L_SHIPMODE::VARCHAR(10), $1:L_LINENUMBER::NUMBER(38,20), $1:L_SHIPINSTRUCT::VARCHAR(25),
$1:L_COMMENT::VARCHAR(44), $1:EXPIRATIONDATE::NUMBER(38,0), $1:ROWSTATUS::VARCHAR(255)
from
@STG_TS_NO2/)
file_format = (type=parquet);
よしよし、エラーにならずに動作しているぞ。
ただ、ロード完了までに51分も掛かってしまいました。
処理のプロファイルを確認してみると・・・
次にWarehouseの状態を確認します。
Warehouseのロードが高くなっていますね。
SnowflakeのCOPYでは並列処理が可能な為、もう少し大きなWarehouseに変更したら
速くなりそうです。
今回は、WarehouseサイズをXSでテストしていたので、XLに変更して再度テストしてみます。
おお! 4分28秒!速くなりましたね!
処理のプロファイルを確認してみると・・・
プロファイル自体は先程とほぼ変化なしですが、
Warehouseのロードが先程より低くなっています。
今回は、COPYコマンドでデータをロードする際にはWarehouseのサイズも考慮しましょう、というお話しでした。
次回、データロードについて、もう少しだけ掘り下げていきます。