HIVE Presto like和rlike

like與rlike的區別:

like不是正則,是通配符。這個通配符可以看一下SQL的標準,例如%代表任意多個字符。

rlike是正則,正則的寫法與java一樣。'\'需要使用'\\',例如'\w'需要使用'\\w'

 

--NAME中包含數字的

select name from wlh_dm_sz_3 where rlike (name,'[0-9]') limit 100

select name from wlh_dm_sz_3 where name rlike '[0-9]' limit 100 結果相同

--NAME中以數字開頭的

select name from wlh_dm_sz_3 where name rlike '^[0-9].*' limit 100

--NAME中包含A B C的

select name from wlh_dm_sz_3 where rlike (name,'A|B|C') limit 100

hive不提供GROUP_CONCAT函數,所以需要使用其他方法代替,我們可以使用CONCAT_WS()函數代替,如下

SELECT 
	category, 
	CONCAT_WS("\; ", COLLECT_LIST(name)) 
FROM 
	test_group 
GROUP BY 
	category     

hive 中沒有not like 而是用 not col_name like '%a%' 或者not col_name rlike 'a' 

--多個條件

如查找name字段中含有 Li 和 Jin的信息

select * from emp where name rlike '.*(Li|Jin).*';

點號.:表示和任意的字符匹配

星號*:表示重複“左邊的字符串”零次到無數次

表達式(x|y):表示和x或者y匹配

 

presto中類似rlike實現

SELECT * FROM access WHERE regexp_like(method, 'GET|POST|PUT|DELETE')

Presto分頁查詢:

SELECT * FROM (SELECT ROW_NUMBER() over(ORDER BY T.id) as Row,T.* FROM table as T where date_month='2019-12') TT 
WHERE TT.Row BETWEEN 1 AND 10;

order by任意字段都可以。between 和 and 分頁可以按照下面這個公式  between :( currentPage- 1)*pageSize+1 ,and : (currentPage*pageSize)

presto對關鍵字轉譯使用雙引號,例如

select * from catalog.schema."order"
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章