2012-11-20 45 views
4

我有一個返回擴展名的UDF(GetUrlExt)。 (例如:/abc/models/xyz/images/top.jpg中的jpg)。 的數據是像圖所示:蜂巢:UDF和GROUP BY

Date Time TimeTaken uristem 
9/5/2011 0:00:10 234 /abc/models/xyz/images/top.jpg 
9/5/2011 0:00:11 456 /abc/models/xyz/images/bottom.jpg 
9/5/2011 0:00:14 789 /abc/models/xyz/images/left.gif 
9/5/2011 0:00:16 234 /abc/models/xyz/images/top.pdf 
9/5/2011 0:00:18 734 /abc/models/xyz/images/top.pdf 
9/5/2011 0:00:19 654 /abc/models/xyz/images/right.gif 
9/5/2011 0:00:21 346 /abc/models/xyz/images/top.pdf 
9/5/2011 0:00:24 556 /abc/models/xyz/images/front.pdf 
9/5/2011 0:00:26 134 /abc/models/xyz/images/back.jpg 

而不 'GROUP BY' 查詢工作正常:

SELECT GetUrlExt(uristem) AS extn FROM LogTable; 

結果: JPG JPG GIF PDF PDF GIF PDF pdf jpg

現在我需要'GROUP BY'GetUrlExt UDF的結果。
預期結果:
JPG 3 274.6
GIF 2 721.5
PDF 4 467.5

但下面的查詢不工作:

SELECT GetUrlExt(uristem) AS extn, Count(*) AS PerCount, Avg(TimeTaken) AS AvgTime FROM LogTable GROUP BY extn; 

任何形式的幫助表示讚賞!

回答

4

請使用子查詢進行分組。

Hive不直接支持按計算值分組。

SELECT a.extn, Count(*) AS PerCount, Avg(TimeTaken) AS AvgTime 
FROM 
(
    SELECT GetUrlExt(uristem) AS extn, TimeTaken 
    FROM LogTable 
) a 
GROUP BY a.extn; 
+0

您可以通過計算值組,只是不能使用列別名上的功能已被[應用](https://cwiki.apache.org/Hive/languagemanual-udf.html#LanguageManualUDF-GROUPingandSORTingonf%2528column%2529)。所以可以指定'GROUP BY GetUrlExt(uristem)',但子查詢可能更好。 – libjack

+0

謝謝,兩者在執行時間上沒有太大的區別。 – Seenu

0

您可以通過別名啓用組,或者你需要在組的整個聲明

SELECT GetUrlExt(uristem) AS extn, Count(*) AS PerCount, Avg(TimeTaken) AS AvgTime 
FROM LogTable 
GROUP BY GetUrlExt(uristem);