我需要在列(varchar)中搜索特定的整個單詞。我正在使用下面的查詢,但沒有得到想要的結果;
select *
from table1
WHERE upper(c.name) RLIKE ('FECHADO|CIERRE|CLOSED|REVISTO. NORMAL.')
我的問題是保證,例如“CLOSED”這個詞,它只匹配;'Case Closed',但不是'Case Dis closed '。上面的查詢不能只匹配整個單詞。任何人都可以幫助我找到在 HIVE 和 IMPALA 中實作這些結果的最佳方法。
我最誠摯的問候
uj5u.com熱心網友回復:
我在這里解釋了一個類似的解決方案:基于 SUBSTRING 匹配的 HIVE/PIG JOIN 這將產生大量記錄并需要很長時間才能運行,但我認為它會比運行類似運行更好,因為它使用連接來完成匹配搜索所有記錄。
如果這是一個僅限蜂巢的解決方案,我會在橫向視圖中在“”上爆炸,然后在關閉時匹配。
split - 基于對“”的拆分創建一個陣列
LATERAL VIEW EXPLODE - 將陣列更改為行。
WITH ( select * from table1 LATERAL VIEW EXPLODE(SPLIT( name, " ")) table_name as names ) as exploded_names select * from exploded_names where names IN ('FECHADO','CIERRE','CLOSED','REVISTO.')
uj5u.com熱心網友回復:
您可以添加單詞邊界\\b以僅匹配精確的單詞:
rlike '(?i)\\bFECHADO\\b|\\bCIERRE\\b|\\bCLOSED\\b'
(?i) 表示不區分大小寫,無需使用 UPPER。
正則運算式模式中的最后一個選擇是 REVISTO. NORMAL.
如果其中的點應該是字面上的點,請使用 \\.
像這樣: REVISTO\\. NORMAL\\.
正則運算式中的點表示任何字符,應該用兩個反斜杠屏蔽以逐字匹配點。
以上正則運算式適用于 Hive。不幸的是我沒有 Impala 來測驗它
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/385029.html
