tonglin0325的个人主页

Hive学习笔记——函数

1.cast函数#

数据类型转换函数

比如date的值为

参考:Hive中CAST()函数用法

2.explode函数#

explode() 函数接收一个 array 或 map 作为输入,然后将 array 或 map 里面的元素按照每行的形式输出。其可以配合 LATERAL VIEW 一起使用

参考:Hive应用:explode和lateral view

3.lateral view#

lateral view用于和split、explode等UDTF一起使用的,能将一行数据拆分成多行数据,在此基础上可以对拆分的数据进行聚合,lateral view首先为原始表的每行调用UDTF,UDTF会把一行拆分成一行或者多行,lateral view在把结果组合,产生一个支持别名表的虚拟表。

4.json_tuple#

参考:一文学会Hive解析Json数组(好文收藏)

5.json UDF#

brickhouse的json udf

1.brickhouse.udf.json.ToJsonUDF,将hive表转换成json

1
2
3
4
5
6
7
8
9
10
add jar /path/brickhouse-0.7.0-SNAPSHOT.jar;

CREATE TEMPORARY FUNCTION to_json AS 'brickhouse.udf.json.ToJsonUDF';

select to_json(named_struct( 'name', a.col_1, 'children' , array(named_struct('name', b.col_2, 'logins', b.col_3))))
from table_a a join table_b b on a.col_1 = b.col_1;

{"name":"userLogins","children":[{"name":"Site B","logins":20}]}
{"name":"userLogins","children":[{"name":"Site A","logins":10}]}

参考

1
2
https://stackoverflow.com/questions/25188734/converting-data-from-multiple-hive-tables-to-complex-json

2.brickhouse.udf.json.JsonMapUDF,将json的map转换成hive的map

1
2
3
4
add jar /path/brickhouse-0.7.0-SNAPSHOT.jar;

CREATE TEMPORARY FUNCTION json_map AS 'brickhouse.udf.json.JsonMapUDF';

3.brickhouse.udf.json.JsonSplitUDF,将json的value切分成hive的array,比如 {“a”:null,”b”:”40573”} => [null,”40573”]

1
2
3
4
add jar /path/brickhouse-0.7.0-SNAPSHOT.jar;

CREATE TEMPORARY FUNCTION json_split AS 'brickhouse.udf.json.JsonSplitUDF';

6.开窗函数#

ROW_NUMBER() OVER 顺序排序。

RANK() OVER 跳跃排序,如果有两个第一级别时,接下来是第三级别。

DENSE_RANK() OVER
  连续排序,如果有两个第一级别时,接下来是第二级别。

比如:在每个departmentId下按salary从高到低排序的dense rank(如果有并列第一名,接下来还是第二名)

1
2
select name as Employee,salary as Salary,departmentId,DENSE_RANK() over(partition by departmentId order by salary desc) as rk from Employee

参考:hive取不同班级前三名问题

leetcode例子:185. 部门工资前三高的所有员工