大数据数仓操作(二)

举报
南安 发表于 2020/10/28 21:30:39 2020/10/28
【摘要】 join:只有进行连接的两个表中都存在与连接条件相匹配的数据才会被保留下来。hive (default)> select e.empno, e.ename, d.deptno from emp e join dept d on e.deptno = d.deptno; 左外连接:JOIN操作符左边表中符合WHERE子句的所有记录将会被返回。hive (default)> select e.e...

join:只有进行连接的两个表中都存在与连接条件相匹配的数据才会被保留下来。

select e.empno, e.ename, d.deptno from emp e join dept d on e.deptno = d.deptno;


左外连接:JOIN操作符左边表中符合WHERE子句的所有记录将会被返回。


select e.empno, e.ename, d.deptno from emp e left join dept d on e.deptno = d.deptno;


 

left outer join左边表的数据都列出,如果右边表没有对应的列,则写成了NULL值。

 

分区排序:

sort bymapreduce内部排序

order by:全局排序

distribute bysorts by字段相同时,可以使用cluster by方式。

partition分区计算并可以搭配order by,但distribute by只能搭配sort by

 

窗口函数:

针对over()前最后一个函数进行开窗

OVER():指定分析函数工作的数据窗口大小,这个数据窗口大小可能会随着行的变而变化

over()不同分区内排序使用sort by


列转行:

CONCAT(string A/col, string B/col):返回输入字符串连接后的结果,支持任意个输入字符串;

CONCAT_WS(separator, str1, str2,...):它是一个特殊形式的 CONCAT()。第一个参数剩余参数间的分隔符。

COLLECT_SET(col):函数只接受基本数据类型,它的主要作用是将某字段的值进行去重汇总,产生array类型字段。

 

行转列:

lateral viewexplode配合使用

select 
movie,
category_name 
from 
movie_info lateral view explode(category) table_tmp as category_name;


 

排名函数:

RANK() 排序相同时会重复,总数不会变   1134

DENSE_RANK() 排序相同时会重复,总数会减少  1123

ROW_NUMBER() 会根据顺序计算 1234

select name,
subject,
score,
rank() over(partition by subject order by score desc) rp,


动态分区:

set hive.exec.dynamic.partition=true;
set hive.exec.dynamic.partition.mode=nonstrict;

create table ori_partitioned_target(id bigint, time bigint, uid string,
 keyword string, url_rank int, click_num int, click_url string) PARTITIONED BY (p_time STRING) row format delimited fields terminated by '\t';
 
insert overwrite table ori_partitioned_target partition (p_time) 
select id, time, uid, keyword, url_rank, click_num, click_url, p_time from ori_partitioned;


查询前三行数据

select * from table LIMIT 3;


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。