我正在尝试在我的数据中使用一个名为 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/