2014-10-06 5 views
1

Я пытаюсь использовать и перекрывать функцию, как в ORACLE или Netezza, которая занимает два диапазона дат и проверяет, перекрываются ли они друг с другом. Soemthing: 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');Функция OVERLAPS в Impala

Каков наилучший способ сделать это в Impala или SparkSQL? К сожалению, OVERLAPS не существует в Impala или SparSQL. Единственное, о чем я могу думать, это UDF, но ищут работу. Спасибо заранее!

ответ

2

Я думаю, что выписывание логики явно яснее, чем использование 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 

Логика. Если у вас есть два диапазона: диапазон1 и диапазон2 с начальным и конечным временем, то они перекрываются, когда первый начинается до второго конца, а первый заканчивается после второго запуска:

select (case when range1_start < range2_end and range1_end > range2_start 
      then 1 else 0 
     end) as overlaps