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:如何加入日期之间的条件?的主要内容,如果未能解决你的问题,请参考以下文章