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

how to search for specific whole words within a string , via SQL, compatible with both HIVE/IMPALA

我需要在列 (varchar) 中搜索特定的整个单词。我正在使用下面的查询,但没有得到想要的结果;

    select *
    from table1
    WHERE upper(c.name) RLIKE ('FECHADO|CIERRE|CLOSED|REVISTO. NORMAL.')

我的问题是保证,例如 'CLOSED' 这个词,它只匹配; 'Case Closed',但不是 'Case Disclosed'。上面的查询不能只匹配整个单词。 谁能帮助我找到实现这些结果的最佳方法,无论是在 HIVE 还是 IMPALA.

谨致问候

我在这里解释了一个类似的解决方案: 这会产生很多记录并且需要很长时间才能运行,但我认为它会运行比运行点赞更好,因为它使用连接来完成匹配而不是搜索所有记录。

如果这是一个仅配置单元的解决方案,我会在横向视图上展开“”,然后在关闭时匹配。

  1. split - 根据“”拆分生成一个数组

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

您可以添加单词边界 \b 以仅匹配确切的单词:

rlike '(?i)\bFECHADO\b|\bCIERRE\b|\bCLOSED\b'

(?i)表示不区分大小写,不需要使用UPPER。

正则表达式模式中的最后一个替代项是 REVISTO. NORMAL.

如果其中的点应该是字面上的点,请使用 \.

像这样:REVISTO\. NORMAL\.

正则表达式中的点表示任何字符,应该用两个反斜杠屏蔽以匹配字面上的点。

以上正则表达式适用于 Hive。不幸的是我没有Impala来测试它