Insight Technology

2022.09.06

【CTO宮地敬史のどんとこいデータ技術】勉学の秋、Snowflakeに触ってみませんか?

このエントリーをはてなブックマークに追加
ctoblog_ogp

皆さんこんにちは! 宮地です。

9月に入りました。(1年はあっという間ですね)食欲の秋、読書の秋、スポーツの秋、勉学の秋・・・、個人的には食欲+スポーツですが、
勉学の秋にもしたいです。

今回から数回、Snowflakeにスポットを当てた内容をお送りします。
Unistore(パブリックプレビュー)、Snowparkの話に入る前に、まずは基本機能であるCOPYについて見ていきます。

COPYは外部ステージ、内部ステージに配置されたファイルをSnowflakeのテーブルにデータとしてロードするコマンドです。
対応しているファイル形式は、構造化ファイル(CSV, TSV等)、半構造化ファイル(JSON, Avro, ORC, Parquet, XML)となります。

ロードの流れは下記のようになります。

ーーーーーーーーーーーー

  1. FILE FORMAT作成
  2. STAGE作成
  3. データをPUT(2.で内部ステージSnowflakeローカルストレージを指定した場合のみ)
  4. データをターゲットテーブルに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のサイズも考慮しましょう、というお話しでした。
次回、データロードについて、もう少しだけ掘り下げていきます。

ページトップへ