使用窗口函数时,hive是否支持PARTITION BY语句中的复杂类型?

时间:2017-04-13 13:57:08

标签: hive hiveql

我在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

1 个答案:

答案 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