Hive SQL基础及优化

SQL

  • SQL
    • SQL基础语法
      • 基本含义(与excel对应)
      • 数据来源
    • Hive SQL查询语法
    • 单表查询语法和使用
      • 1,select
      • 2,group by*
      • 3,聚合函数
      • 4.行转列
      • 5,join
      • 6,Hive分析/窗口函数
      • 7,Hive SQL怎么写
        • 7.1*找出5月新用户数>10w的日期*
        • *7.2找出7.2号新客,在7.3-7.10仍活跃的用户数*
      • 8,开发限制和建议
    • SQL常用函数
      • 优秀SQLer的进阶
      • 常用函数介绍与应用
        • 一、基础数据类型
        • 二、复杂数据类型
        • 三、函数分类
        • 四、简单函数
        • 五、日期函数
        • 六、条件函数
        • 七、字符函数
        • 八、类型转换函数
        • 九:聚合函数
        • 十、特殊函数-窗口/分析函数
        • 十、特殊函数-表生成函数
        • 十一、集合函数
        • 十二、自定义函数
      • 具体场景分析
    • HIVE执行计划与SQL优化
      • 执行计划
        • 执行计划能做什么
      • 基本SQL的MR实现原理(map\reduce)
        • 执行计划的生成过程
        • 如何查看执行计划
      • SQL优化
        • 数据倾斜(Reduce长尾)
        • 取分组首末条记录,数据量特别巨大的情况

SQL

SQL基础语法

基本含义(与excel对应)

库(文件夹)
表(Excel名称)
字段(Excel第一行,包含字段名,字段数据类型、注释)
分区字段(sheet表,一般是日期,相当于在查询的时候提升速度)(必须限制分区,否则hive会报错)

数据来源

数据地图(查寻需要的表)
KwaiBI(查询平台)

Hive SQL查询语法

select[all | distinct] select_expr,…
from
[where]
[group by]
[having]
[order by]
[limit [offset,]rows]

单表查询语法和使用

1,select

select a+b as 'cnt’
from
where

2,group by*

group by后,必须包含group by的字段,剩余内容为分组的计算结果

select pic, count(1) as cnt
from
where p_date =
having count(1)>1000

3,聚合函数

count(*) :包括null
count(expr):不包括null
count(DISTINCT expr):去重后行数,不包括null

sum(col)
sum(DISTINCT col):去重求和

avg(col),avg(DISTINCT col):去重求平均

collect_set(col):拼成去重数组
在hive中求出一个数据表中在某天内首次登陆的人;

select a.id
from (select id,collect_set(time) as t from t_action_login where time<='20150906' group by id) as a where size(a.t)=1 and a.t[0]='20150906';

[email protected] | [“20150620”,“20150619”] |
| [email protected] | [“20150816”] |
| [email protected] | [“20150606”,“20150608”,“20150607”,“20150609”,“20150613”,“20150610”,“20150616”,“20150615”] |

collect_list(col):拼成数组

4.行转列

统计20200701北京和成都活跃用户数

法1:group by + count(1)

select 
	city,p_date,count(1) as cnt
	from biao
where
	p_date = '20200701' and city in ('北京','成都')
group by city,p_date

法2:更方便常用 case where

select 
	p_date,
	sum(if(city = '北京',1,0)) as 'beijing_user_cnt',
	sum(if(city = '成都'1,0)) as 'chengdu_user_cnt'
from biao
	
<

你可能感兴趣的:(SQL,hive,sql,big,data)