2

ORACLEまたはNetezzaのように、2つの日付範囲を取り、それらが互いに重複しているかどうかを確認する関数を使用しようとしています。このようなもの: SELECT (TIMESTAMP '2011-01-28 00:00:00', TIMESTAMP '2011-02-01 23:59:59') OVERLAPS (TIMESTAMP '2011-02-01 00:00:00', TIMESTAMP '2011-02-01 23:59:59');

Impala または SparkSQL でこれを行う最善の方法は何ですか? 残念ながら、OVERLAPS は Impala や SparSQL には存在しません。私が考えることができる唯一のものはUDFですが、回避策を探しています。前もって感謝します!

4

1 に答える 1

3

ロジックを明示的に書き出すことは、 を使用するよりも明確だと思いますOVERLAPS。たとえば、エンドポイントは含まれていますか?

ロジックは次のとおりです。

select (case when TIMESTAMP '2011-01-28 00:00:00' < TIMESTAMP '2011-02-01 23:59:59' AND
                  TIMESTAMP '2011-02-01 00:00:00' < TIMESTAMP '2011-02-01  23:59:59'
             then 1 else 0
        end) as overlaps

ロジックは。開始時刻と終了時刻を持つ range1 と range2 の 2 つの範囲がある場合、最初の開始が 2 番目の終了前に開始され、最初の終了が 2 番目の開始の後に終了すると、これらの範囲は重複します。

select (case when range1_start < range2_end and range1_end > range2_start
             then 1 else 0
        end) as overlaps
于 2014-10-06T18:45:29.927 に答える