【问题标题】:How to generate Date Series in HIVE? (Creating table)如何在 HIVE 中生成日期系列? (创建表)
【发布时间】:2017-07-24 19:32:21
【问题描述】:

假设我目前有一个表,每个帐户有 1 行,表中的数据是:

  1. 帐号
  2. 开始日期
  3. 结束日期

现在我想创建一个新表,其中帐户打开的每一天都有 1 行,即每个帐户的开始日期和结束日期(含)之间的每一行都有 1 天。

例如

表 1

Account Number    Start Date    End Date
123               1-Jan-17      1-Jul-17
456               1-Feb-17      4-May-17

表 2(所需表)

Account Number    Day
123               1-Jan-17
123               1-Jan-17
     ...
123               1-Jul-17
456               1-Feb-17
456               2-Feb-17
     ...
456               4-May-17

我知道在 Postgresql 中有一个名为“生成系列”的函数可以让您轻松地做到这一点。我想知道 HIVE 中是否有类似的功能可以让您也这样做?

谢谢!

【问题讨论】:

  • 使用 DATE 数据类型存储日期,使用 ISO FORMAT YYYY-MM-DD 以文本形式表示日期

标签: hadoop hive


【解决方案1】:
select  t.AccountNumber
       ,date_add (t.StartDate,pe.i)   as Day

from    Table1 t
        lateral view 
        posexplode(split(space(datediff(t.EndDate,t.StartDate)),' ')) pe as i,x

【讨论】:

  • 像魅力一样工作! .谢谢! :)
  • @DavidדודוMarkovitz 感谢您的解决方案。我正在寻找类似的结果,但不是日系列,而是月系列,我应该在其中获得每个月的一行和一个为每个月生成结束日期的新列。感谢您的帮助
  • 嗨。请为此打开一个新问题。如果几天内没人回复,我会回复的。
  • 创建临时表 tmp_getdate as select cast(date_hive as date) data_date from generate_series((date_trunc('Month',idate))::Date,idate,'1 day'::interval) date; -- 请帮帮我
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-29
  • 2021-12-19
相关资源
最近更新 更多