❄️

Frosty Friday Live Challenge Vol.6 Week13 & Week14

がく@ちゅらデータエンジニアです!

先日より、以前からやってみたかったFrosty Fridayをやる深夜RADIO的な番組を始めました。
一緒にメインMCをやってるのが、Tableau DataSaber時代からの友達の @tomowk1 さん♪

Frosty Fridayとは

https://frostyfriday.org/

2022年07年に最初のお題が投稿されたSnowflakeのスキルアップを目的とした学習コンテンツです。
1週間〜2週間に一度、Snowflakeに関するお題が出題されます。
レベル的には、初級、中級、上級があります。
Frosty Fridayへの参加方法は、

  • 作ったコードをご自身のGithubなどで公開
  • そのURLをお題(Week1など)にコメントを記載

回答は”公式”にはありません!
ただ、世界中でSnowflakeを使っている人のチャレンジの結果が閲覧でき、すごく参考になり面白いです。

Snowflake実務者の方々のノウハウが知れるコンテンツとなっています
現時点(2024年6月現在)で、Week98 まで出題されています。
後発ではありますが、Week1から順番にお題を進めています。

Frosty Friday Live Challenge Vol.6

今回は
Week13 - Intermediate Last not null
Week14 - Basic JSON
です。

https://www.youtube.com/watch?v=GqLZEnGr9vg

タイムラインはこちら

0:00 オープニング
3:15 What's New : Snowflake の Streamlit のカスタム UI / Trust Center GA/Organization Overview Page - GA
9:18 Topics:SnowVillage Unconference #2 / Terragrunt で始めるマルチアカウント Snowflake 環境構築
14:21 Frosy Fridayとはなんぞや
16:09 Week13 Intermediate Last not null 問題説明
17:58 Week11解法①
24:15 Week11 解法②
28:55 Week14 Basic JSON 問題説明
29:45 Week12 解法①
39:57 クロージング

直近の話題からピックアップ

What's New

  • SnowflakeのStreamlitのカスタムUI
  • Trust Center - GA
  • Organiation Overview Page - GA
    • リリースノート
    • Balance Remaining (残りクレジット・・・じゃない、残金が出てる!!!)
    • ただ、リセールで買った場合は出ない(はず)
    • 今までは、使ったコストはわかっていたけど、契約でいくらクレジットを買ったかはでていなかったはずで、それを別途管理して、引き算をする形で残クレを出していた気がします

Snowflake関連トピック

取り上げたのは以下の2つ

https://techplay.jp/event/949829
こちらは、タシロも参加予定!Frosty Fridayのことをお話できるといいなぁ

https://zenn.dev/simpleform_blog/articles/20240701-multi-account-snowflake-with-terragrunt
もともとインフラに強い方が、SnowflakeもIaCで管理したらどう??という感じで、めちゃくちゃわかりやすいです。Terragruntは使ってみないとなぁって思ってます
※タシロもterraformちゃんとやらにゃなぁって改めて思いました

Frosty Friday Live Challenge

今回は

Week13 - Intermediate Last not null →ゲストのMizuhoさん
Week14 - Basic JSON → 私が担当

です。

解説は動画を見てください!

Week13 - Intermediate Last not null →ゲストのMizuhoさん

https://www.youtube.com/watch?v=GqLZEnGr9vg&t=16m09s

問題

今週は、理解するのは非常に簡単ですが、SQL で実行するのは難しい、少し紛らわしい問題を取り上げます。

https://frostyfriday.org/blog/2022/09/09/week-13-basic-snowflake-intermediate-non-snowflake/

Mizuhoさんのコードはこちら

https://github.com/mizuhoruisui/Frosty_Friday/blob/main/FrostyFriday_week13.txt

タシロの解法

私のコードは・・・・
https://github.com/gakut12/Frosty-Friday/blob/main/week13_intermediate_last_not_null/week13.sql

私の方は追加で

  • ASOF JOIN を使った解法
  • 自己結合をつかった古き良き?SQLでの解法
    でといています。

ASOF JOINは、SQLっぽくてとても直感的でわかりやすかったです
SQLのWINDOW関数って、集合言語?的ではなく、なんとなくSQLでは異質でわかりにくいなぁとはおもうのですが、ASOF JOINの記法はSQLっぽくてとても直感的にわかりやすかったです

自己結合、セルフジョインですが、こちらの解法でも解いてみました
自己結合ってほんと良くわからないですよね・・・・
でも、自己結合も、CTE(With句)を使うと思ったよりもわかりやすくなりました!
ONで >= などを使うのが肝ですね!

Week14 - Basic JSON

https://www.youtube.com/watch?v=GqLZEnGr9vg&t=28m55s

問題

今週は、テーブルを JSON VARIANT オブジェクトに変換します。
普通、JSON形式のデータをテーブルに取り込むことが多いと思いますが、今回はその逆を行います

ここにはスーパーヒーローのセットに関する情報を含むテーブルがあります。
このテーブルを JSON VARIANT オブジェクトに変換することです。
例は、
https://frostyfriday.org/wp-content/uploads/2022/09/result.png
にあるので、こちらを再現してください

  • country_of_residence
  • superhero_name
  • superpowers

※カラム名は小文字で出力
※superpower, second_superpower, third_superpowerをARRAY型へ
※superpowerがない場合は、undefined と表示

https://frostyfriday.org/blog/2022/09/16/week-14-basic/

私のコードはこちら
https://github.com/gakut12/Frosty-Friday/blob/main/week14_basic_json/week14.sql

肝は

  • ARRAY_CONSTRUCT_COMPACT
  • object_construct(*)
    の2つですね!

ARRAY_CONSTRUCT_COMPACTは、追加した要素がnullの場合は入らないのが使いやすい
object_construct(*)は勝手にきれいにしてくれる
OBJECT_CONSTRUCT( [<key1>, <value1> [, <keyN>, <valueN> ...]] ) みたいにかくこともできます

INFER_SCHEMAで使う場合に大きなテーブルの場合、SQLの最大値を超える場合があるので、その場合は、OBJECT_CONSTRUCT( [<key1>, <value1> [, <keyN>, <valueN> ...]] )  記法で書くことを推奨されていますね

https://docs.snowflake.com/ja/sql-reference/functions/infer_schema

という注意が記載されていますね

ちゅらデータ株式会社

Discussion