如何解决HIVEQL 和 Talend 中子查询之间的 NVL
NVL(
(
SELECT
MIN(DATE_TIME)AS EFFECTIVE_DATE
FROM TEMP.DM_ZEXPIDA_FICANT Z
WHERE REGEXP_EXTRACT(CURR_HC,'([^;]+)',0) = TEMP.AB_FICANT.CURR_CODE
AND Z.DATE_TIME > TEMP.AB_FICANT.DATE_TIME
),(
SELECT
MIN(DATE_TIME)AS EFFECTIVE_DATE
FROM TEMP.DM_ZEXPIDB_FICANT Z
WHERE CURR_CODE = TEMP.AB_FICANT.CURR_CODE
AND Z.DATE_TIME > TEMP.AB_FICANT.DATE_TIME
)
)AS EXPI_DATE,
我们知道系统限制我们在 select 中进行 make select: https://cwiki.apache.org/confluence/display/Hive/Subqueries+in+SELECT#space-menu-link-content
此外,当表单是这样的时候,我们只能使用 CASE WHEN :
CASE WHEN rr IS NULL THEN kk
ELSE rr
END AS EXPI_DATE
我必须尝试什么样的形式才能成功?
解决方法
假设 TEMP.AB_FICANT.KEY_COL 作为我在 SQL 下创建的驱动表中的 KEY。两个子查询都转换为左连接。现在,如果您没有关键列,您可以加入一些在 AB_FICANT 中唯一的列。
SELECT NVL( A.EFFECTIVE_DATE,B.EFFECTIVE_DATE) AS EXPI_DATE
FROM TEMP.AB_FICANT DRIV
LEFT JOIN (
SELECT
MIN(DATE_TIME)AS EFFECTIVE_DATE,INNER_DRIV.KEY_COL
FROM TEMP.DM_ZEXPIDA_FICANT Z,TEMP.AB_FICANT INNER_DRIV
WHERE REGEXP_EXTRACT(Z.CURR_HC,'([^;]+)',0) = INNER_DRIV.CURR_CODE
AND Z.DATE_TIME > INNER_DRIV.DATE_TIME
GROUP BY INNER_DRIV.KEY_COL
) A ON A.KEY_COL=DRIV.KEY_COL
LEFT JOIN (
SELECT
MIN(DATE_TIME)AS EFFECTIVE_DATE,INNER_DRIV.KEY_COL
FROM TEMP.DM_ZEXPIDB_FICANT Z,TEMP.AB_FICANT INNER_DRIV
WHERE CURR_CODE = INNER_DRIV.CURR_CODE
AND Z.DATE_TIME > INNER_DRIV.DATE_TIME
GROUP BY INNER_DRIV.KEY_COL
) B ON B.KEY_COL=DRIV.KEY_COL
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。