Я недавно перешел от использования Presto к Hive. У меня есть следующий сценарий. Столбцы A, B, C. Я хочу агрегировать по A и найти значение B, для которого значение C минимизировано. В Presto вы можете что-то вроде этого
SELECT A, min_by(B, C) from <TABLE> GROUP BY A
Теперь я хочу сделать то же самое в Улей. Но, к сожалению, я не смог найти UDF, подобный этому, нигде в документации. Теперь я знаю, что могу сделать следующее
SELECT A, COALESCE(B, 0)
from <TABLE> as primary
JOIN (
SELECT A, MIN(C) as C FROM <TABLE> GROUP BY A
) secondary
ON primary.A = secondary.A AND primary.C = secondary.C\
GROUP BY A
У меня 2 проблемы с этим решением
- Это совсем не лаконично.
- Это тоже не эффективно. Я делаю дополнительный в результате подзапрос и дополнительное агрегирование и дополнительный JOIN. Было бы неплохо иметь поддержку агрегации первого класса для такой функции.
Есть ли способ достичь того, что я пытаюсь сделать, не написав свой пользовательский UDF?