HiveSQL问题若干
2021/5/8 2:25:26
本文主要是介绍HiveSQL问题若干,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
一、 on 和 where 条件执行顺序
inner join:
二者同时发挥作用。
若有「分区」条件,则优先执行分区条件。
会对on中关联键进行 is not NULL 过滤操作
left join/right join:
非主表时:先执行on ,再执行left join,再执行where
主表:先 where on ,再执行left join
Tip: a left join b. a:主表 b:非主表
Eg:
select t1.a,t2.b from t1 left join t2 on t1.c=t2.c where t1.d>1 and t2.e>1;
先执行 t1.d>1. 再执行 t1.c=t2.c, 最后结果集执行 t2.e>1
建议
inner join 都一样,先过滤再join
left/right join 对主表过滤条件写到where条件中,对非主表过滤条件写到 on中,可以保证先过滤再join速度快。
参考:https://www.cnblogs.com/zsql/p/14183904.html#_label1
二、单行多行转换
字符串拼接:concat & concat_ws
concat(str1, str2, str3) -> str1str2str3 Concat_ws(sep, str1, str2) -> str1sepstr2
多行变一列
concat_ws(sep, collect_set(col)) -- collect_set 可以变成collect_list
一行变多行
lateral view explode(ori_col_name(数组列表)) table_tmp as new_col_name; -- ori_col_name为数组形式, explode 炸裂这个列表
eg: 数据
col1 col2 col3 a b 1,2,3 c d 4,5,6 select col1, col2, col4 from test lateral view explode(split(col3, ',')) table_tmp as col4; col1 col2 col4 a b 1 a b 2 a b 3 c d 4 c d 5 c d 6
三 开窗函数 over()
聚合函数(col_1) over(聚合函数执行条件) 示例: sum(amt) over (partition by province) as province_amt 统计每个省的花费 sum(amt) over(order by amt rows between unbounded preceding and current row) as 累计_amt: amt 升序排列并计算累计和 row_number() over(partition by sex order by age desc) as rank
参考:https://www.dazhuanlan.com/2020/02/27/5e57376ead208/
四 排序函数: row_number & rank & dense_rank
row_number() :值相同也按照 1234
rank() :值相同排名相同会跳跃 11335
dense_rank: 值相同排名相同不会跳跃 11223
这篇关于HiveSQL问题若干的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-06-26结对编程到底难不难?答案在这里
- 2024-06-19《2023版Java工程师》课程升级公告
- 2024-06-15matplotlib作图不显示3D图,怎么办?
- 2024-06-1503-Loki 日志监控
- 2024-06-1504-让LLM理解知识 -Prompt
- 2024-06-05做软件测试需要懂代码吗?
- 2024-06-0514-ShardingSphere的分布式主键实现
- 2024-06-03为什么以及如何要进行架构设计权衡?
- 2024-05-31全网首发第二弹!软考2024年5月《软件设计师》真题+解析+答案!(11-20题)
- 2024-05-31全网首发!软考2024年5月《软件设计师》真题+解析+答案!(21-30题)