转化率统计
表名order.txt
字段id, name, pv
1,广告,10000
2,菜单,3000
3,详情,2600
4,购物车,300
5,下单,200
6,支付,190
7,支付ok,189
用到关键技术:
自连接,窗口函数max
前期准备:
create database if not exists hive_order;
use hive_order;
drop table if exists t_order;
create table t_order(id int,name string,pv int) row format delimated fields terminated by “,”;
load data local inpath"/home/hadoopUser/order.txt" into table t_order;
select * from t_order;
desc t_order;
使用严格模式(set hive.mapred.mode = strict;)可以禁止3种类型的查询:
(1)对于分区表,不加分区字段过滤条件,不能执行
(2)对于order by语句,必须使用limit语句。
(3)限制笛卡尔积的查询(join的时候不使用on,而使用where的)
我们要对表进行自连接,所以这里不作严格模式,设置为非严格。
set hive.mapred.mode = nonstrict;(默认undefined)
开启本地模式,对于数据量比较少,执行时间会缩短。
set hive.exec.mode.local.auto=true;(默认为false)
如此一来,对数据量比较小的操作,就可以在本地执行,这样要比提交任务到集群执行效率要快很多。
1. 求每一步相对于第一步的转化率
-
求出pv的最大值,把最大值作为一列
select a.*,b.bpv from t_order a,(select max(pv) bpv from t_order) b;
或者直接使用max窗口函数:
select *,max(pv) over(order by id) bpv from t_order;id name pv bpv 1 广告 10000 10000 2 菜单 3000 10000 3 详情 2600 10000 4 购物车 300 10000 5 下单