❄️

SnowPro Core資格への道~Part1 Snowflakeとは・3層構造~

に公開

みなさまこんばんは。m.fujitaです。
noteでもブログを書いているのですが、
SnowPro Core資格を3ヶ月後に取ろうという目標のもと、勉強会で学んだことはzennでアウトプットしていこうと思い立ちこちらの記事を書きます。
目標が資格なので、テストに出るポイントは★をつけて、あとで復習しようと思います。

勉強会

Snowflake Rookies Camp幹事の裏目標として、
SnowPro Coreの合格を目指してみようと思いつきました。(Snowflake女子会に影響されたっていうのが一番大きい)
というわけで、横澤さんに勉強会を開催していただき本日は自分なりの解釈をアウトプットしていこうと思います。

Snowflakeとは

Snowflakeは「AI Data Cloud」と呼ばれております。

AI Data Cloudと呼ばれている所以は以下の通りです。
・色々な種類のデータを一つにまとめて、AIに必要なデータを集めやすくしている
・AIの分析に必要な大量の計算を、素早く、そして効率的に行うことができる
・AIの技術をSnowflakeの中で直接使えるようにしている

重要な3層構造について


Snowflake Rookies Campでも横澤さんがご説明してくださったように、
・クラウドサービス層
・コンピュート層
・ストレージ層
の3層のアーキテクチャ(構造)
であるからこそ、Snowflakeの処理が速い理由なのではないかと感じました。

ストレージ層

一番内側のストレージ層のところからのご説明でした。

列指向(カラムナストレージフォーマット)

ここも、Snowflake Rookies Campで教えてもらった部分です。
Snowflakeは物理データを列指向で格納しています。
COPY INTOがSnowflakeではINSERTより速い、とSnowflake Rookies Campで教えてもらったことは業務でもすごく役に立っています。
実際INSERT(行挿入)で数百万件で1日かかるものが、COPY INTO(列挿入でのロード・アンロード)では1分かからず処理が終わってびっくりでした。

マイクロパーティション

マイクロパーティションは以前酒徳さんがSnowflake WESTユーザー会で出しておられたこちらのスライドをご参照ください。
というのと自分用にメモとしてリンクを載せておきます。
https://docs.google.com/presentation/d/1PabfRSyOzNaQ2Anr2Zimaio2KrYiqZidhRpsxcWfk4A/edit?slide=id.p#slide=id.p

今日教わったのは、マイクロパーティションがなぜ処理を高速化できるのかです。

出典 https://docs.snowflake.com/ja/user-guide/tables-clustering-micropartitions
上記の画像のように、データはマイクロパーティション単位で保存されます。
圧縮前は50~500MBですが、圧縮後は16MBになります★

マイクロパーティションはInsert/Update/Delete処理をしても
書き換わることがない(イミテーション(不変)★)です。
以下画像のようにInsert/Update/Delete処理をした場合には、新しいマイクロパーティションが作成されて(Micro Partition5-8)そこにデータが格納されます。
この原理を使うことで
・タイムトラベル
・ゼロコピークローンが容易になります

出典 https://docs.snowflake.com/ja/user-guide/tables-clustering-keys

【感想】
マイクロパーティションの原理がわかって初めてタイムトラベルのイメージがわきました。
言葉だけだと、「小さなタンスの引き出しに1個ずつデータが入っている、でなんで引き出しが必要なんだっけ?」
って疑問があったので、言葉で説明してもらうことで理解が深まりました。

クラスタリング

途中、クラスタリングも話題に挙がりました。
画像を再掲しますが、ストレージ層でいう「クラスタリング」というのは、
「SnowflakeでSelectなどデータを呼び出すときに格納しているデータを精緻にすること」になります。(という風に私は理解しました)
下記の画像によると、Micro Partition1-4の状況だとTypeもDateもバラバラに格納されていますが、

出典 https://docs.snowflake.com/ja/user-guide/tables-clustering-keys

ALTER TABLE <name> CLUSTER BY ( date, type )

のSQLを発行することで、ストレージ層に格納されているデータがPartitionごとに精緻に並ぶようになります。
これは、SQLを発行する時点で並ぶわけではなく、ゆっくりと時間をかけて並んでいくらしく
その時間をかけて実行されている間はコストがかかるとのこと。
なので、クラスタリングをするかしないかは実行環境や状況による、とのことでした。

