Hive 两个记录之间的蜂巢差异

Hive 两个记录之间的蜂巢差异,hive,lag,records,difference,Hive,Lag,Records,Difference,我有日期和州的记录。我只想显示状态已从上一条记录更改的记录 示例输入 date state 2013-01-15 04:15:07.602 ON 2013-01-15 05:15:08.502 ON 2013-01-15 06:15:08.502 OFF 2013-01-15 07:15:08.502 ON 2013-01-15 08:15:08.502 ON ... 预期产量 date state 2013-01-15

我有日期和州的记录。我只想显示状态已从上一条记录更改的记录

示例输入

date                  state
2013-01-15 04:15:07.602 ON
2013-01-15 05:15:08.502 ON
2013-01-15 06:15:08.502 OFF
2013-01-15 07:15:08.502 ON
2013-01-15 08:15:08.502 ON
...
预期产量

date                    state
2013-01-15 04:15:07.602 ON
2013-01-15 06:15:08.502 OFF
2013-01-15 07:15:08.502 ON
我编写了一个简单的
udf
函数(我的查询中的tmchange),如果状态已更改,则返回值,否则返回null

select t.date, t.state from (SELECT date,  state, tmchange(LAG(state, 1) 
over (PARTITION BY month(date) ORDER BY date), state ) as lagres  
from demo_table where state is not null  
and  year=2013) t where t.lagres is not null ;
我使用蜂巢窗口功能中的
LAG
功能。问题是,当我使用
按月分区(日期)
时,我得到了
错误:Java堆空间
。当我尝试
按周(日期)划分时
是有效的,但可能是由于
滞后
函数的缘故,它花费了太多的时间。
您是否知道如何优化查询以满足这一需求(更一般地说,将记录与以前的记录进行比较)。在这种情况下,它真的是要使用的
LAG
函数吗?

除非减小分区大小,否则不确定是否可以使它运行得更快。您可以只按日期而不是按月或周进行分区吗:
按月(日期)、日(日期)进行分区。

为什么要使用UDF?这不管用吗:

SELECT t.date, t.state 
FROM (
  SELECT
    date, 
    state, 
    LAG(state) OVER (PARTITION BY month(date) ORDER BY date) AS prev_state
  FROM demo_table 
  WHERE state IS NOT NULL and year=2013
) t 
WHERE t.prev_state != t.state ;

除非减小分区大小,否则不能确定是否可以使它运行得更快。您可以只按日期而不是按月或周进行分区吗:
按月(日期)、日(日期)进行分区。

为什么要使用UDF?这不管用吗:

SELECT t.date, t.state 
FROM (
  SELECT
    date, 
    state, 
    LAG(state) OVER (PARTITION BY month(date) ORDER BY date) AS prev_state
  FROM demo_table 
  WHERE state IS NOT NULL and year=2013
) t 
WHERE t.prev_state != t.state ;

地图绘制者和还原者有多少记忆?@Krishna你把我文章的标题从“蜂巢”改为“拥有”。请你移回我的意思“Apache Hive”好吗。映射:682MB Reduce:2048MB“映射端sot缓冲内存”:273MB@baptiste我正在处理类似的问题。我的输入数据与您的相似,我的预期数据与您上面提到的数据相似。你能在这里发布UDF脚本吗?这样我就可以试试了。谢谢,地图绘制者和还原者有多少记忆?@Krishna你把我文章的标题从“蜂巢”改为“有”。请你移回我的意思“Apache Hive”好吗。映射:682MB Reduce:2048MB“映射端sot缓冲内存”:273MB@baptiste我正在处理类似的问题。我的输入数据与您的相似,我的预期数据与您上面提到的数据相似。你能在这里发布UDF脚本吗?这样我就可以试试了。谢谢