Hive SQL函数整理

hive sql跟mysql还是有点区别的。这里整理下一些自己常用的函数。

一、关系函数

匹配某列是否等于某值或列,比如A <> B。

关系函数
函数 语法及含义 注意及举例
= 等值比较 不要用于NULL
<> 不等 不要用于NULL
< 小于 不要用于NULL
<= 小于等于 不要用于NULL
> 大于 不要用于NULL
>= 大于等于 不要用于NULL
IS NULL 空值判断  
IS NOT NULL 非空判断  
LIKE 也可以 NOT LIKE 不要用于NULL
RLIKE/REGEXP 正则匹配 不要用于NULL

二、日期函数

Hive设置大量的日期处理

函数

含义

语法

返回结果例子

current_date

当前日期

current_date()

2019-07-31

current_timestamp

当前时间,到秒

current_timestamp()

2019-07-31 21:48:59.906

from_unixtime

时间戳转日期字符串

from_unixtime(bigint unixtime[, string format])

 

unix_timestamp

获取当前unix时间戳

unix_timestamp()

1564580955

unix_timestamp

字符串时间转时间戳

unix_timestamp(string date)

"yyyy-MM-dd HH:mm:ss”格式

unix_timestamp

字符串时间转时间戳

unix_timestamp(string date, string pattern)

 

to_date

返回日期时间字段中的日期部分

to_date(string timestamp)

 

year

日期中的年

year(string date)

 

month

日期中的月

month(string date)

 

day

日期中的天

day (string date)

 

hour

日期中的小时

hour (string date)

 

minute

日期中的分钟

minute (string date)

 

second

日期中的秒

second (string date)

 

weekofyear

日期在一年中的周数

weekofyear (string date)

 

datediff

两个日期相差多少天

datediff(string enddate, string startdate)

返回结束日期减去开始日期的天数

date_add

开始日期startdate增加days天后的日期

date_add(string startdate, int days)

 

date_sub

开始日期startdate减少days天后的日期

date_sub(string startdate, int days)

 

 

三、条件函数

多用于对某个值判断,取不同的值

函数

含义

语法

例子

If

true返回第二参数,false返回另一个参数

if(boolean testCondition, T valueTrue, T valueFalseOrNull)

 

case when

条件匹配

 

SELECT status,CASE status WHEN 3 THEN '生效中' WHEN 2 THEN '失效' ELSE '其他' END

FROM test

COALESCE

找出第一个非null的值

COALESCE(T v1, T v2, …)

 

 

四、数字函数

数字有关用的比较少,多用于取整

函数

含义

语法

 

round

取整

 

 

floor

ceil

取最近的整数值

 

floor(double a)

ceil(double a)

向上

向下

rand

产生0-1的随机数

 

 

当然还有 round(a, 2) 保留2位小数;取模 %  等

 

五、字符串函数

对字符串变量进行一些常用处理

函数

含义

语法

 

length

长度

length(string A)

 

reverse

反转

reverse(string A)

 

concat

任意个字符串拼接

concat(string A, string B…)

 

concat_ws

有拼接符拼接

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

 

substr

截取字符串到尾部

substr(string A, int start)

1开始计,start在截取结果中

substring

截取字符串到尾部

substring(string A, int start)

1开始计,start在截取结果中

substr

substring

截取字符串指定长度

substr(string A, int start, int len)

substring(string A, int start, int len)

1开始计,start在截取结果中

lower

lcase

字符串转小写

lower(string A)

lcase(string A)

 

upper

ucase

字符串转大写

upper(string A)

ucase(string A)

 

trim

去除两端的空格

trim(string A)

 

ltrim

去除左边的空格

ltrim(string A)

 

rtrim

去除右边的空格

rtrim(string A)

 

regexp_replace

正则替换:A中符合B的部分,用C替换

regexp_replace(string A, string B, string C)

 

regexp_extract

正则拆分

regexp_extract(string subject, string pattern, int index)

返回第一次匹配的,pattern()指定的部分

parse_url

URL解析

parse_url(string urlString, string partToExtract [, string keyToExtract])

 

get_json_object

解析json path属性

get_json_object(string json_string, string path)

SELECT get_json_object(json_string, '$.status')

FROM test

space

返回n个空字符串

space(int n)

 

repeat

重复字符串n

repeat(string str, int n)

 

ascii

首字母ascii

ascii(string str)

 

lpad

str左补足到len长度

lpad(string str, int len, string pad)

 

rpad

str右补足到len长度

rpad(string str, int len, string pad)

 

split

字符串分割,返回数组[]

split(string str, string pat)

 

find_in_set

集合查找,第二个参数逗号分隔

find_in_set(string str, string strList)

 

 

 

六、统计函数

注意,统计函数多用于group by

函数

含义

语法

 

Count

计数

 

可以DISTINCT

Sum

求和

 

可以DISTINCT

Avg

某列中的平均值

avg(col), avg(DISTINCT col)

可以DISTINCT

min

取最小,用于某列

min(col)

 

Max

取最大,用于某列

max(col)

 

least

取最小,用于多个值

least(T v1, T v2, ...)

会过滤nul

greatest

取最大,用于多个值

greatest(T v1, T v2, ...)

会过滤nul

precentile

排序后p分位数,col必须是整数,p介于01之间

percentile(BIGINT col, p)

 

percentile_approx

排序后p分位数

percentile_approx(DOUBLE col, p [, B])

参数B控制内存消耗的近似精度,B越大,结果的准确度越高。默认为10,000

 

七、行转列

行转列多用于将多条记录group by时,将某列拼接。默认有俩,collect_list 不去重,collect_set 去重。 column的数据类型要求是string。例如

select user_id,
concat_ws(',',collect_list(order_id)) as all_orders 
from test
group by user_id

 

 

八、列转行

列转行用的比较少,例如

select reason, new_col
FROM test lateral view explode(split(reason,','))  b AS new_col
WHERE 1=1

注意,此处两个地方的列名要一致,即new_col。

 

 注意,mysql中可以用'%Y%m%d' 和 '%Y-%m-%d',但是hive中只能用 'yyyy-MM-dd'。
 

 SELECT FROM_UNIXTIME(unix_timestamp(), '%Y%m%d'),FROM_UNIXTIME(unix_timestamp(), '%Y-%m-%d'), FROM_UNIXTIME(unix_timestamp(), 'yyyy-MM-dd')
FROM test

此时依次输出:%2019%4%31    %2019-%4-%31    2019-07-31

你可能感兴趣的:(SQL,Hive,SQL,Hive函数,HQL)