hive字符串截取

1.根据分割符截取
1.1 split函数
select
  split('a:f:c',':')[0],
  split('a:f:c',':')[2]
1.2 regexp_extract函数
select
 regexp_extract('a:f:c','(.*):(.*):(.*)',1),
 regexp_extract('a:f:c','(.*):(.*):(.*)',3)

select
regexp_extract('a:f:c','(.*):.*:.*'),
regexp_extract('a:f:c','.*:.*:(.*)')

1.3 substr函数
select
  substr('a:f:c',0,1),
  substr('a:f:c',5,1)
注:split函数将字符串切分为字符串数组。所以数组的指标是从0开始。如果超过了数组的长度返回null。substr函数适合定长的字符串截取,如果起始位置超过了字符串长度返回的是空串。在实际中最好使用split函数,regexp_extract函数效率低,substr缺乏灵活性。
前段时间看mysql优化中like 'xx%'比substr(0,2)='xx'效率好,like可以使用mysql的索引,substr则是全表扫描。但是在hive却是相反,hive没有索引是对全部数据都执行相应的函数

2.截取字符之前的数据
2.1 substring_index函数
select
 substring_index('a:f:c',':',1)
2.2 substr函数+instr函数
select
  substr('a:f:c',0,instr('a:f:c',':')-length(':'))
2.3 regexp_extract函数  
select
regexp_extract('a:f:c','^(.*?):')
2.4 split函数
select
  split('a:f:c',':')[0]
2.5 regexp_replace函数
select
regexp_replace('a:f:c',':.*','')
注:substring_index函数需要新的hive版本,我司的hive版本就没有。使用regexp_extract和regexp_replace函数里要注意正则表达式贪婪匹配和非贪婪匹配的区别 .* 和 .*?
  
3.截取字符之后的数据
3.1 substring_index函数
select
 substring_index('a:f:c',':',-1)
3.2 regexp_extract函数
select
regexp_extract('a:f:c','.*:(.*)$',1)
3.2 regexp_replace函数
select
regexp_replace('a:f:c','.*:','')
3.3 substr函数+instr函数
select
  substr('a:f:c',instr('a:f:c','a:f:')+length('a:f:'))


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值