博客 Hive截取指定位子或字符后面的数据

Hive截取指定位子或字符后面的数据

   数栈君   发表于 2023-09-18 10:00  333  0

Hive截取指定字符后面的数据

一、规则

1、样例数据
Hive.Spark.Flink.Hadoop
Java.Python.Scala

2、题目要求

截取最后一个’.'后面的数据

3、结果预览

Hadoop
Scala

二、思路

方法1

使用substr()函数,在通过instr()函数找到结束位子,为了保证每次截取的都是最后一个’.'后面的数据,这里使用字符串反转函数reverse()。

select reverse(substr(reverse('Hive.Spark.Flink.Hadoop'),0,instr(reverse('Hive.Spark.Flink.Hadoop'),'.')-1));

select reverse(substr(reverse('Java.Python.Scala'),0,instr(reverse('Java.Python.Scala'),'.')-1));

答案:
http://dtstack-static.oss-cn-hangzhou.aliyuncs.com/2021bbs/files_user1/article/bbfa74341bb2a51f710e8a092f535bc1..jpg
  

方法2

使用regexp_extract()正则匹配函数。
regexp_extract()函数介绍:
1、语法
regexp_extract(string subject, string pattern, int index)
2、返回值
string
3、说明
将字符串subject按照pattern正则表达式的规则拆分,返回index指定的字符。

    1.第一参数: 要处理的字段
    2.第二参数: 需要匹配的正则表达式
    3.第三参数:
        0 是显示与之匹配的整个字符串
        1 是显示第一个括号里面的
        2 是显示第二个括号里面的字段…
注意,在有些情况下要使用转义字符(双斜杠了‘\’)。
select regexp_extract('Hive.Spark.Flink.Hadoop','.*\\.(.*)',1);

select regexp_extract('Java.Python.Scala','.*\\.(.*)',1);

答案:
http://dtstack-static.oss-cn-hangzhou.aliyuncs.com/2021bbs/files_user1/article/aecb555e8efcc602d9e4dcb95e61b10a..jpg
  

方法3

使用split()分割函数,在配合字符串反转函数reverse(),保证每次截取的都是最后一个’.'后面的数据。

select reverse(split(reverse('Hive.Spark.Flink.Hadoop'),'\\.')[0]);

select reverse(split(reverse('Java.Python.Scala'),'\\.')[0]);

答案:
http://dtstack-static.oss-cn-hangzhou.aliyuncs.com/2021bbs/files_user1/article/c2f76d68f920fcfc3a2745e090a2fe3f..jpg




免责申明:


本文系转载,版权归原作者所有,如若侵权请联系我们进行删除!

《数据治理行业实践白皮书》下载地址:https://fs80.cn/4w2atu

《数栈V6.0产品白皮书》下载地址:
https://fs80.cn/cw0iw1

想了解或咨询更多有关袋鼠云大数据产品、行业解决方案、客户案例的朋友,浏览袋鼠云官网:
https://www.dtstack.com/?src=bbs

同时,欢迎对大数据开源项目有兴趣的同学加入「袋鼠云开源框架钉钉技术群」,交流最新开源技术信息,群号码:30537511,项目地址:
https://github.com/DTStack

0条评论
社区公告
  • 大数据领域最专业的产品&技术交流社区,专注于探讨与分享大数据领域有趣又火热的信息,专业又专注的数据人园地

最新活动更多
微信扫码获取数字化转型资料
钉钉扫码加入技术交流群