如何使用Hive等效Oracle regexp_extract的功能拆分bizunit字段提取目标信息
功能等效函数说明
Hive 原生提供的regexp_extract函数与 Oracle 的regexp_extract功能完全一致,可直接用于正则捕获提取指定内容;如果字段是固定分隔符拼接的结构,也可以搭配split函数实现更简洁的提取,两个函数的定义如下:
regexp_extract(string 待匹配字符串, string 正则表达式, int 分组序号):通过正则分组捕获内容,分组序号从1开始对应正则中第N个括号的捕获结果,为0时返回整个正则匹配的全量内容。split(string 待切割字符串, string 分隔符):按指定分隔符将字符串切割为数组,数组下标从0开始,直接取下标即可获得对应位置的内容。
实现SQL示例
你提供的bizunit字段是固定-分隔的结构,两种实现方式如下:
方式1:使用regexp_extract实现(逻辑和Oracle写法完全一致)
SELECT bizunit, regexp_extract(bizunit, '^([^-]+)-([^-]+)-([^-]+)-.*$', 1) AS region, regexp_extract(bizunit, '^([^-]+)-([^-]+)-([^-]+)-.*$', 2) AS `business unit`, regexp_extract(bizunit, '^([^-]+)-([^-]+)-([^-]+)-.*$', 3) AS country FROM 你的业务表名;
方式2:使用split实现(写法更简洁,适合固定分隔符场景)
SELECT bizunit, split(bizunit, '-')[0] AS region, split(bizunit, '-')[1] AS `business unit`, split(bizunit, '-')[2] AS country FROM 你的业务表名;
返回结果示例
两种写法返回的结果完全一致,对应你提供的测试数据输出如下:
| bizunit | region | business unit | country |
|---|---|---|---|
| nam-bu1-us-credit | nam | bu1 | us |
| nam-bu2-us-debit | nam | bu2 | us |
| latam-bu3-mx-debit | latam | bu3 | mx |
内容的提问来源于stack exchange,提问作者ARCuber
相关产品推荐
相关产品推荐

