Hive 配置单元-选择另一个字段的值在连续时间戳中递增的id
我需要从下面的配置单元表“是否报告”中选择设备id,该设备id的读数在连续时间戳中递增Hive 配置单元-选择另一个字段的值在连续时间戳中递增的id,hive,timestamp,bigdata,Hive,Timestamp,Bigdata,我需要从下面的配置单元表“是否报告”中选择设备id,该设备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
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
例如:-我需要选择设备id,其读数在五个连续的时间戳中以升序显示,例如:-60->61->62->63->64->65,并且不应选择后续时间戳中读数的设备id,例如:-60->61->62->60->61。我正在努力获得正确的查询。非常感谢您的任何建议。您可能需要去找pig或MR。您正试图在一组读数中找到长度为5的排序子序列,这可能无法在单个查询中实现。您可能需要转到pig或MR。您正在尝试在一组读数中找到长度为5的排序子序列,这可能无法在单个查询中实现。我尝试了一个循环来满足您的要求:
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
我认为如果可以将其插入reducer类中,其中键为IntWritable equipment_id,值为Iterable IntWritable values,并将值提供给该循环,假设所有时间戳值都是唯一的。
考虑到数据量,不知道这是否是最佳解决方案。希望能有帮助 我尝试了一个循环来满足您的要求:
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
我认为如果可以将其插入reducer类中,其中键为IntWritable equipment_id,值为Iterable IntWritable values,并将值提供给该循环,假设所有时间戳值都是唯一的。
考虑到数据量,不知道这是否是最佳解决方案。希望能有帮助 这并不能回答问题。花些时间编辑你的答案。这并不能回答问题。花些时间在上面,然后编辑你的答案。