Impala中Case语句方括号的处理方法及未定义异常解决
Impala中Case语句方括号的正确处理方式
你写的Case语句触发异常的核心原因是:Impala的ilike语法不支持用方括号[]传递多个匹配模式,ilike只能接收单个字符串模式,方括号在这里属于非法语法。
下面是几种正确的写法,根据你的需求选择:
方案一:精确不区分大小写匹配(性能最优)
如果你的需求是精确匹配(没有通配符),可以用LOWER()把字段转成小写,结合IN实现不区分大小写的匹配:
CASE WHEN LOWER(action) IN ('xyx', 'abc') THEN 0 WHEN LOWER(action) IN ('select', 'read', 'execute') THEN 4 ELSE 0 END
方案二:模糊匹配(保留ilike的通配符能力)
如果需要用ilike的模糊匹配功能(比如模式里有%或_通配符),可以用OR连接多个ilike条件:
CASE WHEN action ILIKE 'XYX' OR action ILIKE 'ABC' THEN 0 WHEN action ILIKE 'select' OR action ILIKE 'read' OR action ILIKE 'execute' THEN 4 ELSE 0 END
方案三:正则表达式匹配(适合复杂模式)
如果有更复杂的匹配规则,用REGEXP_LIKE并开启不区分大小写模式(参数'i'):
CASE WHEN REGEXP_LIKE(action, '^(XYX|ABC)$', 'i') THEN 0 WHEN REGEXP_LIKE(action, '^(select|read|execute)$', 'i') THEN 4 ELSE 0 END
注:^和$用于确保完全匹配,若需要部分匹配可移除这两个符号。
内容的提问来源于stack exchange,提问作者Piyush Tirthgirikar
相关产品推荐
相关产品推荐

