Day24_20180531_网站日志流量分析项目05:Visit模型及事实表的构建 (1)

一、visit模型

      -》ETL

          9个字段

      -》Pageview模型

          11个字段

          sessionId,step,length

     -》visit模型

-》目标
		session
		起始时间:访问第一个页面的时间
		结束时间:访问最后一个页面的时间
		进入页面:访问的第一个页面
		离开页面:访问的最后一个页面
		访问页数:每个session中所有的记录数
		ip
		用户id
		来源页面:访问的第一个页面的前一个页面
		
-》代码实现
		input:读取pageview模型的输出
		map:
			key:session
			value:所有记录(pvbean)
		shuffle
			session   {record1、record2……}
		reduce:
			-》按照step进行排序
			sessionid:key
		起始时间:beans.get(0).getTime
		结束时间:beans.get(beans.size() -1).getTime
		进入页面:beans.get(0).getRequest
		离开页面:beans.get(beans.size()-1).getRequest
		访问页数:beans.size
		ip			
		用户id
		来源页面:beans.get(0).getHttp_ref

二、数据仓库及模型设计

    	-》什么是数据仓库?数据库有什么区别?
		-》数据仓库:用于存储数据的地方
		   注意:数据仓库:是数据入库,数据存储,数据清洗的一系列的工作构建的体系
		   注意:hive官网上说是Hadoop的数据仓库,但是hive并不是它其实是实现数据仓库的一个工具。
			-》数据入库
			-》数据存储
				-》文件系统:hdfs
				-》RDBMS:hive、oracle
				-》Nosql:hbase、redis
			-》数据清洗
			
			数据库(rdbms):财务部数据库、人事部数据库、业务部数据库
			数据仓库:
				菜农1-》蔬菜1 					
				菜农2—》蔬菜2  -》 超市(清洗、包装)  -》菜盘 -》做菜
				菜农3-》蔬菜3
			  注意:多种来源数据入库	   数据存储   数据清洗    构建模型 数据处理
注意:事实表要包含维度表

注意:事实表和维度表怎么关联决定了什么样的模型

注意:大数据都是选择星型模型进行数据仓库设计的,数据冗余其实还是有好处的,因为有利于并行化处理
注意:大数据框架是不会纠结数据的冗余,会使用星型模型一般不会用雪花模型。只有建立关系型数据库的时候才会考虑使用雪花模型。

数据仓库分层:

      不同数据、不同的业务线进行不同的分层处理

hive的功能:
		Hive不是数据仓库,是实现hadoop数据仓库的一个工具
		是将hdfs中文件映射为表结构,然后使用Sql对表进行存储、入库、分析等一系列	的操作。		

三、数据分析实现

??

visit模型(对session进行分组,每个session只有一条)

基于pv模型

 

visistMode.java

PVBean.java

添加分析文件

测试:

按照Day22 pv的方式打好jar包,放到linux中去

[root@bigdata-training01 hive-1.1.0-cdh5.7.6]# bin/beeline
Beeline version 1.1.0-cdh5.7.6 by Apache Hive
beeline>  !connect jdbc:hive2://192.168.150.222:10000
scan complete in 2ms
Connecting to jdbc:hive2://192.168.150.222:10000
Enter username for jdbc:hive2://192.168.150.222:10000: root
Enter password for jdbc:hive2://192.168.150.222:10000: ****
create database if not exists weblog;
use weblog;
drop table if exists weblog_origin;
create table weblog_origin(
valid string,
ip    string,
user_id string,
time string,
request string,
status string,
body_size string,
http_ref string,
user_agent string)
partitioned by (datestr string)
row format delimited
fields terminated by '\001';
load data local inpath '/opt/datas/part-r-etl' into table weblog_origin partition (datestr='20180531');
show tables;

desc  weblog_origin;

select ip,time,body_size from weblog_origin limit 10;

select valid,ip,time,body_size,status from weblog_origin limit 10;

visist模型

drop table if exist click_visit;
create table click_visit(
session     string,
ip          string,
inTime      string,
outTime     string,
inPage      string,
outPage     string,
refere     string,
pageNum  int)
partitioned by (datestr string);
load data local inpath '/opt/datas/part-r-visit' into table click_visit partition (datestr='20180531');

分析表weblog_detail

drop table weblog_detail;
create table weblog_detail(
valid           string, --有效标识
ip              string, --来源IP
user_id         string, --用户标识
time            string, --访问完整时间
daystr          string, --访问日期
timestr         string, --访问时间
month           string, --访问月
day             string, --访问日
hour            string, --访问时
request         string, --请求的url
status          string, --响应码
body_size       string, --传输字节数
http_ref        string, --来源url
ref_host        string, --来源的host
ref_path        string, --来源的路径
ref_query       string, --来源参数query
ref_query_id    string, --来源参数query的值
user_agent      string --客户终端标识
)partitioned by(datestr string);
insert overwrite table weblog_detail partition (datestr='20180531')
select 
c.valid,c.ip,c.user_id,c.time,
substring(c.time,0,10) as daystr,
substring(c.time,12) as timestr,
substring(c.time,6,2) as month,
substring(c.time,9,2) as day,
substring(c.time,12,2) as hour,
c.request,
c.status,
c.body_size,
c.http_ref,
c.ref_host,
ref_path,
ref_query,
ref_query_id,
c.user_agent
from 
(
    select
        a.valid,
        a.ip,
        a.user_id,
        a.time,
        a.request,
        a.status,
        a.body_size,
        a.http_ref,
        a.user_agent,
        b.ref_host,
        b.ref_path,
        b.ref_query,
        b.ref_query_id
    from 
        weblog_origin a 
    LATERAL VIEW 
        parse_url_tuple(regexp_replace(http_ref,"\"",""),'HOST','PATH','QUERY','QUERY:id') b 
    as ref_host,ref_path,ref_query,ref_query_id
)  c where c.time != 'null';

parse_url_tuple用法

desc function formatted parse_url_tuple;
ref_host        string, --来源的host
ref_path        string, --来源的路径
ref_query       string, --来源参数query
ref_query_id    string, --来源参数query的值

https://search.jd.com/Search?keyword=%E7%AC%94%E8%AE%B0%E6%9C%AC%20%E8%BD%BB%E8%96%84%E6%9C%AC&enc=utf-8&wq=%E7%AC%94%E8%AE%B0%E6%9C%AC%20%E8%BD%BB%E8%96%84%E6%9C%AC&pvid=r66frrzi.8skclkfr08v5ve2

'HOST',:来源地址   search.jd.com
'PATH',:Search
'QUERY',keyword=%E7%AC%94%E8%AE%B0%E6%9C%AC%20%E8%BD%BB%E8%96%84%E6%9C%AC&enc=utf-8&wq=%E7%AC%94%E8%AE%B0%E6%9C%AC%20%E8%BD%BB%E8%96%84%E6%9C%AC&pvid=r66frrzi.8skclkfr08v5ve2
'QUERY:enc'  utf-8

regexp_replace的用法

select parse_url_tuple(regexp_replace(http_ref,"\"",""),'HOST','PATH','QUERY','QUERY:id') from weblog_origin limit 10;

regexp_replace将” ”替换为空: 

select regexp_replace(http_ref,"\"","") from weblog_origin limit 10;

 

 

0: jdbc:hive2://192.168.150.222:10000> use weblog;
0: jdbc:hive2://192.168.150.222:10000> show tables;

 

 select daystr,timestr,ref_host,ref_path from weblog_detail limit 10;

 

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值