Hive-SQL工作中常用函数总结及案例实战

目录

0 引 言

1 空字段赋值

2 时间类

3 条件判断

4 多行转一行(行转列)

5 一行变多行(列转行)

6 窗口函数

7 排名函数

8 json解析函数

9 url解析函数

10 小 结


0 引 言

     本文针对hive进行数据分析时总结了工作中常用的查询函数及分析函数,并对每种函数的用法进行总结赋予案例,每种案例都具有详细的解释。文章主要以实践为主,紧紧围绕工作中常用的一些函数进行总结,更注重对函数的使用方法进行分析,其后的案例读者可自行尝试学习,具有借鉴意义。

1 空字段赋值

(1)函数说明

 1)NVL函数:给值为NULL的数据赋值,它的格式是NVL( string1, replace_with)。它的功能是如果string1为NULL,则NVL函数返回replace_with的值,否则返回string1的值,如果两个参数都为NULL ,则返回NULL。

select nvl(name,-1) from test;

Hive-SQL工作中常用函数总结及案例实战_第1张图片

2)COALESCE函数: (expression_1, expression_2, ...,expression_n)依次参考各参数表达式,遇到非null值即停止并返回该值。如果所有的表达式都是空值,最终将返回一个空值。

hive> select coalesce(1,2);
OK
1
Time taken: 0.461 seconds, Fetched: 1 row(s)
hive> select coalesce(null,2);
OK
2
Time taken: 0.407 seconds, Fetched: 1 row(s)
hive> select coalesce(null,null,3);
OK
3
Time taken: 0.081 seconds, Fetched: 1 row(s)
hive> select coalesce(null,2,3);
OK
2
Time taken: 0.082 seconds, Fetched: 1 row(s)
hive> select coalesce(null,null);
OK
NULL
Time taken: 0.15 seconds, Fetched: 1 row(s)
select coalesce(name,-1) from test;

Hive-SQL工作中常用函数总结及案例实战_第2张图片

2 时间类

(1)date_format:格式化时间

hive>  select date_format('2019-03-20','yyyy-MM-dd');
OK
2019-03-20
Time taken: 0.102 seconds, Fetched: 1 row(s)

(2)date_add:时间跟天数相加

hive> select date_add('2019-03-20',5);
OK
2019-03-25
Time taken: 0.084 seconds, Fetched: 1 row(s)

(3)date_sub:时间跟天数相减

hive> select date_sub('2019-03-20',5);
OK
2019-03-15
Time taken: 0.08 seconds, Fetched: 1 row(s)

(4)datediff:两个时间相减

hive> select datediff('2020-03-20','2019-12-24');
OK
87
Time taken: 0.078 seconds, Fetched: 1 row(s)

 (5)from_unixtime:将时间戳转换成标准的时间

语法: from_unixtime(bigint unixtime,string format)
返回值: string
说明: 转化 UNIX 时间戳(从 1970-01-01 00:00:00 UTC 到指定时间的秒数)到当前时区的时间格式,默认的format是yyyy-MM-dd HH:mm:ss,可以指定别的。

输入:bigint的时间戳

输出:string格式化的时间
常用的转换方法如下:

from_unixtime(cast(substr(cast(msg_time as string),1,10) as bigint),'yyyy-MM-dd')

一般时间戳到毫秒13位的到hive中只能处理10位的到秒,因而用上述方法进行转换。

hive> select from_unixtime(cast(substr(cast(msg_time as string),1,10) as bigint),'yyyy-MM-dd') from dwd_iot_phm_trackcir_shock limit 1;
OK
2020-01-16
Time taken: 0.203 seconds, Fetched: 1 row(s)

(6) unix_timestamp:将标准的时间(年月日时分秒的格式,格式可以指定)转换为时间戳

语法: unix_timestamp(string date, string format)
返回值: bigint
说明: 转换 pattern 格式的日期到 UNIX 时间戳。如果转化失败,则返回NULL。默认的format是yyyy-MM-dd HH:mm:ss,可以指定别的。
输入值:格式化时间 String
返回值:时间戳 bigint
注意:输入时间必须是到秒级的时间,否则转换失败返回NULL

hive> select unix_timestamp('2020-03-18');
OK
NULL
Time taken: 0.113 seconds, Fetched: 1 row(s)

hive> select unix_timestamp('2020-03-18 13:15:20');
OK
1584508520
Time taken: 0.198 seconds, Fetched: 1 row(s)

3 条件判断

   CASE WHEN

  1. 数据准备

name

dept_id

sex

果子学长

A

小眼睛

A

宋小宝

B

韦小宝

A

凤姐

B

如花姐

B

  2. 创建表

create table emp_sex(
name string, 
dept_id string, 
sex string) 
row format delimited fields terminated by "\t";

  3.加载数据

load data local inpath '/home/centos/dan_test/data.txt' into table emp_sex;

 4.需求:求出不同部门男女各多少人

 5. Hql代码如下:

select 
  dept_id,
  sum(case sex when '男' then 1 else 0 end) male_count,
  sum(case sex when '女' then 1 else 0 end) female_count
from 
  emp_sex
group by
  dept_id;

 结果如下:

你可能感兴趣的:(hive,sql,hive,大数据)