我想問下,我現在有兩張表,一張大,一張非常小,所以打算用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里面的“我吃了”),按照邏輯來說,這些方式都應該是可以的。
所以大家知道為什么嗎?
有什么建議嗎?
uj5u.com熱心網友回復:
額,好久了,我自己回答一下吧,也許不太對,但是確實是我測出來的。。。當用mapjoin時,小表中資料的第一行不會被當作過濾條件。。。。不知道是不是Hive的bug,只能只是針對的我們的表出現了這種情況吧
我的解決方案是。。小表的第一行,隨便加上一行資料。。。
OK。。解決了。。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/108637.html
標籤:服務器
