问题描述
我想问下,我现在有两张表,一张大,一张非常小,所以打算用mapjoin,而且大表中的a字段与小表的b字段是包含和被包含的关系,所以大表和小表是不等值的链接,所以用mapjoin比较方便,但是我在查询数据的时候,却查不出想要的数据。。举例:a字段的数据为:我,我吃了,我睡了。。b字段的数据为:吃hiveQL:select/*+mapjoin(test1)*/test1.b,test2.afromtest1jointest2wheretest1.alike'%'+test2.b+'%';上面这种得不出我想要的结果,所以我又试了其它几中函数:wherefind_in_set(test1.b,test2.a)>0wherelocate(test2.a,test1.b,0)>0whereinstr(test2.a,test1.b)>0上面这几种方式都查不出我要的结果(a里面的“我吃了”),按照逻辑来说,这些方式都应该是可以的。所以大家知道为什么吗?有什么建议吗?
解决方案
解决方案二:
额,好久了,我自己回答一下吧,也许不太对,但是确实是我测出来的。。。当用mapjoin时,小表中数据的第一行不会被当作过滤条件。。。。不知道是不是Hive的bug,只能只是针对的我们的表出现了这种情况吧我的解决方案是。。小表的第一行,随便加上一行数据。。。OK。。解决了。。
时间: 2024-11-05 18:50:44