Hive截取指定位子或字符后面的数据
Posted 小谢不缺女朋友
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hive截取指定位子或字符后面的数据相关的知识,希望对你有一定的参考价值。
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));
答案:
方法2
使用regexp_extract()正则匹配函数。
regexp_extract()函数介绍:
1、语法
regexp_extract(string subject, string pattern, int index)
2、返回值
string
3、说明
将字符串subject按照pattern正则表达式的规则拆分,返回index指定的字符。
- 第一参数: 要处理的字段
- 第二参数: 需要匹配的正则表达式
- 第三参数:
0 是显示与之匹配的整个字符串
1 是显示第一个括号里面的
2 是显示第二个括号里面的字段…
注意,在有些情况下要使用转义字符(双斜杠了‘\\’)。
select regexp_extract('Hive.Spark.Flink.Hadoop','.*\\\\.(.*)',1);
select regexp_extract('Java.Python.Scala','.*\\\\.(.*)',1);
答案:
方法3
使用split()分割函数,在配合字符串反转函数reverse(),保证每次截取的都是最后一个’.'后面的数据。
select reverse(split(reverse('Hive.Spark.Flink.Hadoop'),'\\\\.')[0]);
select reverse(split(reverse('Java.Python.Scala'),'\\\\.')[0]);
答案:
以上是关于Hive截取指定位子或字符后面的数据的主要内容,如果未能解决你的问题,请参考以下文章
如何使用hive确定字符位置?例如,字符规则是aaaa_aaa想提取'_'后面的内容,怎么操作
大数据之Hive:hive截取字符串substr和substring的用法
编写Spark的UDF函数解决Hive表大数bigintdoublefloatdecimal等转字符串string时出现的科学计数法问题Java
编写Spark的UDF函数解决Hive表大数bigintdoublefloatdecimal等转字符串string时出现的科学计数法问题Java