1.cast函数#
数据类型转换函数
比如date的值为
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#
5.json UDF#
1.brickhouse.udf.json.ToJsonUDF,将hive表转换成json
1 | add jar /path/brickhouse-0.7.0-SNAPSHOT.jar; |
参考
1 | https://stackoverflow.com/questions/25188734/converting-data-from-multiple-hive-tables-to-complex-json |
2.brickhouse.udf.json.JsonMapUDF,将json的map转换成hive的map
1 | add jar /path/brickhouse-0.7.0-SNAPSHOT.jar; |
3.brickhouse.udf.json.JsonSplitUDF,将json的value切分成hive的array,比如 {“a”:null,”b”:”40573”} => [null,”40573”]
1 | add jar /path/brickhouse-0.7.0-SNAPSHOT.jar; |
6.开窗函数#
ROW_NUMBER() OVER 顺序排序。
RANK() OVER 跳跃排序,如果有两个第一级别时,接下来是第三级别。
DENSE_RANK() OVER
连续排序,如果有两个第一级别时,接下来是第二级别。
比如:在每个departmentId下按salary从高到低排序的dense rank(如果有并列第一名,接下来还是第二名)
1 | select name as Employee,salary as Salary,departmentId,DENSE_RANK() over(partition by departmentId order by salary desc) as rk from Employee |
leetcode例子:185. 部门工资前三高的所有员工