0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Snowflake】大規模データをcopy intoで取り組むときのWHサイズと時間とコストについて

Last updated at Posted at 2025-04-22

本記事はあくまで個人の実験結果をまとめたものであり、Snowflakeの性能を保証するものではありません。環境や条件によって結果は変わると思うので、その点をご理解いただければ幸いです。

前提

この記事では、Azure Data Lake Storage(ADLS)に保存されたTPC-DS sf=100000(100TB)のParquetファイルを、SnowflakeのテーブルにUNLOAD(ロード)した際の実行時間とコストについてまとめました。

かなりばらつきのある実験ではありますが、Snowflakeを使った大規模データの取り込みに関する参考情報として活用いただければ嬉しいです🙇

特に以下2点に注目して記録しています。

  • 総コスト(クレジット数)
  • WHサイズ変更による実行時間の変化

13TBクラスの取り込みを約1時間20分で完了できるケースもあり、Snowflakeの性能の高さとWarehouseサイズ設定の容易さをあらためて実感しました。

使用したコード

以下は、ADLSのParquetファイルをSnowflakeにロードする例(web_siteテーブル)

CREATE TABLE web_site(
    web_site_sk INT,
    web_site_id CHAR(16),
    web_rec_start_date DATE,
    web_rec_end_date DATE,
    web_name VARCHAR(50),
    web_open_date_sk INT,
    web_close_date_sk INT,
    web_class VARCHAR(50),
    web_manager VARCHAR(40),
    web_mkt_id INT,
    web_mkt_class VARCHAR(50),
    web_mkt_desc VARCHAR(100),
    web_market_manager VARCHAR(40),
    web_company_id INT,
    web_company_name CHAR(50),
    web_street_number CHAR(10),
    web_street_name VARCHAR(60),
    web_street_type CHAR(15),
    web_suite_number CHAR(10),
    web_city VARCHAR(60),
    web_county VARCHAR(30),
    web_state CHAR(2),
    web_zip CHAR(10),
    web_country VARCHAR(20),
    web_gmt_offset NUMERIC(5, 2),
    web_tax_percentage NUMERIC(5, 2)
);


--一回ステージを挟む
CREATE STAGE web_site_stage
  URL='azure:/<storage_name>.blob.core.windows.net/datalake/tpcds-official-1tb-nopartition/tpc-ds/source_files_001TB_parquet/web_site/'
  CREDENTIALS=(AZURE_SAS_TOKEN='<your token>')
  FILE_FORMAT = ( TYPE = PARQUET);

--ステージから自分のテーブルに書き込める---
COPY INTO web_site
  FROM @web_site_stage
  PATTERN='.*\.parquet'
   MATCH_BY_COLUMN_NAME = 'CASE_INSENSITIVE';

データ生成や構成について

TPC-DS(ADLS保存)をSnowflakeにアンロードする方法や
TPS-DSデータセットの生成方法は以下のリポジトリで公開しています。

結果

総コスト

▶️ 総クレジット:477.46

image.png

▽参考

image.png

WHサイズごとの実行時間

テーブル名 Parquetファイルサイズ(バイト) Parquetファイル数 WHサイズ 実行時間
store_sales 12,910,536,099,204 25,000 4Xlarege 1h 21m 13s
catalog_sales 10,282,929,418,784 10,000 4XLage 1h 5m 43s
web_sales 4,725,217,006,088 5,000 2Xlarege 2h 4m 7s
store_returns 1,480,948,795,656 800 4Xlarege 8m 31s
catalog_returns 995,968,187,799 1,000 X-large 36m 56s
web_returns 487,664,161,272 400 2Xlarege 10m49s
inventory 1,036,259,413 1 Xlarege 6m 44s
customer 5,279,186,503 5 medium 4m 14s
customer_address 972,656,652 10 Xlarege 51s
item 47,354,876 1 Large 11s
customer_demographics 7,784,310 1 Xlarege 4.2s
date_dim 1,854,037 1 Large 3.7s
time_dim 1,129,050 1 Large 1.2s
store 170,728 1 Large 1.3s
promotion 149,104 1 Large 790ms
web_page 93,175 1 Large 1.8s
household_demographics 38,825 1 Large 619ms
web_site 21,636 1 Large 1.1s
warehouse 6,285 1 Large 695ms

所感と学び

  • WHサイズが大きければ処理時間は確実に短縮される
  • COPY INTOによるロード処理は非常に安定しており、13TB超のデータでも1時間半程度で取り込めた

Snowflakeは大規模データの取り込みという観点でも非常に優秀だと感じました。

もし似た構成でデータ連携を考えている方がいれば、この記事が一つの参考になれば幸いです。

修正点・加筆リクエストなどあればお気軽にコメントください!
読んでいただきありがとうございました😊

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?