У меня есть таблица Hive 'Orders' с четырьмя столбцами (id String, name String, Order String, ts String). Пример данных таблицы приведен ниже.
-------------------------------------------
id name order ts
-------------------------------------------
1 abc completed 2018-04-12 08:15:26
2 def received 2018-04-15 06:20:17
3 ghi processed 2018-04-16 11:36:56
4 jkl received 2018-04-05 12:23:34
3 ghi received 2018-03-23 16:43:46
1 abc processed 2018-03-17 18:39:22
1 abc received 2018-02-25 20:07:56
Столбец Заказ имеет три полученных состояния -> обработано -> выполнено. Есть много заказов на одно имя, и у каждого есть эти три этапа. Мне нужно последнее значение порядка для заданных «id» и «name». Это может показаться вам вопросом новичка, но я застрял с этим.
Я пытался писать запросы, как показано ниже, но они не работают, и я не мог использовать функцию max напрямую в столбце 'ts', как в формате String. Пожалуйста, посоветуйте лучший метод.
Заранее спасибо.
Запросы, которые я пробовал
SELECT
ORDER
FROM Orders
WHERE id = '1'
AND name = 'ghi'
AND ts = (
SELECT max(unix_timestamp(ts, 'yyyy-MM-dd HH:mm:SS'))
FROM Orders
)
Ошибка при компиляции оператора: FAILED: ParseException строка 2: 0 не может распознать ввод вблизи 'select' 'max' '(' в спецификации выражения
SELECT
ORDER
FROM Orders
WHERE id = '1'
AND name = 'ghi'
AND max(unix_timestamp(ts, 'yyyy-MM-dd HH:mm:SS'))
Ошибка при компиляции оператора: СБОЙ: SemanticException [Ошибка 10128]: строка 1:93 Еще не поддерживается место для UDAF 'max'
select o.order from Orders o
inner join (
select id, name, order, max(ts) as ts
from Orders
group by id, name, order
) ord on d.id = ord.id and o.name = ord.name and o.ts = ord.ts where o.id = '1' and o.name = 'abc'
Этот запрос был выполнен, но выходные данные представляют собой не один последний этап заказа, а каждый этап заказа с соответствующей последней отметкой времени.
Пожалуйста, помогите.