0
Help us understand the problem. What are the problem?
Organization

あなたはSnowflake Tシャツの買い方を知っているか?それとCONNECT BY

この記事は何?

Snowflake Advent Calendar 2021 の3日目の記事です。
今日の記事は小ネタ&出オチです。

あなたは Snowflake を知っているか?

新進気鋭のSnowflake、昨年はニューヨーク証券取引所に上場もはたしたユニコーン企業です。
製品カテゴリはDWH(データウェアハウス)。
要するに超高速なデータベース製品。

さばけるデータスケールは数百億行以上だったり、ペタクラスだったり、これまで世の中に革命を起こした最強のデータベースです。

そんな Snowflake ですが、実はグッズが売ってます。

そんなイケてる Snowflake 皆さんファンになっちゃいますよね?
なっちゃいますよね?

ファンですよね?

そんなあなたに、実はグッズが売っているんです。

https://www.snowflake-store.com/
Snowflake_Snowstore_-_Snow_gear_for_Snowflake_partners.png

おすすめ

おすすめは上記のスクショにも載ってますが、「PRAY FOR SNOW TEE」です。
なんとなく Oracle への当てこすりかなって気持ちになりますよね。

おすすめです

さて、そんなOracleを意識したSnowflakeですが

けっこう、Oracle由来かなって感じの機能が色々あります。
例えば1日目でもかいた DUAL表

今日はもう一つ紹介します。

CONNECT BY

CONNECT BY ????

これもSQLの構文です。

公式ドキュメント:CONNECT BY

構文はこんな感じ

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 に指定された結合条件で、ループのように探索していく動き方をします。

例えば、下記のようなテーブルが有るとき

Worksheet_-_問題づくり__1_1__in_1_17s_-_Done-2.png

こういうSQLを流すと

select employee_id, manager_id, title
  from employees
    start with title = 'President'
    connect by
      manager_id = prior employee_id
  order by employee_id;

こうなります

Worksheet_-_問題づくり__1_1__in_368ms_-_Done.png

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;

Worksheet_-_問題づくり__1_1__in_362ms_-_Done.png

あら、ちょっと便利じゃない?

まとめ

  • Snowflake ファンはグッズをご検討ください。みんなで PRAY FOR SNOW しよう!
  • CONNECT BY で木を探索できる。木構造をガンガンテーブルに突っ込もう!(会社組織とか、製品を構成する部品の依存関係とか、よくやるよね?)

さぁレッツSnowflake!!!

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
0
Help us understand the problem. What are the problem?