2016-12-11 9 views
1

私は、2つの列、時間と値の列で構成されるテーブルを持っています。 timeカラムは浮動小数点値で、値は文字列値です。HiveQLの間隔

私は、同じ値を持つすべての行をグループ化したいと思います。ここでは、時間列の2つの値の間の距離が最大0.001で、これらのグループの戻り間隔です。

例:次のように 私のテーブルにはなります

==================== 
| time | value | 
==================== 
| 0.001 | a  | 
| 0.00001| a   | 
| 0.002 | a  | 
| 0.002 | b  | 
| 0.003 | b  | 
| 0.0031 | a  | 
==================== 

望ましい結果:

====================================== 
| time_min | time_max | value | 
====================================== 
| 0.001  | 0.002  | a  | 
| 0.002  | 0.003  | b  | 
| 0.0031  | 0.0031 | a  | 
====================================== 

は(効率的に可能な限り)これを行いHiveQLクエリがありますか? ハイブバージョン:1.2

ありがとうございます!

+0

使用しているSQLのバージョンは? –

+0

@TimBiegeleisen標準のSQLについてこの質問をする方が簡単かもしれないと思っていましたが、実際にはHiveQLで使用したいのですが...ありがとう! – tralala

答えて

0
select  min(time) as time_min 
      ,max(time) as time_max 
      ,value  as value 

from  (select  time 
         ,value 

         ,count(is_gap) over 
         ( 
          partition by value 
          order by  time 
         ) as is_gap_seq 

      from  (select  time 
            ,value 

            ,if 
            (
             time - lag(time) over 
              (partition by value order by time) > 0.001 
             ,1 
             ,null 
            ) as is_gap 

         from  t 
         ) t 
      ) t 

group by value 
      ,is_gap_seq 
;    

p.s.私はIFないCASEを使用してい

  1. 何らかの理由CASEために、次のエラー生み出すため:

    に失敗しました:はIndexOutOfBoundsExceptionインデックス:2、サイズ:その目的のためにFLOATを使用して2

  2. です悪い考え。
    あなたが期待している結果は得られません。