Frosty Friday Live Challenge Vol.6 Week13 & Week14
がく@ちゅらデータエンジニアです!
先日より、以前からやってみたかったFrosty Fridayをやる深夜RADIO的な番組を始めました。
一緒にメインMCをやってるのが、Tableau DataSaber時代からの友達の @tomowk1 さん♪
Frosty Fridayとは
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
です。
タイムラインはこちら
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つ
こちらは、タシロも参加予定!Frosty Fridayのことをお話できるといいなぁ
※タシロもterraformちゃんとやらにゃなぁって改めて思いました
Frosty Friday Live Challenge
今回は
Week13 - Intermediate Last not null →ゲストのMizuhoさん
Week14 - Basic JSON → 私が担当
です。
解説は動画を見てください!
Week13 - Intermediate Last not null →ゲストのMizuhoさん
問題
今週は、理解するのは非常に簡単ですが、SQL で実行するのは難しい、少し紛らわしい問題を取り上げます。
Mizuhoさんのコードはこちら
タシロの解法
私のコードは・・・・
私の方は追加で
- ASOF JOIN を使った解法
- 自己結合をつかった古き良き?SQLでの解法
でといています。
ASOF JOINは、SQLっぽくてとても直感的でわかりやすかったです
SQLのWINDOW関数って、集合言語?的ではなく、なんとなくSQLでは異質でわかりにくいなぁとはおもうのですが、ASOF JOINの記法はSQLっぽくてとても直感的にわかりやすかったです
自己結合、セルフジョインですが、こちらの解法でも解いてみました
自己結合ってほんと良くわからないですよね・・・・
でも、自己結合も、CTE(With句)を使うと思ったよりもわかりやすくなりました!
ONで >= などを使うのが肝ですね!
Week14 - Basic JSON
問題
今週は、テーブルを JSON VARIANT オブジェクトに変換します。
普通、JSON形式のデータをテーブルに取り込むことが多いと思いますが、今回はその逆を行います
ここにはスーパーヒーローのセットに関する情報を含むテーブルがあります。
このテーブルを JSON VARIANT オブジェクトに変換することです。
例は、
にあるので、こちらを再現してください
- country_of_residence
- superhero_name
- superpowers
※カラム名は小文字で出力
※superpower, second_superpower, third_superpowerをARRAY型へ
※superpowerがない場合は、undefined と表示
私のコードはこちら
肝は
- 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> ...]] ) 記法で書くことを推奨されていますね
という注意が記載されていますね
Discussion