在配置单元窗口范围内使用表列

Posted

技术标签:

【中文标题】在配置单元窗口范围内使用表列【英文标题】:Use table column in hive window range 【发布时间】:2017-12-08 11:46:26 【问题描述】:

我正在尝试在一个窗口上收集列表,并且我想根据同一表中的一列值动态限制窗口大小。

select concat_ws('->', collect_list(CASE WHEN b.colA IN ("bla", "blabla") THEN concat_ws("-", colB,colC) END) OVER (PARTITION BY colD ORDER BY time-stamp ROWS BETWEEN colE PRECEDING AND CURRENT ROW)) AS myCol from ( select colA,colB,colC,colD,colE from mytable) a

colA|colB|colC|colD|colE|time-stamp
bla|abc|pqr|INDIA|1|2017-12-10
bla|abc|pqr|CHINA|1|2017-12-11
bla|abc|pqr|INDIA|2|2017-12-12
bla|abc|pqr|INDIA|3|2017-12-13
bla|abc|pqr|CHINA|2|2017-12-14

here hive 不接受具有有效数值范围内的 colE。我得到错误:

Error while compiling statement: FAILED: ParseException line 177:89 cannot recognize input near 'colE' 'preceding' 'AND' in windowframeboundary

【问题讨论】:

您可以添加您正在尝试的完整查询吗? 添加查询和示例数据 嗨,你找到解决这个问题的方法了吗? 【参考方案1】:

来自文档here。 Hive 不期望介于单词之间的任何列。以下是可用的选项

(ROWS | RANGE) BETWEEN (UNBOUNDED | [num]) PRECEDING AND ([num] PRECEDING | CURRENT ROW | (UNBOUNDED | [num]) FOLLOWING)
(ROWS | RANGE) BETWEEN CURRENT ROW AND (CURRENT ROW | (UNBOUNDED | [num]) FOLLOWING)
(ROWS | RANGE) BETWEEN [num] FOLLOWING AND (UNBOUNDED | [num]) FOLLOWING

【讨论】:

以上是关于在配置单元窗口范围内使用表列的主要内容,如果未能解决你的问题,请参考以下文章

使用 fitbounds 时,在地图范围内包括打开的信息窗口

使用公式在动态变化的范围内返回匹配单元格的值?

范围公式内的单元格引用计算

使用单元格值范围内的条件运行 SQL 查询列表

将特定文本从一个范围内的一个单元格移动到另一个范围内的另一个单元格

Excel VBA 在给定范围的情况下使用表格内的单元格