2

ドメイン/キー/値の一意の組み合わせでグループ化された、ドメイン、キー、値、およびカウントを含むテーブルを生成するハイブ クエリを実行しようとしています。

データの例:

http://www.aaa.com/path?key_a=5&key_b=hello&key_c=today&key_d=blue
http://www.aaa.com/path?key_a=5&key_b=goodb&key_c=yestr&key_d=blue
http://www.bbb.com/path?key_a=5&key_b=hello&key_c=today&key_d=blue
http://www.bbb.com/path?key_a=5&key_b=goodb&key_c=ystrd

望ましい出力:

aaa.com | key_a | 5 | 2
aaa.com | key_b | hello | 1
aaa.com | key_b | goodb | 1
aaa.com | key_c | today | 1
aaa.com | key_c | yestr | 1
aaa.com | key_d | blue | 2
bbb.com | key_a | 5 | 2
bbb.com | key_b | hello | 1
bbb.com | key_b | goodb | 1
bbb.com | key_c | today | 1
bbb.com | key_c | ystrd | 1
bbb.com | key_d | blue | 1

これが私が使ってきたものです:

"select parse_url(url,'HOST'), str_to_map(parse_url(url,'QUERY'),'&','='), count(1) from url_table group by select parse_url(url,'HOST'), str_to_map(parse_url(url,'QUERY'),'&','=') limit 10;"

どこが間違っていますか?特に私がめちゃくちゃだと思う場所は次のとおりです: str_to_map(parse_url(url,'QUERY'),'&','=') クエリ文字列を複数のキーと値のペアに分割する方法がわからないため、次に、正しくグループ化します。

4

3 に答える 3

2

これは、横方向のビュー爆発の助けを借りて実現できます。

これはうまくいくはずです:

hive> select parse_url(url,'HOST') as host, v.key as key, v.val,
count(*) as count from url u LATERAL VIEW
explode(str_to_map(parse_url(url,'QUERY'),'&','=')) v as key, val
group by parse_url(url, 'HOST'), v.key, v.val;
于 2013-10-02T20:08:13.800 に答える