この記事は何?
Snowflake Advent Calendar 2021 の3日目の記事です。
今日の記事は小ネタ&出オチです。
あなたは Snowflake を知っているか?
新進気鋭のSnowflake、昨年はニューヨーク証券取引所に上場もはたしたユニコーン企業です。
製品カテゴリはDWH(データウェアハウス)。
要するに超高速なデータベース製品。
さばけるデータスケールは数百億行以上だったり、ペタクラスだったり、これまで世の中に革命を起こした最強のデータベースです。
そんな Snowflake ですが、実はグッズが売ってます。
そんなイケてる Snowflake 皆さんファンになっちゃいますよね?
なっちゃいますよね?
ファンですよね?
そんなあなたに、実はグッズが売っているんです。
↓
https://www.snowflake-store.com/
おすすめ
おすすめは上記のスクショにも載ってますが、「PRAY FOR SNOW TEE」です。
なんとなく Oracle への当てこすりかなって気持ちになりますよね。
おすすめです。
さて、そんなOracleを意識したSnowflakeですが
けっこう、Oracle由来かなって感じの機能が色々あります。
例えば1日目でもかいた DUAL表 。
今日はもう一つ紹介します。
CONNECT BY
CONNECT BY
????
これもSQLの構文です。
構文はこんな感じ
SELECT <column_list> [ , <level_expression> ]
FROM <data_source>
START WITH <predicate>
CONNECT BY [ PRIOR ] <col1_identifier> = [ PRIOR ] <col2_identifier>
[ , [ PRIOR ] <col3_identifier> = [ PRIOR ] <col4_identifier> ]
どんなやつ?
FROM句
に指定したテーブルを START WITH
の条件に指定された行を起点に、CONNECT BY に指定された結合条件で、ループのように探索していく動き方をします。
例えば、下記のようなテーブルが有るとき
こういうSQLを流すと
select employee_id, manager_id, title
from employees
start with title = 'President'
connect by
manager_id = prior employee_id
order by employee_id;
こうなります
Presidentから結合条件に指定された条件を使って、探索していってるのがわかるでしょうか?
再起を使った木の探索みたいですね。
SYS_CONNECT_BY_PATH
SYS_CONNECT_BY_PATH
を使うと、階層構造用の文字列を生成できます。
select sys_connect_by_path(title, ' -> '), employee_id, manager_id, title
from employees
start with title = 'President'
connect by
manager_id = prior employee_id
order by employee_id;
あら、ちょっと便利じゃない?
まとめ
- Snowflake ファンはグッズをご検討ください。みんなで PRAY FOR SNOW しよう!
- CONNECT BY で木を探索できる。木構造をガンガンテーブルに突っ込もう!(会社組織とか、製品を構成する部品の依存関係とか、よくやるよね?)
さぁレッツSnowflake!!!