【2024/12/13】Snowflake女子会第三弾 in 東京でLTしちゃった話
はじめに
この記事はちゅらデータアドベントカレンダー18日目の記事です。
こんにちは。ちゅらデータのkayoです。
2024年12月13日(金)にSnowflake女子会 in が開催されました。
女子会という名前ですが、今回は男女問わずのユーザー会として開催されました。
ありがたくもLT枠で発表させていただきましたので、LTで発表した内容となりますが、Snowflakeの「マイクロパーティション」についてOracle Database機能と比較してみましたので本記事でもご紹介したいと思います。
私はつい数か月前までOracle Databaseエンジニアでしたが、転職してデータエンジニアとなりSnowflakeを学び始めました。
今回比較してみましたが、まだ比較できていない部分もあると思います。この記事ではその一部だとご理解いただけると幸いです。また、私が使っていたOracle Databaseのバージョンもせいぜい19Cくらいでし、OCIも使った経験はありません。もし、Oracle DatabaseやSnowflakeについて誤りを見つけた方は、優しく教えていただけると嬉しいです。
こんな方向け
- Oracle Databaseは知ってるがSnowflakeはこれから学ぶ方
- Snowflakeのマイクロパーティションをこれから学ぶ方
開催日時、場所
- 2024年12月13日(金) 18:30 ~ 20:30
- CCCMKホールディングス様 渋谷ガーデンタワー9F
発表資料
発表内容
Snowflake「マイクロパーティション」を Oracle Databaseと比較する
Oracle Database「パーティション・テーブル」
Oracle Databaseでパーティションと聞くと「パーティション・テーブル」をイメージしました。
「パーティション・テーブル」は下図のように一つの大きなテーブルをデータベース内部で複数の領域に分割したテーブルの事を指します。
Snowflakeの「マイクロパーティション」
一方、Snowflakeの「マイクロパーティション」はデータを分割して圧縮してストレージに格納する仕組みのことを指します。Oracle Databaseの「パーティション・テーブル」と全然違う概念ですね。
Snowflakeの「マイクロパーティション」はデータが更新されても「マイクロパーティション」は更新されません。新規で「マイクロパーティション」が追加されます。
入れ替わった過去の履歴データはEnterprise Editionの場合は1~90日間は参照可能です。過去の履歴データにアクセスする機能のことをTime Travelといいますが、 このTime Travelに設定した期間を終えた後はFail-safeというサポートに連絡して復旧する機能があります。
※Fail-safeもEnterprise Edition以上のEditionが必要となります。期間は7日間です。
Snowflake「マイクロパーティション」とOracle Database「パーティションテーブル」は、仕組みとテーブルとで異なりますが、パーティション・プルーニングのみ類似しています。
どちらも参照したいデータ以外のファイルを読み飛ばしてパフォーマンス向上を図ります。ただし、Snowflakeの「マイクロパーティション」は特に意識せず自動的に行われる仕組みとなりますが、Oracle Databaseの「パーティション・テーブル」はテーブル作成時にパーティション設定が必要となります。
もう少し踏み込んで、実データを格納する入れ物も比較してみました。
Snowflake「マイクロパーティション」のファイルとOracle Database「データブロック」の比較です。
以下表のように全て異なるのですが、特に覚えておきたい点は更新状態です。Snowflakeのファイルは不変(immutable)で更新時にファイルは更新されず新規でファイルが作成されるという点です。この挙動が後術するTime Travelやゼロコピークローンを実現しています。
Snowflake「マイクロパーティション」良いところ
Snowflakeの「マイクロパーティション」がざっくり分かったところで、「マイクロパーティション」だと何が嬉しいのか?というところをご紹介したいと思います。
本記事では、「Time Travel」と「ゼロコピークローン」について、またまたOracle Databaseと比較しながらご紹介します。
まずは、Snowflake「Time Travel」!!と、Oracle Database「Flashback機能」を比べてみます。
どちらも誤って削除されたデータの復元可能ですが、戻れる期間が異なります。SonwflakeはEnterprise Editionだと1~90日ですがOracle DatabaseだとUNDO保存期間で決まります。簡単に説明するとSnowflakのようにデフォルト1日という設定はなく、データ更新が多いと戻れる期間も少なくなる、という意味になります。
ここはSnowflakeユーザーは読み飛ばしてもらってかまいません。気になる方だけ読んでください。
UNDO保存期間、保存保障について順を追って説明すると以下3つで決まります。
- 表領域サイズ ※表領域はテーブルや索引を格納する領域名
- 保存期間
- 保存保障
考え方としては、
- 「表領域」が無制限なら「保存期間」(秒)に設定した期間まで戻れる
- しかし、「表領域」はほとんどの環境で有限と思いますので「保存期間」未満でもデータ更新が多いと「領域」がいっぱいになる
- 古い過去データは上書きされてしまう
- 戻れる期間が短くなる
- 「保存保障」は「保存期間」に設定した期間は必ず戻れる
が、逆にデータ更新がエラーで更新不可となる危険な設定
という流れです。ややこしいですね。ちなみにUNDOは過去データを保持する役割を持つデータのことを指します。詳しく知りたい方はORACLE MASTERを勉強してみるとよいと思います。
最後に、「ゼロコピークローン」についてです。
Snowflakeの「ゼロコピークローン」は物理的な「マイクロパーティション」のファイルコピーはせず、メタデータだけを複製する機能となっており、余分なストレージ増えない画期的な機能となっております。複製されたテーブルはお互いに影響はしません。
一方、Oracle Databaseにも複製機能はありますが、Snowflalkeのように物理コピーをしない複製機能はありません。複製するとストレージも増えます。ただし、OCIについては未調査なので似たような機能があるかもしれません。いつか機会があれば調べてみたいです。
まとめ
- 新しいサービスも、なじみあるサービスと比べて学べば理解度が上がる
- Snowflake「マイクロパーティション」とOracle Databaseの「パーティション」は
「仕組み」と「テーブル」で異なるがパーティション・プルーニングのみ類似 - Snowflake「Time Travel」 は Oracle「Flashback Query」と類似するが戻れる期間は異なる
- Snowflale「ゼロコピークローン」のように物理コピーをしない機能はOracle Databaseには類似機能なし(OCIにあるのか不明)
- Snowflake「マイクロパーティション」とOracle Databaseの「パーティション」は
参考
今回Snowflakeを学ぶために様々な資料、ブログで勉強させていただきましたのでここにご紹介いたします。ありがとうございました。
Snowflake女子会公式note
所感
今回、Snowlflake女子会でLTさせていただきありがとうございました。他の登壇者の方は内容が濃く発表も慣れていらっしゃる方たちでしたのでとても勉強になりました。私はまだ学び始めたばかりなのですが、発表の機会をいただけたこと本当に感謝しています。
言い訳になりますが、LT発表時間10分に対して発表前に『時間が押してるので巻きで!』と言われてしまったので、かなり早口でしゃべってしまいました。。元々のスライド数も多かったので単純に発表スライドを飛ばせばヨカッタと発表後に後悔しました>_<
当日参加された方やTouTubeでご覧になった方はお聞き苦しかったかと思いますが、そうゆう背景があったんだな、と察して頂けると嬉しいです。(ホントいいわけです、ゴメンナサイ)
発表はとても緊張しましたが、他の方の登壇を聞くことはもちろんのこと、自分の発表についても再度調査や検証をしたり改めて学ぶことも多くありとても良い経験になりました。これからもっと手を動かしてアウトプットもして成長していきたいと思います。
それにしてもユーザー会は楽しいですね~!まだ最初の一歩を踏み出したところなのでこれから勉強してSnowflake女子会をもっと押していきたいと思います!!
下の写真が私です。10年前に好きだったコスプレをやってみましたw(余談ですが、10年で10kg太って服が入らないので上から羽織ってるだけです (´∀`;))
あ、最後に。LTでは言いそびれましたが、私はママエンジニアです。微力ながらSnowflake女子会の幹事もさせていただいています。
女性エンジニアはまだまだ少ない印象ですが安心してください、ママでもエンジニアできます!これから結婚出産される方は不安な方もいらっしゃるかもしれません。だけど、何とかなると思いますので結婚出産後も自分のキャリアも諦めずに進んでもらえたら嬉しいです。
それでは長くなりましたが、最後までお読みいただきありがとうございました。
またどこかでお会いしましょう~♪
Discussion