hive字符串截取的另一思路

1、通常情况下,hive中字符串的截取有substr/substring可以使用
语法: substr(string A, int start, int len),substring(string A, intstart, int len),用法一样,三个参数
返回值: string
说明:返回字符串A从start位置开始,长度为len的字符串

但hive中没有字符串位置函数,这样对于较为复杂的截取,要么写UDF函数,否则无能为力。

2、但我们可以借用split函数,实现所需字段的提取。
hive字符串分割函数
split(str, regex) - Splits str around occurances that match regex

split函数将字符串分割成List,然后取出自己想要的部分即可。另外,regex分割符可以是字符串,再结合concat等字符串函数,就使得我们在hive上进行字符串截取时为所你欲为。
示例(提取推送文本中的链接):

select content,split(concat('http',split(content,'http')[1]),'\"|\退\订')[0] url
from dwt.mess_send_log_full_1d;

结果示例:

<p>本调查为匿名形式,建议您填选的内容尽可能真实有效。为感谢您对本次调查活动的支持,填选者将有机会获赠100元平台无门槛优惠券。<a href="https://www.wjx.cn/jq/30277949.aspx" target="_blank">详情请戳&gt;&gt;</a></p>       https://www.wjx.cn/jq/30277949.aspx
<p>限时福利,仅少数人可见,参与调研即有机会获得100元无门槛优惠券。<a href="https://www.wjx.cn/jq/30277949.aspx" target="_blank">详情请戳&gt;&gt;</a></p>        https://www.wjx.cn/jq/30277949.aspx
<p>限时福利,仅少数人可见 ! 参与调研即有机会获得100元无门槛优惠券。<a href="https://www.wjx.cn/jq/30331424.aspx" target="_blank">详情请戳&gt;&gt;</a></p>        https://www.wjx.cn/jq/30331424.aspx
春风堂针对钱币类目全面上线已鉴定拍品的加权,并针对优质拍品进行前置曝光展现,详情点击:http://t.cn/EZBmaHC       http://t.cn/EZBmaHC
春风堂针对钱币类目全面上线已鉴定拍品的加权,并针对优质拍品进行前置曝光展现,详情点击:http://t.cn/EZBmaHC       http://t.cn/EZBmaHC

3、更正:
hive中是存在位置查找函数【instr】的。可能是没有耐心查找资料,造成谬误。

instr(string str, string substr)
查找字符串str中子字符串substr出现的位置,如果查找失败将返回0,如果任一参数为Null将返回null,注意位置为从1开始的。

示例:

select substr('abc(123)',1,instr('abc(123)','(')-1),
substr('abc(123)',instr('abc(123)','(')+1,instr('abc(123)',')')-instr('abc(123)','(')-1);
OK
abc     123
Time taken: 0.048 seconds, Fetched: 1 row(s)

另外,instr也支持字符串在字符串中位置的查找:

hive> select instr('abc(123)','124'),instr('abc(123)','123');
OK
0       5
Time taken: 0.148 seconds, Fetched: 1 row(s)


 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值