Как сделать условие IF на структуру в hql Несоответствие типа аргумента - PullRequest
0 голосов
/ 11 марта 2020

у меня есть таблица "hadoop_table", которую я хочу взять из нее самую последнюю цену предмета, если он относится к типу участия, когда я попробовал этот запрос

SELECT item_id  ,max(IF(type = 'participate', struct(timestamp, price), 0 )).col2   AS latest_price FROM hadoop_table  group by item_id  ;

я получаю эту ошибку:

FAILED: SemanticException [Error 10016]: Line 1:74 Argument type mismatch '0': The second and the third arguments of function IF should have the same type, but they are different: "struct<col1:bigint,col2:double>" and "int" (state=42000,code=10016)

поэтому я изменяю запрос на

SELECT item_id  ,max(IF(type = 'participate', struct(timestamp, price), struct(0,0) )).col2   AS latest_price FROM hadoop_table  group by item_id  ;

как мне принять последнее значение цены просто типа = участвовать в более чистом стиле? потому что этот запрос не очень читабелен и понятен? есть ли встроенный IF для структуры в HQL?

пример даты:

+-----------------+--------------+----------------------------+--------------+
| timestamp        | price       |         item_id            |        type  |
+-----------------+--------------+----------------------------+--------------+
| 15533           | 499.0        | LABANKDWR                  | participate  |
| 44533           | 599.0        | LABANKDWR                  |No_participate|
| 999999          | 699.0        | ddddddddddddd              | participate  |
+-----------------+--------------+----------------------------+--------------+

ожидаемый результат:

+-----------------+-----------------------+
|      | price    |         item_id       |     
+-----------------+-----------------------+
|   499.0         | LABANKDWR             |   
|   699.0         | ddddddddddddd         |    
+-----------------+--------------+--------+
...