09- 15 hivesql 基础

hivesql 基础:

hive简介:
hive是基于hadoop的数据仓库

mapreduce简介:

基础语法:
查询语句:select a from b where c ;
Groupby 分组
Order by 排序

执行顺序:

From(先读取表)-> where (筛选)–> group by (聚合分组)-> having-> select(选择) order by(排序)

Group by 执行顺序在select之前(先分组再查询);

常用函数:

1、 如何把时间戳转化为日期

2、 如何计算日期间隔

截取时间函数:
dt=2019-01-01 19:55:55
to_data(dt)=2019-01-01
year(dt)= 2019 截取年
month(dt)=01 截取月
hour(dt)=19

substr( string f,int start ,int end) 字符串截取函数
substr(dt,1,10) =2019-01-01
substr(dt,6) 截取从第六位到最后一位;

3、 条件函数

前提两个表:user_info用户信息表,user_trade 用户交易表:

3-1 、case when

Eg: 统计四个年龄段20岁以下,2030岁,3040岁,40岁以上的用户数:
Select case when age<20 then ‘20岁以下’
When age>=20 and age<30 then ‘20-30岁’
When age>=30 and age<40 then ’30-40岁’
Else ‘40岁以上’ end as age_type,
Count(distinct user_id)user_num 这一句是对user_id 去重
From user_info
Group by case when age<20 then ‘20岁以下’
When age>=20 and age<30 then ‘20-30岁’
When age>=30 and age<40 then ’30-40岁’
Else ‘40岁以上’ end as age_type;

注意:group by 执行在select之前,所以后边的重命名不生效,只能在select后边重命名。

3-2 、if

统计每个性别用户等级高低的分别情况(level>5位高级)
分类汇总的字段有两个:性别,高低等级
Select sex , if(level>5, ’高’ , ’低’) as level_type,
Count(distinct user_id) user_num
From user_info
Group by sex,if(level>5 , ‘高’,’低’);
解析: if中条件满足则注释为高,否则注释为低;

4、 字符串函数
4-1

Substr( string a, int start ,int end)

每个月新激活的用户:
Select substr(firstactivetime,1,7) as month,
Count(distinct user_id) user_num
From user_info
Group by substr( firstactivetime ,1,7);

4-2
Substr( string a , int start ,int len) 若不指定截取长度,则截止末尾;

4-3

Get_json_object( stringjson_string, string path)

Param1: 需要解析的json字段
Param2:用key取出想要获取的value值

Extra1(string) (“sysytemtyoe”:”ios”,”education”:”master”,”marriage_status”:”1”,”phonebrand”:”iphonex”)
Extra2(map

对于键值对类型数据,有些公司以string形式存储,有些公司存储map型,不同类型的数据处理需要使用不同的字符串函数;

方法1、select get_json_object(extra1 ,’ . p h o n e b r a n d ’ ) a s p h o n e b r a n d , C o u n t ( d i s t i n c t u s e r

你可能感兴趣的:(知识要点,练习题)