HIVEQL 和 Talend 中子查询之间的 NVL

如何解决HIVEQL 和 Talend 中子查询之间的 NVL

当它们之间有子查询时,是否可以调用 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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?