1.窗口函数:row_number,rank,dense_rank row_number()从1开始,按照顺序排序,生成分组内记录的序列,row_number()的值不会存在重复,当排序的值相同时,按照表中记录的顺序进行排列 rank()生成数据项在分组中的排名,排名相等会在名次中留下空位 dense_rank()生成数据项在分组中的排名,排名相等会在名次中不会留下空位 例子:员工表中,求每个岗位薪水前两名的员工的信息(name,入职信息,sal) row_number() over(partition by job order by sal desc)这个函数会返回组内每一行的行号 select s.name,s.hiredate,s.sal from(select name,job,hiredate,sal,row_number() over(partition by job order by sal desc) as rn from emp) s where s.rn<=2; 2.行转列:explode 实现wc: create table `wc`( `line` string) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\n'; 行转列 select s.w,count(*) from (select explode(split(line,',')) w from wc) s group by s.w; 3.列转行:concat_ws和collect_list,collect_set配合使用 collect_set:对列数据去重后返回 collect_list:对列数据不去重返回 select concat_ws(',',collect_set(name)) from emp_0; select concat_ws(',',collect_list(name)) from emp_0; 4.数据分为三大类: 结构化数据:可以直接操作,按照某种固定分隔符。比如CSV或者数据库中的数据。 非结构化数据:比如图片,视频等 半结构化数据:比如json字符串。 5.json数据处理:get_json_object() 语法: get_json_object(string json_string, string path) 返回值: string 说明:解析json的字符串json_string,返回path指定的内容。如果输入的json字符串无效,那么返回NULL。 举例: hive> select get_json_object('{"store": > {"fruit":\[{"weight":8,"type":"apple"},{"weight":9,"type":"pear"}], > "bicycle":{"price":19.95,"color":"red"} > }, > "email":"amy@only_for_json_udf_test.net", > "owner":"amy" > } > ','$.owner') from lxw_dual; amy 还可以通过get_json_object(jline,'$.数据名1.数据名2')取到数据里面的json套json的数据。
hive学习day03-----hive高级函数
最新推荐文章于 2024-10-19 19:10:01 发布