我需要在一列(varchar(中搜索特定的完整单词。我正在使用下面的查询,但没有得到所需的结果;
select *
from table1
WHERE upper(c.name) RLIKE ('FECHADO|CIERRE|CLOSED|REVISTO. NORMAL.')
我的问题是保证,例如用单词"CLOSED",它只匹配Case Closed",但不是"Case DisClosed"。上面的查询不能只匹配整个单词。有人能帮助我找到实现这些结果的最佳方法吗?无论是在HIVE还是IMPALA。
我向致以最良好的问候
您可以添加单词边界\b
以仅匹配精确的单词:
rlike '(?i)\bFECHADO\b|\bCIERRE\b|\bCLOSED\b'
(?i)
表示不区分大小写,不需要使用UPPER。
正则表达式模式中的最后一种选择是REVISTO. NORMAL.
如果其中的点应该是字面上的点,请使用\.
像这样:REVISTO\. NORMAL\.
regexp中的点表示任何字符,应该用两个反斜杠屏蔽,以与点完全匹配。
上面的regex在Hive中工作。不幸的是,我没有Impala来测试它
我在这里解释了一个类似的解决方案:基于SUBSTRING匹配的HIVE/PIG JOIN这将生成大量记录并需要很长时间才能运行,但我认为它会比运行类似程序运行得更好,因为它使用联接来完成匹配,而不是搜索所有记录。
如果这是一个只有蜂箱的解决方案,我会在"侧视图,然后在闭合时匹配。
-
split-在">
-
横向视图爆炸-将数组更改为行。
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.')