【问题标题】:OVERLAPS function in ImpalaImpala 中的 OVERLAPS 函数
【发布时间】:2014-12-01 02:05:40
【问题描述】:
我正在尝试使用 ORACLE 或 Netezza 中的和重叠功能,它采用两个日期范围并检查它们是否相互重叠。
像这样的东西:
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 中执行此操作的最佳方法是什么?不幸的是,Impala 或 SparSQL 中不存在 OVERLAPS。
我唯一能想到的是UDF,但正在寻找解决方法。
提前致谢!
【问题讨论】:
标签:
sql
date
apache-spark
impala
apache-spark-sql
【解决方案1】:
我认为明确写出逻辑比使用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