如何通过SQL在字符串中搜索特定的完整单词,与HIVE/IMPALA兼容



我需要在一列(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这将生成大量记录并需要很长时间才能运行,但我认为它会比运行类似程序运行得更好,因为它使用联接来完成匹配,而不是搜索所有记录。

如果这是一个只有蜂箱的解决方案,我会在"侧视图,然后在闭合时匹配。

  1. split-在">

  2. 横向视图爆炸-将数组更改为行。

    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.')
    

最新更新