Hive:如何加入日期之间的条件?

Posted

技术标签:

【中文标题】Hive:如何加入日期之间的条件?【英文标题】:Hive: How do I join with a between dates condition? 【发布时间】:2016-11-22 15:19:36 【问题描述】:

我有项目表:

| id | dateTimeUTC      | color | 
+----+------------------+-------+
| 1  | 1/1/2001 1:11:11 | Red   | 
+----+------------------+-------+
| 2  | 2/2/2002 2:22:22 | Blue  |
+----+------------------+-------+

它包含一些带有 dateTime 的事件。我还有一个事件表:

| eventID | startDate         | endDate          |
+---------+-------------------+------------------+
| 1       | 1/1/2001 1:11:11  | 2/2/2002 2:22:22 |
+---------+-------------------+------------------+
| 2       | 3/3/2003 00:00:00 | 3/3/2003 1:11:11 |
+---------+-------------------+------------------+

我想加入两者,获取项目表的 dateTimeUTC 在事件表的开始日期和结束日期之间的位置。现在,在 sql 中执行此操作是非常标准的,但 HQL 不是那么多。 Hive 不允许您在 join 子句中使用“=”。 (此处链接到 HIVE 信息:https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Joins)。现在,here之前有一个类似情况的问题,但我发现从那时起已经4年了,希望有一个解决方案。

关于如何实现这一点的任何提示?

【问题讨论】:

【参考方案1】:

我认为您对表格中的日期有字符串格式,如果是,请使用以下...将日期转换为标准格式。

select  * from  items_x, items_date where  UNIX_TIMESTAMP(dateTimeUTC,'dd/MM/yyyy HH:MM:SS')  between UNIX_TIMESTAMP(startDate,'DD/MM/YYYY HH:MM:SS') and   UNIX_TIMESTAMP(endDate,'DD/MM/YYYY HH:MM:SS') ;

【讨论】:

以上是关于Hive:如何加入日期之间的条件?的主要内容,如果未能解决你的问题,请参考以下文章

日期明智的加入 Hive 问题

Hive:如果两个表之间满足条件,则查找唯一值

如何在 Hive SQL 中按日期范围独家加入?

HIVE/Impala 查询:计算满足特定条件的行之间的行数

CakePHP 查找两个日期之间查询的条件

如何从日期之间的条件下从数据库表中检索数据?