Hive 当使用窗口函数时,配置单元是否支持PARTITION BY语句中的复杂类型?

Hive 当使用窗口函数时,配置单元是否支持PARTITION BY语句中的复杂类型?,hive,hiveql,Hive,Hiveql,我已经在GROUPBY语句中成功地使用了复杂类型(在我的示例映射中)。 但当我尝试在PARTITION BY语句中使用map时,我得到一个错误: 选择 *, MIN(dt)OVER(由某个_图划分) 从一些表格中 失败:SemanticException无法将窗口调用拆分为组。至少有1个组必须仅依赖于输入列。还要检查循环依赖关系。基本错误:分区表达式(TOK_TABLE_或COL query_params)不是可比较的表达式 那么,配置单元是否支持PARTITION BY语句中的复杂类型? 如果

我已经在GROUPBY语句中成功地使用了复杂类型(在我的示例映射中)。 但当我尝试在PARTITION BY语句中使用map时,我得到一个错误:

选择
*,
MIN(dt)OVER(由某个_图划分)
从一些表格中

失败:SemanticException无法将窗口调用拆分为组。至少有1个组必须仅依赖于输入列。还要检查循环依赖关系。基本错误:分区表达式(TOK_TABLE_或COL query_params)不是可比较的表达式

那么,配置单元是否支持PARTITION BY语句中的复杂类型? 如果没有,如果我需要保留所有其他列值(这样我就不能执行GROUP BY),我可以做些什么呢

我是什么意思?例如,我有一个表
user\u querys

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):


不管有没有可能,这样做似乎unreasonable@Dudu马尔科维茨:你能解释一下为什么吗?)例如,我有一张有很多字段的地图。GROUP BY理解,如果所有对应的equal键的值都相等,则两个映射是相等的。我不想枚举所有map的值,所以这不合理吗?它类似于
groupby*
(伪代码)。你能举个具体的例子吗?@Dudu Markovitz我在我的问题中添加了一个例子。对不起,这是我第一次在StackOverflow上问你。这实际上是有意义的:-)这是您识别可重复用户查询的方法,无论是否存在,这样做似乎是正确的unreasonable@Dudu马尔科维茨:你能解释一下为什么吗?)例如,我有一张有很多字段的地图。GROUP BY理解,如果所有对应的equal键的值都相等,则两个映射是相等的。我不想枚举所有map的值,所以这不合理吗?它类似于
groupby*
(伪代码)。你能举个具体的例子吗?@Dudu Markovitz我在我的问题中添加了一个例子。对不起,这是我第一次在StackOverflow上问你。这实际上是有意义的:-)这是识别可重复用户查询的方法
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
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