Snowflakeいいよね

この記事は複数のアドベントカレンダーに登録してしまった。
[Snowflakeアドベントカレンダー](https://adventar.org/calendars/5085)と[ちゅらデータアドベントカレンダー](https://qiita.com/advent-calendar/2020/churadata)だ。
すまない。この時期は書かなければいけない記事が多すぎるので、許してほしい。

# Snowflakeいいよね？

いいんすよSnowflake。
マジで。
使ってます？Snowflake
え？知らない？
いけないなーそれは…
※ポエムです

こんなポエムをアドベントカレンダーの2日目に持ってくる勇気。
叩くなら私を叩くのです。

**各クラウドプラットフォームの製品が私の偏見で叩かれる話です。
これは読みたくないぞと思った人はここで去るのじゃ。**

# Snowflakeの簡単な紹介

とりあえず、[本家サイト](https://www.snowflake.com/)。

ざっくり紹介すると…
1. SnowflakeはDWH製品です
2. マルチクラウドプラットフォーム(AWS,GCP,Azure)に対応してます。
3. 元Oracleのエンジニアが中心になって2012年に会社が作られました。
4. 2020年9月にIPOしていて、すでに時価総額は920億ドル。オラクルの1736億ドルの半分超えた。(書いてる日の話）
5. Redshift,BigQuery,Synapseと競合できるだけのパフォーマンスや機能性を持ってる。
6. とにかくSnowflakeは最高。

すごい悪い紹介の仕方をすると
**AWSでも使えるBigQuery**

いや、これは色んな所から怒られそうだな。
※筆者の理解度の低さが表現されてしまってますね
※このあたりでまさかり飛ばしたい人がツッコミどころを探し始めるはず

# アーキテクチャの話

SnowflakeはRedshiftのRa3系クラスタと同じように、ストレージとコンピューティングが分かれたアーキテクチャ。
でもSnowflakeはコンピューティングユニットであるウェアハウスの起動が一瞬（よっぽど大きなサイズを指定しなければ1秒もかからない）。
Redshiftのクラスタは下手をすると数時間かかったりする。

*Redshiftさー？一時停止と復帰でなんであんなに時間かかるの？*

もちろん起動(作成)だけじゃなくて、コンピューティングユニットのサイズの変更もRedshiftより圧倒的に早く、それは一瞬で終わる。

さすがにアーキテクチャレベルで古いRedshiftと新しいSnowflakeを比べるのは可愛そうになるレベル。
※ポエムなんで許してください。

Synapseはあまりくわしくないので、引き合いには出しません。

Snowflakeのウェアハウスの起動の速さ、SnowflakeはBigQueryのように裏ではコンピューティングユニットのリソースを他のユーザと共有してるモデルなのかな？

BigQueryは速度がほしいとき、チューニングが大変。
でもSnowflakeだととりあえずウェアハウスのサイズをでかくすると解決することが圧倒的に多いので、これもとても良い点。

もしSnowflakeで不思議に遅いクエリとかを見つけたらサポートに問い合わせると、すぐ直してくれたりする。
カジュアルにSQLコンパイラを修正してくれたので、神だなSnowflakeってなって、私はちょろいからマジでSnowflakeに惚れてしまった。

# 料金面の話

BigQueryの課金形態はスキャンしたデータのサイズ、もしくは固定料金で500スロットと、プラスしてストレージ。
Snowflakeはコンピューティングに使われるウェアハウスの実行時間と、プラスしてストレージ。
2つは結構似たような感じの料金感覚になるかも。

例外的なケースとして、BigQueryでたまにやるUDFでゴリゴリ計算させるけどデータをスキャンしてないからクソ安！みたいなハックな使い方は残念ながらSnowflakeではできない。
でもあまり本質的じゃないから無視しよう。

Snowflakeのストレージの料金はS3の金額とあまり変わらない。
そしてウェアハウスも抜群のパフォーマンスなので、実行時間ベース課金のくせに基本的に安い。

さて、可愛そうなRedshiftの話をしよう。
コスト面が鬼門のRedshiftは3年のリザーブドインスタンスを買うか、最近出た一時停止機能を使って、夜間停止で金額を節約する必要がある。
※なんもしてないお金持ちについては、いいっすね～って感じ
これはレガシーなアーキテクチャに引っ張られたRedshiftのUXの悪い面だ。

そんなわけで料金的な話ではRedshiftとSnowflakeはお話にならない。

ただ、使い方によっては24,365でDWHにクエリを投げ続けるようなワークロードをするなら、Redshiftのほうが安くなる。
Snowflakeの安さは使わなくなったら即停止、その間は無課金なところにあると思う。

他には、ストレージの話をするときSnowflakeよりRedshiftのほうが圧縮効率が良いケースがある。
なのでこの場合、ごく稀だが引き合いに出る場合がある。でも例外ケースかな。
もし今後、大きな改善がRedshiftに起こらないなら、AWSでDWHが欲しくなったら料金面ではSnowflake一択だと思う。

例によってSynapseはあまりくわしくないので、引き合いには出しません。

# 今ある資産のパターンとSnowflakeに行く意味とか

さて、ちょっとマイグレーションの話を強引にしよう。

## AWSでS3にデータレイク+RedshiftでDWHなケース

今すぐSnowflakeに乗り換えていい。
しかも別にRedshiftを止めずに、S3をSnowflakeから外部テーブルとして認識させるだけで、とりあえずのマイグレができる。
この場合、Snowflakeはストレージ課金されないし、Snowflakeで検証するときだけコンピューティングコストがかかるだけなので、非常に気軽にPoCができる。
おすすめ。
だいたいのケースでPoCが成功して、Redshiftを停止することができて、圧倒的コストカットと、10倍近いパフォーマンスが手に入る。

このパターンはSnowflakeにする価値が一番ある。
そして、このパターンはAWSがおすすめしている構成からのマイグレなので、対象となるユーザが多い。

## AWSでS3とAthenaやEMRでデータ分析基盤

今すぐSnowflakeに乗り換える必要はないけど、やったほうがいい。
Athenaの無情なエラーは辛いでしょ？
もう嫌だ。
意味分かんない。
何回かクエリすると通ったり、なんで落ちたのかわからないクエリのデバッグとか最高にストレス。
Athenaはprestoだからちゃんとわかってる人が見ると、それなりにデバッグできるんだけど、サポートに聞いたほうが早い、しかし解決につながらないことも多い。
Athenaはアドホックな研究用途のクエリとかじゃないと辛い。

EMRは高い。EMRでやってることにもよるのだけど、SQLでできるやろそれみたいな（SparkはSparkSQLの実行環境やろ？）ケースなら、SnowflakeのSparkコネクタもお試しください。
EMRの維持費よりだいたい安くなる。半額くらい？

そもそもレガシーなSparkベースのクエリエンジンと、ピカピカでクラウドネイティブなSnowflakeのクエリエンジンが勝負になると思えない。
※繰り返すけど、ポエムだから許してください


## GCPでBigQueryに全部入れてる

これはあんまり移行するメリットはないけれど、BigQueryを遅く感じるなら、Snowflakeを検討したほうがいい。
データのマイグレーションはそれなりに時間とコストがかかる。
BigQueryのデータをGCSに吐き出しておけば、Snowflakeから外部テーブルとしてクエリ可能になるので、一部データでPoCするのがおすすめ。
イマイチだったらBigQueryにロックインされててもいいかもしれない。
でも私はSnowflakeをおすすめする。
いやじゃん今更BigQuery。
いや、心のどこかでいいかなって思う自分もいるけどね。

## Azure

とりあえず、AWSにデータを移行して、Snowflakeでクエリするようにしよう。
※ポエムです
もうよくわからん障害は嫌だし、Azureのドキュメントは読みたくない。本当に。

# とまぁ・・・

こんな感じに、感じの悪いポエムを書いてみた。
きっと各クラウドプラットフォーマーの人が見たら言いたいことがあると思う。
ベンダーロックインしたい気持はよく分かる。
~~でもGoogleはイービルだし、AWSは不誠実、Azureは障害多いな。~~

別にSnowflakeだっていつイービルになるかわからないけれど…
だけど現環境で最強のDWHはSnowflakeこれだけは今のこの瞬間は私はそう確信してる。
株価もっと上がってくれ！！！！（本音）

# 結論

みんな好きなの使え
私は勝手にSnowflake使ってお客様に本質的な価値を（**そんなものがあると仮定して**）届けるのに専念するから
※正直どの製品でもいいんだわ（あ、裏切った）