2017-05-12 9 views
0

@文字ごとに1つずつ列を分割するクエリを作成しようとしています。私は、各セグメント内でこれらを数えたいと思っています。ハイブで分割とカウントを組み合わせる方法

私はハイブで次のクエリを記述するために管理している:

SELECT 
distinct split (msg_txt,'\\@')[0] AS first_msg, count(*) 
FROM table1 
; 

が、これは私がカウントを取得するためにしてグループを追加することはできません。

SELECT first_msg, count(*) 
FROM (
SELECT 
distinct split (msg_txt,'\\@')[0] AS first_msg 
FROM table1 
) 
GROUP BY first_msg 
; 

をしかし、これは私に次のエラーを与える:私は、サブクエリでこれをやってみました

Error while compiling statement: FAILED: ParseException line 7:6 missing EOF at 'BY' near 'GROUP' 

私はこのクエリを書くことができますどのようにわかりません。

もし誰かがアドバイスしてくれれば本当に感謝します。

ありがとうございます。私はあなただけのテーブルの別名が必要だと思う

答えて

0

SELECT first_msg, count(*) 
FROM (SELECT distinct split(msg_txt,'\\@')[0] AS first_msg 
     FROM table1 
    ) t 
GROUP BY first_msg; 

Hiveは表の別名が必要です。お使いのバージョンで

The subquery has to be given a name because every table in a FROM clause must have a name.

、それはサブクエリの名前としてGROUP扱います。 BYは意味をなさない。書かれたよう

あなただけ行うことができますので、これは少し無意味です:

SELECT distinct split(msg_txt,'\\@')[0] AS first_msg, 1 as cnt 
FROM table1; 

サブクエリ内distinctは、すべての値が一意であることを保証します。あなたの実際の問題はもう少し複雑だと私は考えています。

+0

私はなぜこれがdownvoteを引く見当がつかない。答えは正しいです。 –

0

あなたの要件に基づいて、私は最初の要素を得ている理由はわかりません。スプリットの最初の要素を無視するクエリ@ 『「あなたはすべての要素分割を含めたい場合は、この

select value, count(*) from (
select 
pos,value 
from table1 lateral view posexplode(split (msg_txt,'\\@')) explodedcol as pos,value limit 10 
) t where pos != 0 group by value 
; 

のようになります(@あなたが後にすべての要素のグループを適用する検討)』 、ちょうどwhere句から「ポスト!= 0」の状態を削除します。

よろしく、

関連する問題