关于actian vortex4.2(SQL on Hadoop 免费版)的一个巨坑

浏览: 1892

背景

使用Datastage插入数据后做After SQL删除部分重复数据,ID相同的数据保留第一条,删掉更新时间更晚的一条


SQL

为更好的展示问题,我们把delete改成了select,查询出的数据即删除掉的数据

SELECT *
from test_table a
where create_timstm >= to_date('20180116', 'YYYYMMDD') - 7
and create_timstm < to_date('20180116', 'YYYYMMDD')
and exists
(select 1
from test_table b
where a.xx_id = b.xx_id
group by b.xx_id
having a.update_timstm = min(b.update_timstm) and count(*) > 1);

现象

发现有xx_id相同且都为空的数据同样被查询出来,那么问题来了,请注意我上面SQL中针对id的关联(倒数第三行)是没有做任何空值处理的,原本以为这是vortex的特性,自动给处理掉了。

image.png

但接下来我去掉having条件中的下面条件时,这几条空的数据又没了??!! EXO  ME?

a.update_timstm = min(b.update_timstm) ---删除掉

image.png


验证

最一开始我以为是我逻辑出现问题,SQL修改了几次,硬生生改成了查询不出空值数据。

但当我在Oracle测试的时候发现,Oracle使用原始SQL(不去掉having条件),得到的结果和Vortex是不同的。

Oracle是查不出数据的

Image result for 黑人问号


也就是说,针对空值无法直接使用等号关联,这一点始终是不变,在vortex里也一样适用,但当having里增加了那个神秘条件之后,数据神奇般的被返回,具体原因尚不明,不确定是否是BUG,我会发邮件将此问题描述给actian公司,难道是因为我用的免费版本吗 - -?


-------------------更新---------------------------------------------------

已确定是bug,已上报(bug 132731), 请大家注意避免

image.png

推荐 0
本文由 老头子 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册