Hive SQL中如何使用regexp_extract提取以M6开头的目标子串
基于Hive原生regexp_extract实现M6开头子串提取
可以直接使用Hive自带的regexp_extract函数完成该提取需求,无需自定义函数或引入第三方依赖。
实现逻辑
结合你提供的样本数据特征,所有需要提取的M6开头子串,都是以下划线作为前后分隔边界:从M6标识开始,到紧邻的下一个下划线结束,中间没有其他混杂字符。
对应匹配的正则为M6[^_]+,逻辑是:匹配以M6为开头,后续连续出现的所有非下划线字符,刚好覆盖全部需要提取的目标内容。
具体代码写法
假设存储目标字符串的源字段名为biz_str,提取语句为:regexp_extract(biz_str, 'M6[^_]+', 0) AS extracted_m6_value
样本匹配效果验证
对照给出的4条样本,提取结果完全匹配预期:
- 源字符串
HEY01230328_M6K21SG_UNO_NYC_241→ 提取值M6K21SG - 源字符串
M6EW2BJ_UNO_NYC_251→ 提取值M6EW2BJ - 源字符串
M6HW2WL_UNO_NYC_251→ 提取值M6HW2WL - 源字符串
HEY08460329_NA_M6LAB3D_UNO_NYC_241→ 提取值M6LAB3D
注意事项
- 当前实现完全适配你给出的样本场景,也就是单条源字符串最多包含1个M6开头的目标子串。如果后续数据场景变化,出现单条字符串存在多个符合要求的M6子串的情况,
regexp_extract仅会返回第一个匹配到的内容,要提取全部匹配值的话,需要额外搭配正则拆分逻辑实现,无法单靠该函数完成 - 如果后续数据格式调整,出现M6子串后不接下划线分隔的情况,需要对应调整正则规则适配新特征,避免出现匹配错位
内容的提问来源于stack exchange,提问作者CuriousCat
相关产品推荐
相关产品推荐

