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