2016-07-09 5 views
1

「リーディング」が連続するタイムスタンプの昇順であるequipment_idを、以下のハイブテーブル「Which_report」から選択する必要があります。例えばハイブ - 他のフィールドの値が連続したタイムスタンプで昇順になる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 

: - 私は、その読書5つの連続したタイムスタンプのために昇順である(例えば: - 60-> 61-> 62-> 63-> 64-> 65)euipment_idを選択する必要がといけませんその結果のタイムスタンプの読み取り値(たとえば、 - 60-> 61-> 62-> 60-> 61)のequipment_idを選択します。私は正しいquery.Any提案を得るために苦労しています非常に感謝しています。

答えて

0

私はあなたの条件のためにループを試みた:

 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)); 

} 

出力:フラグ= 1つの幅= 4

IキーがIntWritable equipment_idで、値が反復可能なIntWritable値であるレデューサークラスにプラグインできるかどうかを考え、このループに値を渡します。すべてのタイムスタンプ値が一意であると仮定します。 データの量を考慮して、これが最適なソリューションかどうかわかりません。それが役に立てば幸い !!!!!

0

おそらく、豚やMRに行く必要があります。あなたは、一連の読みの中で長さ5のソートされたsub_sequenceを見つけようとしています。これはおそらく単一のクエリでは達成できません。

+0

これは質問に答えません。 [how-to-answer](http://stackoverflow.com/help/how-to-answer)で時間を過ごし、答えを編集してください。 – syadav

関連する問題