パーティションブルーニング

上記のクラスタリングを行うことでクエリが効率化されることを「パーティションブルーニング」といいます。

具体的には
Dateが11/2のものを取得したい!となった場合、上記の画像によるとPartition5とPartition6を呼び出すだけで済みます。Partition7と8はDate:11/2のデータがないため、検索する必要がありません。

コンピュート層

Snowflakeのコストについてはコンピュート層が左右しているといっても過言ではありません。
これも勉強するまで知らなかったです。

ウェアハウス

ウェアハウスにはサイズによってかかるコストが変わります。
単位はクレジットです。コストは契約プランによって変わるそうです。
クレジットはXS→Sは2倍、それ以降は2乗になることを覚えておけばよさそうです。★

出典 https://docs.snowflake.com/ja/user-guide/warehouses-overview)

ウェアハウスの設定はGUIだとここから可能です。

クレジットのことはここにも書いてありました。

Snowflake Rookies Campでも学んだところなのですが、
ウェアハウスを分けておくことで
・部署ごとのコスト
・ツールごとのコスト
などの管理ができます。

データ加工ツールで使用するウェアハウスとBIツールで使用するウェアハウスを分けることで
それぞれの処理を独立させることができます。
部署ごとにウェアハウスを分けることでコスト管理が容易になるので、企業で導入する際は、部署ごとにウェアハウスを設定するのがよさそうです。

自動再開・自動停止

自動停止

ウェアハウスが「アイドル状態になってから」~分間経過したら、ウェアハウスが自動停止しますよ
という設定になります。
あくまで、アイドル状態になってからなので、Streamlit in Snowflakeなどの画面が開いている間はずっとウェアハウスが動き続けている状態になるため、自動停止の設定は動かないそうです。

自動再開

自動停止しているウェアハウスを使って、SQLを動かしたときに自動再開をするかどうかの設定です。
ただし、再開まで時間がかかります。

ウェアハウスは、コストに大きく左右されるため使っていない時は停止しておくのがよさそうです。
ただし、何分間で停止するのが妥当かというと、クエリ負荷などその時の状況によるとのこと。

マルチクラスターウェアハウス

マルチクラスターウェアハウスとは並列で何台まで使用できるか、という設定になります。
複数人がクエリを実行したときに1クラスターより複数クラスターがあった方がそれぞれの処理が速くなります。

スケーリングポリシー

マルチクラスターウェアハウスの最小と最大を設定するとスケーリングポリシーが表示されます。

・スタンダード
 ウェアハウスを即増やす(減らす)
・エコノミー
 6分待ってから増やす(減らす)

スケーリングポリシーについては、あくまで最小と最大の範囲に相違がある場合となっています。
例えば、最小2、最大2となった場合クラスターを増やしたり減らしたりのアクションをしないため、設定が非表示になります。

今いくつのクラスターを使っているかは、ウェアハウスのクラスターの列を見るとわかるようになっています。

クラウドサービス層

クラウドサービス層には実はメタデータが保存されています。

格納されているメタデータ
・最大値/最小値(MAX/MIN)
・行数(COUNT)
・重複を除いた値の数(DISTINCT)

上記のメタデータのみでSelectをした場合、コンピュート層まで読まなくても結果が出せるため
コンピュート層を検索しなくていい→クレジットがかからないということになります。

ただし、テーブル全体で検索する場合だけです。
WHERE文や、Group By句を条件にした場合は、コンピュート層、ストレージ層を検索するそうです。

おまけ

「CTAS(シータス)って何ですか?」って聞いたところ
「Create Table As Select」の略です、とのこと。
初めて知ったのですが、データ界隈の皆様はよく知っている略語なのでしょうか?

まとめ

4/30の勉強会を元に、
・Snowflakeとは
・重要な3層アーキテクチャ
について自分なりに調べてアウトプットしてみました。

普段Snowflakeを使っている上では、あまり意識しなくていいので
覚えるのを敬遠していた部分でした。
今回アウトプットすることで分かったことは、Snowflakeを知るということは
裏側の構造を勉強することと表裏一体なんだなということでした。

横澤さんに大事なお時間をいただいて教えてもらっているので、頑張ります!
7月末の合格を目指して勉強していきます。
見守っていてください。

Discussion