Hive join中的模糊匹配(locate)

2021-08-20 10:21:48 字數 990 閱讀 3473

hive不支援非等值連線,但可以通過locate()函式進行功能轉換。

locate(string substr, string str[, int pos])

查詢字串str中的pos位置後字串substr第一次出現的位置,若為找到,則返回0。

hive> select

locate('a','abcd'), locate('b', 'abcd'), locate('f', 'abcd')

結果: 120

join模糊匹配

left join , right join , full join

hive> select * from a left join b on

1=1where locate(a.col,b.col)>0

hive> select * from a right join b on

1=1where locate(a.col,b.col)>0

hive> select * from a full join b where locate(a.col,b.col)>0

除了將locate()直接寫在where條件裡,也可以使用row_number()來搭配使用。

select col

from(

select

if(locate(a.col, b.col)>0, b.col, a.col) as col,

row_number() over(partition by a.col order

by locate(a.col, b.col) desc) as rn

from a

left

join b on

1=1) as a

where rn=1

like的模糊匹配

a 以a結尾的資料 a 以a開頭的資料 a 含有a的資料 a 三位且中間字母是a的 a 兩位且結尾字母是a的 a 兩位且開頭字母是a的 表示任意 0 個或多個字元。可匹配任意型別和長度的字元,有些情況下若是中文,請使用兩個百分號 表示。表示任意單個字元。匹配單個任意字元,它常用來限制表示式的字元長度...

thinkphp中的多字段模糊匹配

user m user 例項化user物件 map name title thinkphp 把查詢條件傳入查詢方法 user where map select 用到專案中 if address 這裡就很簡單的解決了這個需求,而且很精準。生成的sql語句如下 select a.b.name,b.tel...

VLOOKUP模糊匹配的妙用

vlookup 函式模糊查詢的妙用 vlookup 函式中,第三個引數,輸入 0,則為精確匹配 如果輸入 1,則為模糊匹配。這個功能可以用來快速地進行成績分類,舉例如下 已知姓名,成績,要求按照如下標準對成績進行分類,分類標準 成績等級 0 59 e 60 69 d 70 79 c 80 89 b ...