hive replace替换多个_Hive函数——日期函数,正则表达式和排序函数

6b4e269877e16491e750628110c962c7.png

1.日期函数

2.正则表达式

3.排序操作

    本文主要分享下Hive中日期函数,正则表达式函数,以及排序函数的使用方法和特点。

1.日期函数

    Hive中日期函数功能不是很强大,其实是加减函数只能对天操作,无法直接取n个月前的日期,或n年前的日期。即不支持add_months()函数 和 interval关键词。

1 /* 往前推两个月 */
2 select cast(add_months(date'2020-03-31',-2) as date format 'yyyy-dd-mm') --2020-01-31
3 /* 往前推1年*/
4 select cast(date'2020-04-01' - interval 1 years) --2019-04-01
5  --ps:上述语法为TD数据库,而且注意一点是interval关键词遇到闰年会报错
6 select cast(date'2020-02-29' - interval 1 years) --结果不会是2019-02-28 而是error
7  --推荐使用add_months()
8 select cast(add_months(date'2020-02-29',-12) as date format 'yyyy-dd-mm') --2020-02-28

Hive中常用的三个函数如下:

  1. 日期减n天
1 select date_sub(current_date,2)
2 select date_sub('2020-03-20',1)  --2020-03-19`
  1. 日期加n天
1 select date_add('2020-03-19',2)  --2020-03-21
  1. 日期差
1 select datediff('2020-03-22','2020-03-20') --2

2.正则表达式

Hive中正则表达函数有3个

  1. regexp(string,pattern) --返回值 布尔类型 true false
    主要在where中作筛选条件
1  select regexp('ab.ge','[0-9]') --false
2  --同时包含数字和字母的正则表达式:'^(?![0-9]+$)[0-9a-zA-z].*?$'
  1. regexp_extract(string,pattern,int index) --返回值 string
int index 取值为[0-n],n不大于正则项pattern的组成个数,正则项由多部分组合每部分在()内包含。 ps: index = 0返回与符合正则的整个原表达式 ,index默认等于1 ;
1 select regexp_extract('6a9d0b','[0-9a-zA-Z]+',0)
2-- 返回 6a9d0b 

index 必须且只能设定为0 默认是1 会报错 ,因为正则项pattern是一个整体,不是几个部分组成;正则项: '([0-9]+)(.*?)([0-9]+)'
这个正则项就是三部分组成 第一部分是数字([0-9]+) 第二部分是字符的贪婪匹配,第三部分是字母。

 1 --取满足正则项的整体字符串
 2 select regexp_extract('["84745554","asDd"]', '([0-9]+)(.*?)([a-zA-Z]+)',0);
 3 --84745554","asDd
 4 --取满足正则项的第一部分子字符串
 5 select regexp_extract('["84745554","asDd"]', '([0-9]+)(.*?)([a-zA-Z]+)',1);--
 6 --84745554
 7 --取满足正则项的第二部分子字符串
 8 select regexp_extract('["84745554","asDd"]', '([0-9]+)(.*?)([a-zA-Z]+)',2);
 9 --","
10 --取满足正则项的第三部分子字符串
11 select regexp_extract('["84745554","asDd"]', '([0-9]+)(.*?)([a-zA-Z]+)',3);
12 --asDd

主要在select语句中筛选子字符串

1 select regexp_extrct('trx_txt','[0-9]',1)
  1. regexp_replace(string,pattern,replace string) --返回值 string

主要在select语句中作替换

1 select regexp_replace('adci892','[0-9]','v') --adcivvv

3.排序操作

  1. order by 会对输入做全局排序,因此只有一个reducer(多个reducer无法保证全局有序),
    只有一个reducer,会导致当输入规模较大时,需要较长的计算时间。
  2. sort by不是全局排序,其在数据进入reducer前完成排序,
    sort by 的数据只能保证在同一reduce中的数据可以按指定字段排序。
  3. distribute by 按照指定的字段对数据进行划分到不同的输出reduce / 文件中
  4. cluster by 除了具有 distribute by 的功能外还兼具 sort by 的功能。

欢迎关注【丁点儿印记】,谢谢支持

47aa5969b854ec7ce4f3d2de21ddb53d.png
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值