【问题标题】:Impala: Split single row into multiple rows based on Date and timeImpala:根据日期和时间将单行拆分为多行
【发布时间】:2020-03-24 14:55:31
【问题描述】:

我想根据时间将单行拆分为多行。

SrNo    Employee       StartDate                  EndDate
---------------------------------------------------------------------------
1         emp1      30/03/2020 09:00:00        31/03/2020 07:15:00  
2         emp2      01/04/2020 09:00:00        02/04/2020 08:00:00

预期输出如下:

SrNo    Employee       StartDate                  EndDate
---------------------------------------------------------------------------
1         emp1      30/03/2020 09:00:00        30/03/2020 11:59:00   
1         emp1      31/03/2020 00:00:00        31/03/2020 07:15:00  
2         emp2      01/04/2020 09:00:00        01/04/2020 11:59:00  
2         emp2      02/04/2020 00:00:00        02/04/2020 08:00:00

一天从早上 00:00 开始到第二天早上 00:00。当EndDate 时间大于上午 00:00(午夜)时,将此日期分成两行。第一行结束日期为 30/03/2020 11:59:00,下一行开始日期为 31/03/2020 00:00:00。

请帮我解决一下。

【问题讨论】:

  • 输入表中的时间间隔可以超过 2 天吗?
  • 大部分时间是 1 天 @mazaneicha

标签: sql hadoop hive cloudera impala


【解决方案1】:

这将是递归 CTE 的好地方,但不幸的是 Hive 不支持这些。这是另一种方法,它使用派生的数字表来分割句点:

select
    t.SrNo,
    t.Employee,
    greatest(t.startDate, date_add(to_date(t.startDate), x.n)) startDate,
    least(t.endDate, date_add(to_date(t.startDate), x.n + 1)) endDate
from mytable t
inner join (select 0 n union all select 1 union all select 2) x
    on date_add(to_date(t.startDate), x.n) <= t.endDate

您可以扩展子查询以处理每行更多可能的句点。

另请注意,这会生成半开间隔,其中前一个间隔的结束等于下一个间隔的开始(而在您的结果集中有一分钟的延迟)。逻辑是,区间在其较小的边界上包含在内,而在外边界上是排斥的(这样,您确保不会留下任何间隙)。

【讨论】:

  • 感谢@GMB 的建议,请解释一下内部连接部分。
  • @Kaustav:内部连接实际上是“拆分”行。子查询生成一个数字表,连接条件每天和每个原始记录创建一行。
  • 如果有多个记录假设超过数千,那么当前的内部连接子查询(UNION ALL部分)是否有效?
  • @Kaustav:这不是关于表中的记录数,而是关于任何时期的最大长度。如果一个时期可能超过 10 天,那么您需要更多 union alls(直到 10 天)
  • 所以对我来说它的 1 天间隔,在那种情况下,内部连接 ​​(select 0 n union all select 1) x on date_add(to_date(t.startDate), x.n)
猜你喜欢
  • 2021-08-21
  • 1970-01-01
  • 2016-12-01
  • 1970-01-01
  • 2019-04-06
  • 1970-01-01
  • 1970-01-01
  • 2018-04-18
  • 1970-01-01
相关资源
最近更新 更多