Hive - 选择另一个字段的值在连续时间戳中递增的 id
Posted
技术标签:
【中文标题】Hive - 选择另一个字段的值在连续时间戳中递增的 id【英文标题】:Hive - selecting the id for which the other field's value is ascending in consecutive timestamps 【发布时间】:2016-07-09 05:25:54 【问题描述】:我需要从下面的 Hive 表“Whether_report”中选择“Reading”在连续时间戳中递增的设备 ID。
station_id equipment_id timpe_stamp Reading
1 100 00:00:01 60
2 100 00:00:02 61
3 100 00:00:03 62
4 100 00:00:04 60
5 100 00:00:05 61
. . . .
. . . .
16 114 00:00:11 66
17 114 00:00:12 65
. . . .
. . . .
. . . .
. . . .
29 112 00:00:23 71
30 113 00:00:24 69
例如:- 我需要选择 euipment_id,其读数连续五个时间戳(例如:- 60->61->62->63->64->65)且不应该选择设备 ID后续时间戳的读数(例如:- 60->61->62->60->61)。我正在努力获得正确的查询。非常感谢任何建议。
【问题讨论】:
【参考方案1】:我尝试了一个循环来满足您的要求:
List<Integer> lis = new ArrayList<Integer>();
int j=0, flag=1, width=0;
lis.add(0, 60);
lis.add(1, 61);
lis.add(2, 61);
lis.add(3, 60);
lis.add(4, 61);
lis.add(5, 62);
lis.add(6, 64);
lis.add(7, 66);
lis.add(8, 68);
Iterable<Integer> itr = lis;
for(int i : itr)
if( j != 0)
if( width == 4)
break;
if( i>j )
flag = 1;
width++;
else if( i<j && width != 4)
flag = 0;
width = 0;
System.out.println(i);
j=i;
System.out.println("flag = "+flag+"width = "+ (width));
输出: 60 61 61 60 61 62 64 66 标志 = 1 宽度 = 4
我认为如果这可以插入到键是 IntWritable 设备 ID 和值是 Iterable IntWritable 值的减速器类中,并将这些值提供给这个循环,假设所有时间戳值都是唯一的。 考虑到数据量,不知道这是否是最佳解决方案。希望对你有帮助!!!!!!
【讨论】:
【参考方案2】:你可能不得不去找猪或先生。您试图在一堆读数中找到长度为 5 的排序子序列,这可能无法在单个查询中实现。
【讨论】:
这没有回答问题。花一些时间在how-to-answer 上,然后编辑您的答案。以上是关于Hive - 选择另一个字段的值在连续时间戳中递增的 id的主要内容,如果未能解决你的问题,请参考以下文章