LoginSignup
2
1

More than 1 year has passed since last update.

Azure Synapse Analyticsでデータをロードする時にファイルは分割した方がいい?分割しなくてもいい?

Posted at

データロード時のファイルは分割した方がいいか?分割しない方がいいか?

Azure Synapse Analytics SQLプールでCSVなどのファイルをロードする場合、ファイルは分割した方が高速にロードできるのか、分割しない方が高速にロードできるのか?
これは結論から言いますと、「ロードするファイルが圧縮されているのか、圧縮されていないかによって異なる」という事のようです。

このポイントについて実際にAzure Synapse Analytics SQLプールで検証を行ってみました。

検証内容

TPCHの「lineitem」データをAzure DataLakeストレージに格納し、DataLakeストレージからSynapse AnalyticsへPolybaseを使ってロードしました。
ロードする件数は600,037,902件となります。
※ロード時のリソースクラスは「xlargerc」に指定。

以下4つのパターンで様々なDWUcにてロード処理を確認しました。

ファイル分割数 1ファイルあたりの容量 圧縮あり
パターン1 60 約1.24GB なし
パターン2 60 約375.45MB gzip圧縮
パターン3 1 約74.11GB なし
パターン4 1 約22.05GB gzip圧縮

パターン1はパターン3のファイルを60分割したものになります。
また、パターン2、パターン4はそれぞれパターン1、パターン3のデータをgzip圧縮したものになります。

検証結果

今回は4つのcDWUにて検証を行いましたが結果は以下の通りです。

パターン1(60分割、非圧縮) パターン2(60分割、gzip圧縮) パターン3(非分割、非圧縮) パターン4(非分割、gzip圧縮)
DW100c 36分59秒 39分11秒 31分56秒 51分01秒
DW500c 6分30秒 5分39秒 6分16秒 41分46秒
DW1000c 3分44秒 3分43秒 4分28秒 45分57秒
DW2000c 2分7秒 1分42秒 2分10秒 44分53秒

検証結果からの考察

今回の検証結果からわかることは非圧縮の場合は、ファイルは分割していようが、分割していまいがロードの時間に大差がないという事です。
よって、非圧縮の時、ファイルが分割されていない場合には、内部で勝手にファイルが分割されパラレルロードしてくれているようです。

一方でファイルが圧縮(gzip)されている場合は、明示的にファイルを分割しなければパラレルロードされないようです。
今回の検証では圧縮されたファイルは、すべてのDWUcでAzure Synapse Analytics SQLプールの最小スペックである、DW100c相当のパフォーマンスしか出ませんでした。

なので、結論は以下の通りです。

非圧縮のファイルのPolybaseによるロード

ファイルの分割はしてもしなくてもどちらでも性能に大差なし。
DWUcの値を大きくすれば、その恩恵を受けることが可能。

圧縮したファイルのPolybaseによるロード

ファイルの分割を推奨。
ファイルを分割しなかった場合、DWUcを大きくしてもその恩恵を受けることが出来ず、DW100cのパフォーマンスとなる。

最後に

今回の結果からは、非圧縮ファイルと圧縮ファイルでの動きの違いが確認出来ました。
結果だけでみると、非圧縮ファイルの方が、分割などの処理を検討する必要がないのでいいように思います。

ただ、今回の検証で着目したのはあくまで、DataLakeストレージからSynapse Analyticsへのロード処理の部分です。
一方で、システム全体のワークロードから考えると、非圧縮ファイルの場合以下のようなステップとなると思います。
①非圧縮ファイルのDataLakeストレージへのアップロード
②DataLakeストレージからAzure Synapse Analyticsへのロード

また、圧縮ファイルの場合のステップは以下の通りです。
⓪ファイルの圧縮
①非圧縮ファイルのDataLakeストレージへのアップロード
②DataLakeストレージからAzure Synapse Analyticsへのロード

ファイルを圧縮するのか、非圧縮のままでいいのかは上記の⓪~②までの全体のワークロードを鑑みて決定する必要がありそうです。
そして、圧縮ファイルを取り込むとなった場合には、必ず分割を検討した方が良さそうです。

ちなみにファイルを60に分割したのは、Azure Synapse Analytics SQLプールのディストリビューションの数が60である為です。
一方で今回の検証から言えることは、ファイルの分割数は60ではなく、300に分割した方が理想的かもしれません。
これはDW6000c以上のDWUcになった場合に上手くリソースを使いきれない可能性があるためです。
(こんなに大きなDWUcで動かすことはめったにないので、そこまで気にする必要が無いかもしれませんが。。。)

2
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
2
1