hive中的mapjoin非等值链接

一头程序猿 2014-04-22 10:51:05
我想问下,我现在有两张表,一张大,一张非常小,所以打算用mapjoin,而且大表中的a字段与小表的b字段是包含和被包含的关系,所以大表和小表是不等值的链接,所以用mapjoin比较方便,但是我在查询数据的时候,却查不出想要的数据。。
举例:a字段的数据为:我,我吃了,我睡了。。
b字段的数据为:吃
hiveQL:select /*+ mapjoin(test1)*/ test1.b,test2.a from test1 join test2 where test1.a like '%'+test2.b+'%';
上面这种得不出我想要的结果,所以我又试了其它几中函数:
where find_in_set(test1.b,test2.a)>0
where locate(test2.a,test1.b,0)>0
where instr(test2.a,test1.b)>0
上面这几种方式都查不出我要的结果(a里面的“我吃了”),按照逻辑来说,这些方式都应该是可以的。
所以大家知道为什么吗?
有什么建议吗?
...全文
559 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
一头程序猿 2014-05-20
  • 打赏
  • 举报
回复
额,好久了,我自己回答一下吧,也许不太对,但是确实是我测出来的。。。 当用mapjoin时,小表中数据的第一行不会被当作过滤条件。。。。不知道是不是Hive的bug,只能只是针对的我们的表出现了这种情况吧 我的解决方案是。。小表的第一行,随便加上一行数据。。。 OK。。解决了。。

1,092

社区成员

发帖
与我相关
我的任务
社区描述
云计算服务器、网络、虚拟化相关讨论
社区管理员
  • 服务器
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