Snowflake速度を上げ課金額を下げるコツ

Snowflakeのメリットは、ウェアハウスの概念により、クエリの実行タイミングで速度と課金額を調整しやすい点です。この点は、他の列指向DBと比較して評価できる点です。例えば、夜間ジョブでは小さめのウェアハウスによりゆっくり時間をかけ処理をかけ低額を目指し、日中はユーザの待ち時間を最小にするために大きめのウエアハウスを選択します。待ち時間と費用のバランスを取ることができます。なお、このウェアハウスの変更では、データベースの移行は不要です。

ただ、データをロードする際、データとマシーンの動作を理解した上でウェアハウスを正しく設定しないと、費用と速度のバランスが悪くなります。大規模データを高速にロードしたいからと言って、大きめのウェアハウスを闇雲に設定すれば良いわけではないです。

例えば、数十GBの一つのファイルを毎日洗い替えでSnowflakeにロードするシナリオを考えます。ウェアハウスXSではロードに時間がかかりすぎるため、ウェアハウスをLに変更してみます。すると、ロード時間は夜間バッチ的にはOKであるが、意外とコストがかかることが判明したりします。XSとLでは立ち上がるマシーンとCPUの数が異なります。一つのファイルの場合、オーバーヘッド時間が発生することにより、無駄にマシーンが立ち上がっている可能性があります。そのような場合、一つのファイルをチャンクに区切って小さめの多くのファイルにすると、無駄が少なくなる可能性があります。エンジニアの話では、1つの大きなファイルより、100-250MBくらいのファイルに分割された状態で一括ロードするのがベストプラクティスということです。

参考資料

docs.snowflake.com

古幡征史