Выберите значения из столбца A
на основе соответствующих значений в столбце Y
и значений из столбца B
на основе соответствующих значений в столбце Z
.Смысл в том, чтобы сравнить значения aid
и bid
, где каждое из них было выбрано в соответствии с различными критериями / столбцами.Ниже приведен иллюстративный пример:
У меня есть таблица со строками, подобными следующей:
id n aid bid prob1
a 3 155321341 155303877 0.03014809320294261
a 4 155303877 155321341 0.05024180995725168
Я хотел бы сохранить aid
, связанный с самым высоким n
, и сохранитьbid
с самым высоким prob1
.Короче говоря, я хотел бы что-то вроде следующего:
id n aid bid prob1
a 4 155303877 155321341 0.05024180995725168
Я пытался:
SELECT DISTINCT
id,
MAX(n) OVER (PARTITION BY aid) AS max_n_atthisaid,
aid, bid,
MAX(prob1) OVER (PARTITION BY bid) AS max_prob1_atthisbid
FROM table.a;
Но, возможно, по причинам, очевидным для других, это не сработало.
- ОБНОВЛЕНИЕ: я попробовал приведенный ниже код Гордона, и он отлично работал (однако следует отметить, что более старые версии Hive могут не поддерживать DISTINCT
с «оконными» функциями, поэтому он может не работать для других):
SELECT DISTINCT id,
FIRST_VALUE(aid) OVER (PARTITION BY id ORDER BY n DESC) AS max_n_atthisaid,
FIRST_VALUE(bid) OVER (PARTITION BY id ORDER BY prob1 DESC) AS max_prob1_atthisbid
FROM table.a;
Однако я также хочу увидеть MAX(n)
и MAX(prob1)
, поэтому я попытался:
SELECT DISTINCT id,
FIRST_VALUE(aid) OVER (PARTITION BY id ORDER BY n DESC) AS max_n_atthisaid,
MAX(n) AS max_n,
FIRST_VALUE(bid) OVER (PARTITION BY id ORDER BY prob1 DESC) AS max_prob1_atthisbid,
MAX(prob1) AS max_prob1
FROM table.a;
Но получил следующую ошибку:
FAILED: SemanticException [Error 10128]: Line 4:7 Not yet supported place for UDAF 'MAX'
Это потому, что мне не разрешено использовать MAX
с оконной функцией или по какой-то другой причине, с которой я незнаком?