hive函数的使用

来源:互联网 发布:深圳美生创谷淘宝地址 编辑:程序博客网 时间:2024/05/22 15:01

在近期的工作中在处理数据时要对一个字段做一些转换,组合使用了几个Hive函数,在此做一个记录。

业务需求:SALES_DT_WID时间格式为201707,string类型的,根据这个时间得到上一年同期时间201607的销售额,算出上一年同期时间即可;

HQL:

select
SALES_AMT_WITH_TAX
from BIGDATA_DW.W_KA_POS_SALES_F a
where SALES_DT_WID=regexp_replace(substr(add_months(concat_ws('-',substr(a.SALES_DT_WID,1,4),substr(a.SALES_DT_WID,5,2),'01'),-12),1,7),'-','');

思路:

1.用concat_ws()函数把时间格式转为 年-月-日2017-07-01,

2.用add_months()函数得到上一年的时间,

3.用regexp_replace()函数把时间格式转为 年月 201707

解析:

concat_ws(string SEP, string A, string B...)

concat_ws('-','2017','07,'01'')返回2017-07-01

add_months(string start_date,int num_months)
返回start_date之后的num_months的日期(从Hive 1.1.0开始start_date是一个字符串,日期或时间戳。num_months是一个整数。start_date的时间部分被忽略。如果start_date是本月的最后一天,或者如果生成的月份比start_date的日期组件少,那么结果将是最后一个月的最后一天。否则,结果与start_date具有相同的日期组件。
start_date 格式要为 年-月-日,string类型

regexp_replace(string INITIAL_STRING,string PATTERN,string REPLACEMENT)

返回由替换INITIAL_STRING中与在PATTERN中定义的java正则表达式语法与REPLACEMENT实例相匹配的所有子字符串所产生的字符串。例如,regexp_replace(“foobar”,“oo | ar”,“”)返回'fb。请注意,在使用预定义的字符类时需要注意:使用“\ s”作为第二个参数将匹配字母s; '\''是有必要匹配空格等。

regexp_replace('2017-07','-','')返回201707





原创粉丝点击