第3章. Snowflake SQL
この作品はAIを使って翻訳されている。ご意見、ご感想をお待ちしている:translation-feedback@oreilly.com
この章では、より高度なSnowflake SQL関数のいくつかを見ていく。まず、Snowflakeの実行順序について見てから、さまざまなウィンドウ関数に移り、どこで使えるかを見ていこう。続いて、Snowflakeの地理空間関数について学ぶ。
実行順序
Snowflakeは非常に論理的なSQL句の実行順序に従っている。しかし、QUALIFY 節が導入されたことで、少し面白くなった。ウィンドウ関数やQUALIFY を使用している多くの Snowflake ユーザは、何がいつ実行されるのか、それがクエリの結果にどのように影響するのかについて混乱していた。 要するに、QUALIFY 節はデータをフィルタリングするので、WHERE 節と非常に類似性がある。しかし、実行順序がQUALIFY 節と異なるため、混乱が生じる。SnowflakeはSQL句を以下の順序で実行する:
-
FROM -
WHERE -
GROUP BY -
HAVING -
WINDOW -
QUALIFY -
DISTINCT -
ORDER BY -
LIMIT
次のクエリを実行するとどうなるかを見てみよう:
SELECT*FROMlegendsWHEREfirst_name='Cristiano'ANDlast_name='Ronaldo';
これは単純なクエリで、非常に単純なWHERE 節で詳細を抽出している。この場合、Snowflakeは最初にFROM 句を実行し、Snowflakeにどのテーブルからデータを読み取るかを指示する。次に、WHERE 節が来る。これは、Snowflake にどのデータをフィルタリングするか、言い換えれば、どのマイクロパーティション分割を読み取り、どのマイクロパーティション分割をスキップするかを指示する。
GROUP BY とHAVING 節に移ろう。GROUP BY は、フィルタリングされたデータに対してWHERE 節の後に実行され、データの集約、フィルタリングに使用される。 HAVING 節は、GROUP BY 節の結果をフィルタリングするのに役立つ。何千人もの従業員、その部署、100ドルから5,000ドルまでの給料のレコードを持つEmployees という名前のテーブルがあるとしよう。
この2つのクエリを表3-1で見てみよう。
| クエリ1 | クエリ2 |
|---|---|
|
|
| このクエリは、employeesテーブルを読み取り、部門ごとにグループ化し、その部門のすべての給与の合計を取り、最後に、その部門のすべての従業員の給与の合計が1000未満である部門をフィルタリングする。このクエリは、"給与合計が1000未満の部門を教えてください "というリクエストに対する答えである。 | このクエリは、employeesテーブルを読み取り、給与が1000未満の従業員をフィルタリングし、部署ごとにグループ化し、その部署に残っている給与の合計を取る。このクエリは、"部署ごとの給与が1000未満の従業員の給与合計を教えてください ... |
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access