Hive 学习(六) Hive之常用内置函数一
正文
一,引言
在查询数据的时候,往往需要我们对数据进行清洗和处理,而HSQL提供了很多函数方便我们使用,其实很多函数和普通的SQL是一样的,接下来我们对常用的函数进行分析。
二,类型转换函数
语法结构:
cast(源数据 as 目标数据类型) -->注意数据类型必须可以进行相互转换,类似于java的强转
示例:
-->字符串转换成整型 hive> select cast('1' as int); OK 1
三,数学运算函数
3.1 round()
功能:四舍五入
语法结构:
round(源数据,[保留小数的位数])
示例:
hive> select round(4.3); OK 4.0 Time taken: 0.142 seconds, Fetched: 1 row(s) hive> select round(4.5); OK 5.0 Time taken: 0.09 seconds, Fetched: 1 row(s) hive> select round(4.523, 2); OK 4.52
3.2 ceil()
功能:向上取整
语法结构:
ceil(需要取整的数)
示例:
hive> select ceil(4.52); OK 5 Time taken: 0.084 seconds, Fetched: 1 row(s) hive> select ceil(4.2); OK 5 Time taken: 0.094 seconds, Fetched: 1 row(s)
3.3 floor()
功能:向下取整
语法结构:
floor(需要处理的数据)
示例:
hive> select floor(3.2); OK 3 Time taken: 0.092 seconds, Fetched: 1 row(s) hive> select floor(3.5); OK 3
3.4 abs()
功能:取绝对值
语法结构:
abs(需要取绝对值得数)
示例:
hive> select abs(3); OK 3 Time taken: 0.093 seconds, Fetched: 1 row(s) hive> select abs(-3); OK 3
3.5 least()
功能:求提供数据的最小值
语法格式:
least(参数1,参数2,参数3,...)
示例:
hive> select least(1,2,3); OK 1
和min的区别:min是求一组数据的最小值。一般是配合聚合函数使用。而least是单数据的中的一些数据最小值处理。
3.6 greatest
功能:求提供数据的最大值
语法格式:
greatest(参数1,参数2,参数3,...)
示例:
hive> select greatest(3,4,5); OK 5 Time taken: 0.075 seconds, Fetched: 1 row(s) hive>
和max的区别:max是求一组数据的最大值。一般是配合聚合函数使用。而greatest是单数据的中的一些数据最大值处理。
四,字符串函数
4.1 substr()
作用:字符串截取
语法格式:
substr(string, int start, [int len]) -->中括号的参数可写可不写,不写默认截取到末尾
示例:
hive> select substr('aaa', 1); OK aaa Time taken: 0.098 seconds, Fetched: 1 row(s) hive> select substr('aaa', 1, 2); OK aa
4.2 concat()和concat_ws()
功能:字符串拼接
语法格式:
-->单纯的将提供的参数进行拼接 concat(string A, stringB, ...) -->字符串之间用一些字符进行拼接 concat_ws(连接字符,string A, string B, ...)
示例:
hive> select concat('aaa', 'bbb'); OK aaabbb Time taken: 0.142 seconds, Fetched: 1 row(s) hive> select concat_ws('-', 'aaa', 'bbb'); OK aaa-bbb Time taken: 0.078 seconds, Fetched: 1 row(s)
4.3 length()
功能:求字符串长度
语法格式:
length(字符串)
示例:
hive> select length('abcd'); OK 4 Time taken: 0.09 seconds, Fetched: 1 row(s)
4.4 split()
功能:字符串切割
语法格式:
split(字符串, 分割符)
示例:
hive>select split('a:b:c', ':'); Total MapReduce CPU Time Spent: 2 seconds 960 msec OK ["a","b","c"] Time taken: 15.121 seconds, Fetched: 1 row(s)
注意:对于有些分割符,需要对其进行转义,因为要考虑到正则的问题,如下:
-->这里对·和\都进行了转义 hive> select split('192.168.174.2', '\\.'); Total MapReduce CPU Time Spent: 3 seconds 610 msec OK ["192","168","174","2"] Time taken: 13.974 seconds, Fetched: 1 row(s)
4.5 upper()和lower()
功能:字符串的大小写切换
语法结构:
upper(字符串) lower(字符串)
示例:
hive> select lower('AA'); OK aa Time taken: 0.089 seconds, Fetched: 1 row(s) hive> select upper('aa'); OK AA Time taken: 0.069 seconds, Fetched: 1 row(s)
五,时间函数
5.1 时间获取
直接获取当前时间:current_timestamp
hive> select current_timestamp; OK 2019-05-22 11:22:54.179 Time taken: 0.071 seconds, Fetched: 1 row(s)
5.2 日期获取
直接获取当前日期:
hive> select current_date; OK 2019-05-22 Time taken: 0.076 seconds, Fetched: 1 row(s)
5.3 时间戳获取
直接获取当前的时间戳:
hive> select unix_timestamp(); unix_timestamp(void) is deprecated. Use current_timestamp instead. OK 1558495354 Time taken: 0.08 seconds, Fetched: 1 row(s)
5.4 时间转换
unix时间戳转字符串:
hive> select from_unixtime(unix_timestamp()); unix_timestamp(void) is deprecated. Use current_timestamp instead. OK 2019-05-22 11:25:57 Time taken: 0.069 seconds, Fetched: 1 row(s)
字符串转时间戳:unix_tmiestamp()
语法格式:
unix_timestamp(时间字符串, [时间格式]) -->默认的世界格式是 yy-MM-dd HH:mm:ss
示例:
hive> select unix_timestamp("2017-08-10 17:50:30"); OK 1502358630 Time taken: 0.074 seconds, Fetched: 1 row(s) hive> select unix_timestamp("2017/08/10 17:50:30","yyyy/MM/dd HH:mm:ss"); OK 1502358630 Time taken: 0.073 seconds, Fetched: 1 row(s)
将时间字符串转成日期:to_date
hive> select to_date("2017-09-17 16:58:32"); OK 2017-09-17 Time taken: 0.098 seconds, Fetched: 1 row(s)