date - 带有 case 语句的 Hive 查询

标签 date hadoop hive case hiveql

我正在尝试在我的数据中使用一个名为 priority 的字段来驱动 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 语句?

最佳答案

您不需要在 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 语句作为函数参数,但它应该也能工作。

关于date - 带有 case 语句的 Hive 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56135875/

相关文章:

php - 将MySQL日期时间转换为不同时区

javascript - 如何在javascript中获取两个不同日期之间的工作日

swift - Swift 的 DateInterval 中的时区不正确

hadoop - 有什么工具可以让我从两个表中加入数据——一个在 hive 中,另一个在 cassandra 中。我也必须通过 oozie 来完成这项工作

java - 使用Eclipse调试多个hadoop jvm

hadoop - Presto 和 Hive 分区发现

mysql - hive中如何计算累计工资

php - 如何使用带有时间戳的 mysql "LIKE"语法?

apache-spark - Oozie xmlns版本

sql - HIVE SELECT 可以结合 GROUP BY 和 ORDER BY 吗?