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的主要内容,如果未能解决你的问题,请参考以下文章

计算一个值在 Hive/SQL 中连续出现的次数

在 Hive 中选择

表单输入的值在 React 中提交时未更新

根据另一个表的值选择表和字段

我的变量的值在另一个文件中发生变化

JQuery 根据另一个字段的值替换选择选项标签