hive lateral view文(Hive wikiから翻訳)
3744 ワード
Lateral View構文
説明
Lateral viewはsplit,explodeなどのUDTFとともに使用され,1行のデータを複数行のデータに分割でき,これに基づいて分割後のデータを集約できる.lateral viewはまず元のテーブルの各行にUDTFを呼び出し、UTDFは1行を1行または複数行に分割し、lateral viewは結果を組み合わせて、別名テーブルをサポートする仮想テーブルを生成します.
例
2つのデータがあるテーブルpageAdsがあるとします.1番目のカラムはpageid string、2番目のカラムはadid_リスト、すなわちカンマで区切られた広告IDの集合:
string pageid
Array adid_list
"front_page"
[1, 2, 3]
"contact_page"
[3, 4, 5]
すべての広告IDがすべてのページに表示される回数を統計します.
まず、広告IDを分割します.
実行結果は次のとおりです.
string pageid
int adid
"front_page"
1
"front_page"
2
"front_page"
3
"contact_page"
3
"contact_page"
4
"contact_page"
5
次に集約の統計を示します.
実行結果は次のとおりです.
int adid
count(1)
1
1
2
1
3
2
4
1
5
1
複数のlateral view文
1つのFROM文の後に複数のlateral view文を含めることができ、後のlateral view文は前のすべてのテーブルとカラム名を参照することができます.次の表を例にとります.
Array col1
Array col2
[1, 2]
[a", "b", "c"]
[3, 4]
[d", "e", "f"]
lateralView: LATERAL VIEW udtf(expression) tableAlias AS columnAlias (',' columnAlias)*
fromClause: FROM baseTable (lateralView)*
説明
Lateral viewはsplit,explodeなどのUDTFとともに使用され,1行のデータを複数行のデータに分割でき,これに基づいて分割後のデータを集約できる.lateral viewはまず元のテーブルの各行にUDTFを呼び出し、UTDFは1行を1行または複数行に分割し、lateral viewは結果を組み合わせて、別名テーブルをサポートする仮想テーブルを生成します.
例
2つのデータがあるテーブルpageAdsがあるとします.1番目のカラムはpageid string、2番目のカラムはadid_リスト、すなわちカンマで区切られた広告IDの集合:
string pageid
Array
"front_page"
[1, 2, 3]
"contact_page"
[3, 4, 5]
すべての広告IDがすべてのページに表示される回数を統計します.
まず、広告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
5
1
複数のlateral view文
1つのFROM文の後に複数のlateral view文を含めることができ、後のlateral view文は前のすべてのテーブルとカラム名を参照することができます.次の表を例にとります.
Array
Array
[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 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
"a"
2
"b"
2
"c"
3
"d"
3
"e"
3
"f"
4
"d"
4
"e"
4
"f"
の では、2つのlateral viewが される で されることに してください.
https://cwiki.apache.org/confluence/display/Hive/LanguageManual+LateralView#
http://blog.csdn.net/inte_sleeper/article/details/7196114