Hive入门,
字段截取
select substring(字段名,从第几位,截取几位) as 别名 from 表名 limit 2;
时间截取:使用substring
url截取:使用hive的内置函数parse_url_tuple
删除表数据,但不删除表结构
truncate tbale 表名;
hive的自定义函数:
- UDF:一进一出,只对单行数值产生作用 普通函数;用的最多的
- UDTF(User-Defined Table-Generating Functions):用户定义表生成函数,输入一行输出多行 表生成函数
- UDAF(User-Defined Aggregation Functions):用户定义聚合函数,可对多行数据产生作用;等同于SUM(),AVG()。多进一出。
UDTF函数可以把一个字段拆分返回多个字段 类似于生成了一个虚拟的表,该虚拟的表无法直接和原来的表进行关联,为此,使用lateral view进行表之间的关联 把虚拟的表挂接到原来的表上。
hive中的lateral view() 与 explode函数的使用
explode函数可以将一个array或者map展开。
explode(array)使得结果中将array列表里的每个元素生成一行;
explode(map)使得结果中将map里的每一对元素作为一行,key为一列,value为一列,
一般情况下,直接使用即可,也可以根据需要结合lateral view 使用
lateral view(侧视图)
lateral view为侧视图,意义是为了配合UDTF来使用,把某一行数据拆分成多行数据,不加lateral view的UDTF只能提取单个字段拆分,并不能关联原来的表。加上lateral view就可以将拆分的单个字段数据与原始表关联上。
格式
tableA lateral view explode(字段) 视图别名(虚拟表) as 字段别名
原表:
select name,address.* from test_message lateral view explode(location) address as guojia;
parse_urltuple 是hive内置的专门用于解析url的函数 是一个UDTF函数
要求输入的是标准的URL。
parse_url_tuple(regexp_replace(http_referer, "\"", ""), 'HOST', 'PATH','QUERY', 'QUERY:id')
使用正则替换函数把url两边的双引号换成空。
技巧
from关键字是查询语句sql的关键 后边跟的就是表,该表可能是存在的表,也可能是不存在的表,需要通过嵌套查询,先执行里边的查询,后执行外部查询。
多分组字段中,字段的顺序对结果的影响:
如果字段是并列关系,不会影响最终结果,但是会影响执行的顺序。
如果字段是包含关系,区分包含被包含对结果的影响:整体一样局部一定一样 反之不一定。
在group by中,出现在表达式中的字段,要么是分组的字段,要么是被聚合函数应用的字段。
多维数据分析
纬度往往就是分组的字段
如何确定纬度或者分组字段呢?
需求有按xxx 各xxx 每xxx
多维分析本质:基于多个不同的纬度计算相应的度量值。
常见的度量值:count sum avg max min topN
网站流量分析
基础指标多维统计分析
基础指标
-
PageView 浏览次数(PV):一天中页面被加载的总次数
例子:
select count(*) as pv from dw_weblog_detail t where t.datestr = '20181101' and t.valid = "true"; -
Unique Visitor独立访客(UV):一天内不重复的访客数
例子:select count(distinct t.remote_addr) as uv from dw_weblog_detail t where t.datestr="20181101" and t.valid="true"; -
访问次数(VV):今天会话总次数
例子:select count(t.session) as vv from ods_click_stream_visit t where t.datestr='20181101'; -
IP:一天内访问网站的不重复IP数
复合级指标
-
平均访问频度:平均每个人一天产生的会话次数=总会话次数(VV)/独立访客数(UV)
例子:select sum(a.num2)/count(a.num1) from (select t.remote_addr as num1,count(t.session) as num2 from ods_click_pageviews t where t.datestr='20181101' group by t.remote_addr) as a; -
人均浏览页数(平均访问深度):平均每个独立访客产生的浏览次数。人均浏览页数=浏览次数/独立访客
例子:select pv/uv from dw_webflow_basic_info t where t.datestr="20181101";
-
平均访问时长:平均每次访问会话在网站上停留时间。平均访问时长=访问总时长/访问次数
例子:select sum(t.page_staylong)/count(distinct t.session) from ods_click_pageviews t where t.datestr="20181101"; -
跳出率:是指用户到达网站仅浏览一个页面就离开的访问次数与所有访问次数的百分比。
方法:
1.数据表:
2.分组字段:
3.度量值: