配置案例查询

时间:2019-05-14 17:43:45

标签: date hadoop hive case hiveql

我试图在我的数据中使用一个称为优先级的字段,以驱动DATE_ADD函数的数值。从本质上说,优先级确定问题在SLA之外的日期。

我正在尝试通过说以下方式使用此优先级:

伪代码-If priority=p0, DATE_ADD (date, INTERVAL 1 day) Else If priority=p1, DATE_ADD (date, INTERVAL 15 day)

这是我正在尝试的代码:

SELECT 
    jira.jiraid as `JIRA / FR`,
    jira.priority as `Priority`,
    DATE_FORMAT(jira.created,"MM/dd/Y") as `Date Jira Created`,
    DATE_FORMAT(DATE_ADD(jira.created, INTERVAL 
        CASE jira.status 
            WHEN "P0" THEN 1
            WHEN "P1" THEN 15
            WHEN "P2" THEN 40
            WHEN "P3" THEN 70
        ELSE 70
    END day),"MM/dd/Y") as `Date when Out of SLA`
    FROM jira

hive是否支持这种类型的if / else语句?

1 个答案:

答案 0 :(得分:1)

您无需在Hive中使用INTERVAL来添加日期。 date_add 函数接受整数天。计算子查询中的时间间隔,它将有效并看起来更干净:

select
      s.jiraid as `JIRA / FR`,
      s.priority as `Priority`,
      DATE_FORMAT(s.created,'MM/dd/Y') as `Date Jira Created`,
      DATE_FORMAT(DATE_ADD(s.created, s.days_interval),'MM/dd/Y') as `Date when Out of SLA`
 from
(
SELECT 
      j.jiraid,
      j.priority,
      j.created, 
      CASE j.status 
            WHEN 'P0' THEN 1
            WHEN 'P1' THEN 15
            WHEN 'P2' THEN 40
            ELSE           70
      END as days_interval
  FROM jira j
)s;

尽管您可以在date_add函数中计算case语句,但是将case语句作为函数参数放置也应该起作用。