Informatica reg_match/reg_extract表达式转HQL 求助及逻辑解析
Informatica表达式解析与HQL转换
原表达式逻辑拆解
原Informatica表达式的执行逻辑如下:
- 若
NAME字段为空,返回固定字符# - 若
NAME非空,先将其转为大写,检查字符串中是否包含逗号+任意数量空格+CLASS(不区分大小写) - 若匹配成功,使用不区分大小写的正则规则,提取
NAME中逗号及后续空格之前的所有内容;匹配失败则直接返回原NAME值
对应HQL转换结果
CASE WHEN NAME IS NULL THEN '#' WHEN UPPER(NAME) RLIKE '.*\\,\\s*CLASS.*' THEN regexp_extract(NAME, '(?i)(.*)\\,\\s*(Class\\s*U.*)$', 1) ELSE NAME END
转换说明
- HQL用
CASE WHEN替代Informatica的iif分支判断函数 - 空值判断用
NAME IS NULL替代ISNULL(NAME) - 正则匹配用
RLIKE替代reg_match,结合UPPER()实现不区分大小写的匹配逻辑 - 正则提取用
regexp_extract替代REG_EXTRACT,通过在正则模式前加(?i)开启不区分大小写模式,指定分组序号1提取目标内容
内容的提问来源于stack exchange,提问作者Ezio_s
相关产品推荐
相关产品推荐

