我在GROUP BY语句中成功使用了复杂类型(在我的案例图中)。 但是当我尝试在PARTITION BY语句中使用map时,我收到一个错误:
SELECT
*,
MIN(dt) OVER(PARTITION BY some_map)
FROM some_table
失败:SemanticException无法将窗口调用分解为组。至少有一个组必须仅依赖于输入列。还要检查循环依赖性。基础错误:分区表达式(TOK_TABLE_OR_COL query_params)不是可比较的表达式
在PARTITION BY语句中,hive是否支持复杂类型? 如果没有,如果我需要保留所有其他列值(我不能执行GROUP BY),我该怎么办?
我的意思是什么?例如,我有一个表user_queries
:
user_id|query_params |result_position|dt
1 |{'text':'query1'} |0 |2017-04-01 10:00
1 |{'text':'query1'} |1 |2017-04-01 12:00
1 |{'text':'query2'} |0 |2017-04-01 13:00
2 |{'text':'query1'} |0 |2017-04-01 09:00
我执行此查询:
SELECT
user_id,
query_params,
position,
MIN(dt) OVER(PARTITION BY user_id, query_params) AS dt
FROM user_queries
我想得到这个(看看第二行的dt):
user_id|query_params |result_position|dt
1 |{'text':'query1'} |0 |2017-04-01 10:00
1 |{'text':'query1'} |1 |2017-04-01 10:00
1 |{'text':'query2'} |0 |2017-04-01 13:00
2 |{'text':'query1'} |0 |2017-04-01 09:00
答案 0 :(得分:0)
select user_id
,query_params
,result_position
,min(dt) over
(
partition by user_id
,sort_array (map_keys (query_params))
,sort_array (map_values (query_params))
) as min_dt
from user_queries