側面図は、分割、爆発などの 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 が出現した回数を数えることです。 構成の手順は次の通りです。
  1. 次のように 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
  2. 集計の統計
    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”