У меня есть UDF (GetUrlExt), который возвращает расширение. (например: jpg в /abc/models/xyz/images/top.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;
Любой вид помощи оценен по достоинству!
Вы можете сгруппировать по расчетному значению, просто не в состоянии использовать псевдоним столбца, на котором функция [применяется] (https://cwiki.apache.org/Hive/languagemanual-udf.html#LanguageManualUDF-GROUPingandSORTingonf%2528column%2529). Таким образом, можно указать 'GROUP BY GetUrlExt (uristem)', но подзапрос, вероятно, лучше. – libjack
Спасибо, оба работали с большой разницей в времени выполнения. – Seenu