側面図は、分割、爆発などの UDTF と組み合わせて使用されます。 データの行を複数の行に分割し、分割されたデータをこれに基づいて集計できます。 横方向のビューは、最初に元のテーブルの各行に対して UDTF を呼び出します。 UTDF は 1 つの行を 1 つ以上の行に分割します。 側面図は結果を組み合わせて、エイリアステーブルをサポートする仮想テーブルを生成します。
シングルラテラルビューステートメント
構文:
lateralView:LATERAL VIEW [OUTER] udtf(式)tableAlias AS columnAlias( '、' columnAlias)* from句:FROM baseTable(lateralView)*
ノート:
- 外側ビュー外側:表関数が行を出力しない場合、対応する入力行は側面ビューの結果に残り、すべての表関数出力リストは NULL になります。
例:
2 列のデータを持つ "pageAds"というテーブルがあるとします。最初の列は "pageid 文字列"、2 番目の列は "adid_list"、AD ID のカンマ区切りのコレクションです。
→string pageid | Array<int> adid_list |
---|---|
“front_page” | [1, 2, 3] |
“contact_page” | [3, 4, 5] |
要件は、すべての AD ID が出現した回数を数えることです。 構成の手順は次の通りです。
- 次のように AD ID を分割します。
SELECT pageid, adid FROM pageAds LATERAL VIEW explode(adid_list) adTable AS adid;
実行結果は次のとおりです。string pageid int adid “front_page” 1 “front_page” 2 “front_page” 3 “ contact_page” 3 “ contact_page” 4 “ contact_page” 5 - 集計の統計
SELECT adid, count(1) FROM pageAds LATERAL VIEW explode(adid_list) adTable AS adid GROUP BY adid;
結果:int adid count(1) 1 1 2 1 3 2 4。 1 50 1
複数の側面ビューステートメント
from ステートメントの後に複数の Lateral View ステートメントを続けることができます。後続の Lateral View ステートメントは、以前のすべてのテーブルと列を参照できます。
次の表が例として示されています。
Array<int> col1 | Array<string> col2 |
---|---|
[1, 2] | [“a”, “b”, “c”] |
[3, 4] | [“d”, “e”, “f”] |
- 単一のステートメントを実行します。
SELECT myCol1, col2 FROM baseTable LATERAL VIEW explode(col1) myTable1 AS myCol1;
結果:int mycol1 Array<string> col2 1 [“a”, “b”, “c”] 2 [“a”, “b”, “c”] 3 [d”, “e”, “f”] 4 [d”, “e”, “f”] - 次のように Lateral View ステートメントを追加します。
SELECT myCol1, myCol2 FROM baseTable LATERAL VIEW explode(col1) myTable1 AS myCol1 LATERAL VIEW explode(col2) myTable2 AS myCol2;
結果は次のとおりです。int myCol1 string myCol2 1 “a” 1 “b” 1 “c” 2 “あ” 2 “ b” 2 “ c” 3 “d” 3 “e” 3 “f” 4 “d” 4 “e” 4 “f”