#概要
HiveでのWITH句についての解釈が曖昧だったので残しておきます。
##WITH句を用いた例
.sql
WITH number_list as (
--番号テーブルからnumberを抽出
SELECT
number
FROM
number_table
WHERE
partition='aa'
)
SELECT
number
FROM
--先ほど定義したnumber_listから
number_list
##間違ったWITH句の解釈
WITH のあとに定義した名前に、WITH句内の処理結果を格納し、
一つのテンポラリテーブルのように使用できる便利な機能です。
(sqlからこっちのイメージが強かったのです...)
##実際のWITH句
WITH のあとに定義した名前で、WITH句内の処理を呼び出すことができる機能です。
##まとめ
WITHを使用したとき、WITH句内の処理内容を格納しているわけではなく、
毎回呼び出して処理を行っています。
そのため、
毎回処理結果が変わる処理
(・リアルタイムに更新される来客者テーブルから、現在の来客者を抽出
・毎回値が変化するサンプリング結果 など)や、
重い処理をWITH句に書くとき(毎回処理を実行するので時間がかかる)などは
一旦テーブルを作成してしまうことを推奨します。
##参考
https://cwiki.apache.org/confluence/display/Hive/Common+Table+Expression