日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > windows >内容正文

windows

网站流量日志数据分析系统(模块开发----数据仓库设计)

發(fā)布時間:2024/1/8 windows 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 网站流量日志数据分析系统(模块开发----数据仓库设计) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1. 維度建?;靖拍?/h1>


維度建模(dimensional modeling)是專門用于分析型數(shù)據(jù)庫、數(shù)據(jù)倉庫、數(shù)據(jù)集市建模的方法。數(shù)據(jù)集市可以理解為是一種"小型數(shù)據(jù)倉庫"。
維度表(dimension)
維度表示你要對數(shù)據(jù)進行分析時所用的一個量,比如你要分析產(chǎn)品銷售情況, 你可以選擇按類別來進行分析,或按區(qū)域來分析。這樣的按..分析就構(gòu)成一個維度。再比如"昨天下午我在星巴克花費200元喝了一杯卡布奇諾"。那么以消費為主題進行分析,可從這段信息中提取三個維度:時間維度(昨天下午),地點維度(星巴克), 商品維度(卡布奇諾)。通常來說維度表信息比較固定,且數(shù)據(jù)量小。
事實表(fact table)
表示對分析主題的度量。事實表包含了與各維度表相關(guān)聯(lián)的外鍵,并通過JOIN方式與維度表關(guān)聯(lián)。事實表的度量通常是數(shù)值類型,且記錄數(shù)會不斷增加,表規(guī)模迅速增長。比如上面的消費例子,它的消費事實表結(jié)構(gòu)示例如下:
消費事實表:Prod_id(引用商品維度表), TimeKey(引用時間維度表), Place_id(引用地點維度表), Unit(銷售量)。
總的說來,在數(shù)據(jù)倉庫中不需要嚴(yán)格遵守規(guī)范化設(shè)計原則。因為數(shù)據(jù)倉庫的主導(dǎo)功能就是面向分析,以查詢?yōu)橹?#xff0c;不涉及數(shù)據(jù)更新操作。事實表的設(shè)計是以能夠正確記錄歷史信息為準(zhǔn)則,維度表的設(shè)計是以能夠以合適的角度來聚合主題內(nèi)容為準(zhǔn)則。

?

2. 維度建模三種模式


2.1. 星型模式
星形模式(Star Schema)是最常用的維度建模方式。星型模式是以事實表為中心,所有的維度表直接連接在事實表上,像星星一樣。
星形模式的維度建模由一個事實表和一組維表成,且具有以下特點:
?a. 維表只和事實表關(guān)聯(lián),維表之間沒有關(guān)聯(lián);
?b. 每個維表主鍵為單列,且該主鍵放置在事實表中,作為兩邊連接的外鍵;
c. 以事實表為核心,維表圍繞核心呈星形分布;
?

2.2. 雪花模式
雪花模式(Snowflake Schema)是對星形模式的擴展。雪花模式的維度表可以擁有其他維度表的,雖然這種模型相比星型更規(guī)范一些,但是由于這種模型不太容易理解,維護成本比較高,而且性能方面需要關(guān)聯(lián)多層維表,性能也比星型模型要低。所以一般不是很常用。
?

2.3. 星座模式
星座模式是星型模式延伸而來,星型模式是基于一張事實表的,而星座模式是基于多張事實表的,而且共享維度信息。
前面介紹的兩種維度建模方法都是多維表對應(yīng)單事實表,但在很多時候維度空間內(nèi)的事實表不止一個,而一個維表也可能被多個事實表用到。在業(yè)務(wù)發(fā)展后期,絕大部分維度建模都采用的是星座模式。
?

3. 本項目中數(shù)據(jù)倉庫的設(shè)計


注:采用星型模型 ?

?
3.1. 事實表設(shè)計

原始數(shù)據(jù)表: ods_weblog_origin =>對應(yīng)mr清洗完之后的數(shù)據(jù)

valid

string

是否有效

remote_addr

string

訪客ip

remote_user

string

訪客用戶信息

time_local

string

請求時間

request

string

請求url

status

string

響應(yīng)碼

body_bytes_sent

string

響應(yīng)字節(jié)數(shù)

http_referer

string

來源url

http_user_agent

string

訪客終端信息

?

?

?

訪問日志明細(xì)寬表:dw_weblog_detail

valid

string

是否有效

remote_addr

string

訪客ip

remote_user

string

訪客用戶信息

time_local

string

請求完整時間

daystr

string

訪問日期

timestr

string

訪問時間

month

string

訪問月

day

string

訪問日

hour

string

訪問時

request

string

請求url整串

status

string

響應(yīng)碼

body_bytes_sent

string

響應(yīng)字節(jié)數(shù)

http_referer

string

來源url

ref_host

string

來源的host

ref_path

string

來源的路徑

ref_query

string

來源參數(shù)query

ref_query_id

string

來源參數(shù)query值

http_user_agent

string

客戶終端標(biāo)識

3.2. 維度表設(shè)計?

時間維度 t_dim_time

date_Key

year

month

day

hour

?

訪客地域維度t_dim_area

area_ID

北京

上海

廣州

深圳

?

終端類型維度t_dim_termination

uc

firefox

chrome

safari

ios

android

?

網(wǎng)站欄目維度 t_dim_section

跳蚤市場

房租信息

休閑娛樂

建材裝修

本地服務(wù)

人才市場

?

注意:
維度表的數(shù)據(jù)一般要結(jié)合業(yè)務(wù)情況自己寫腳本按照規(guī)則生成,也可以使用工具生成,方便后續(xù)的關(guān)聯(lián)分析。
比如一般會事前生成時間維度表中的數(shù)據(jù),跨度從業(yè)務(wù)需要的日期到當(dāng)前日期即可.具體根據(jù)你的分析粒度,可以生成年,季,月,周,天,時等相關(guān)信息,用于分析。
?

三、 模塊開發(fā)----ETL


ETL工作的實質(zhì)就是從各個數(shù)據(jù)源提取數(shù)據(jù),對數(shù)據(jù)進行轉(zhuǎn)換,并最終加載填充數(shù)據(jù)到數(shù)據(jù)倉庫維度建模后的表中。只有當(dāng)這些維度/事實表被填充好,ETL工作才算完成。
本項目的數(shù)據(jù)分析過程在hadoop集群上實現(xiàn),主要應(yīng)用hive數(shù)據(jù)倉庫工具,因此,采集并經(jīng)過預(yù)處理后的數(shù)據(jù),需要加載到hive數(shù)據(jù)倉庫中,以進行后續(xù)的分析過程。
1. 創(chuàng)建ODS層數(shù)據(jù)表
1.1. 原始日志數(shù)據(jù)表
?

drop table if exists ods_weblog_origin; create table ods_weblog_origin( valid string, remote_addr string, remote_user string, time_local string, request string, status string, body_bytes_sent string, http_referer string, http_user_agent string) partitioned by (datestr string) row format delimited fields terminated by '\001';

1.2. 點擊流模型pageviews表

drop table if exists ods_click_pageviews; create table ods_click_pageviews( session string, remote_addr string, remote_user string, time_local string, request string, visit_step string, page_staylong string, http_referer string, http_user_agent string, body_bytes_sent string, status string) partitioned by (datestr string) row format delimited fields terminated by '\001';

1.3. 點擊流visit模型表

drop table if exist ods_click_stream_visit; create table ods_click_stream_visit( session string, remote_addr string, inTime string, outTime string, inPage string, outPage string, referal string, pageVisits int) partitioned by (datestr string) row format delimited fields terminated by '\001';

2. 導(dǎo)入ODS層數(shù)據(jù)

load data inpath '/weblog/preprocessed/' overwrite into table ods_weblog_origin partition(datestr='20130918');--數(shù)據(jù)導(dǎo)入 show partitions ods_weblog_origin;---查看分區(qū) select count(*) from ods_weblog_origin; --統(tǒng)計導(dǎo)入的數(shù)據(jù)總數(shù) 點擊流模型的兩張表數(shù)據(jù)導(dǎo)入操作同上。 注:生產(chǎn)環(huán)境中應(yīng)該將數(shù)據(jù)load命令,寫在腳本中,然后配置在azkaban中定時運行,注意運行的時間點,應(yīng)該在預(yù)處理數(shù)據(jù)完成之后。

3. 生成ODS層明細(xì)寬表
3.1. 需求實現(xiàn)
整個數(shù)據(jù)分析的過程是按照數(shù)據(jù)倉庫的層次分層進行的,總體來說,是從ODS原始數(shù)據(jù)中整理出一些中間表(比如,為后續(xù)分析方便,將原始數(shù)據(jù)中的時間、url等非結(jié)構(gòu)化數(shù)據(jù)作結(jié)構(gòu)化抽取,將各種字段信息進行細(xì)化,形成明細(xì)表),然后再在中間表的基礎(chǔ)之上統(tǒng)計出各種指標(biāo)數(shù)據(jù)。
?

3.2. ETL實現(xiàn) ? 建明細(xì)表ods_weblog_detail: drop table ods_weblog_detail; create table ods_weblog_detail( valid string, --有效標(biāo)識 remote_addr string, --來源IP remote_user string, --用戶標(biāo)識 time_local string, --訪問完整時間 daystr string, --訪問日期 timestr string, --訪問時間 month string, --訪問月 day string, --訪問日 hour string, --訪問時 request string, --請求的url status string, --響應(yīng)碼 body_bytes_sent string, --傳輸字節(jié)數(shù) http_referer string, --來源url ref_host string, --來源的host ref_path string, --來源的路徑 ref_query string, --來源參數(shù)query ref_query_id string, --來源參數(shù)query的值 http_user_agent string --客戶終端標(biāo)識 ) partitioned by(datestr string);? 通過查詢插入數(shù)據(jù)到明細(xì)寬表 ods_weblog_detail中 1、 抽取refer_url到中間表 t_ods_tmp_referurl 也就是將來訪url分離出host path query query id drop table if exists t_ods_tmp_referurl; create table t_ods_tmp_referurl as SELECT a.*,b.* FROM ods_weblog_origin a LATERAL VIEW parse_url_tuple(regexp_replace(http_referer, "\"", ""), 'HOST', 'PATH','QUERY', 'QUERY:id') b as host, path, query, query_id; 注:lateral view用于和split, explode等UDTF一起使用,它能夠?qū)⒁涣袛?shù)據(jù)拆成多行數(shù)據(jù)。 UDTF(User-Defined Table-Generating Functions) 用來解決輸入一行輸出多行(On-to-many maping) 的需求。Explode也是拆列函數(shù),比如Explode (ARRAY) ,array中的每個元素生成一行。 2、抽取轉(zhuǎn)換time_local字段到中間表明細(xì)表 t_ods_tmp_detail drop table if exists t_ods_tmp_detail; create table t_ods_tmp_detail as select b.*,substring(time_local,0,10) as daystr, substring(time_local,12) as tmstr, substring(time_local,6,2) as month, substring(time_local,9,2) as day, substring(time_local,11,3) as hour from t_ods_tmp_referurl b; 3、以上語句可以合成一個總的語句 insert into table shizhan.ods_weblog_detail partition(datestr='2013-09-18') select c.valid,c.remote_addr,c.remote_user,c.time_local, substring(c.time_local,0,10) as daystr, substring(c.time_local,12) as tmstr, substring(c.time_local,6,2) as month, substring(c.time_local,9,2) as day, substring(c.time_local,11,3) as hour, c.request,c.status,c.body_bytes_sent,c.http_referer,c.ref_host,c.ref_path,c.ref_query,c.ref_query_id,c.http_user_agent from (SELECT a.valid,a.remote_addr,a.remote_user,a.time_local, a.request,a.status,a.body_bytes_sent,a.http_referer,a.http_user_agent,b.ref_host,b.ref_path,b.ref_query,b.ref_query_id FROM shizhan.ods_weblog_origin a LATERAL VIEW parse_url_tuple(regexp_replace(http_referer, "\"", ""), 'HOST', 'PATH','QUERY', 'QUERY:id') b as ref_host, ref_path, ref_query,ref_query_id) c;

四、 模塊開發(fā)----統(tǒng)計分析

數(shù)據(jù)倉庫建設(shè)好以后,用戶就可以編寫Hive SQL語句對其進行訪問并對其中數(shù)據(jù)進行分析。
在實際生產(chǎn)中,究竟需要哪些統(tǒng)計指標(biāo)通常由數(shù)據(jù)需求相關(guān)部門人員提出,而且會不斷有新的統(tǒng)計需求產(chǎn)生,以下為網(wǎng)站流量分析中的一些典型指標(biāo)示例。
注:每一種統(tǒng)計指標(biāo)都可以跟各維度表進行鉆取。
1. 流量分析
1.1. 多維度統(tǒng)計PV總量
按時間維度
?

--計算每小時pvs,注意gruop by語法 select count(*) as pvs,month,day,hour from ods_weblog_detail group by month,day,hour;

方式一:直接在ods_weblog_detail單表上進行查詢

--計算該處理批次(一天)中的各小時pvs drop table dw_pvs_everyhour_oneday; create table dw_pvs_everyhour_oneday(month string,day string,hour string,pvs bigint) partitioned by(datestr string);insert into table dw_pvs_everyhour_oneday partition(datestr='20130918') select a.month as month,a.day as day,a.hour as hour,count(*) as pvs from ods_weblog_detail a where a.datestr='20130918' group by a.month,a.day,a.hour;--計算每天的pvs drop table dw_pvs_everyday; create table dw_pvs_everyday(pvs bigint,month string,day string);insert into table dw_pvs_everyday select count(*) as pvs,a.month as month,a.day as day from ods_weblog_detail a group by a.month,a.day;

方式二:與時間維表關(guān)聯(lián)查詢

--維度:日 drop table dw_pvs_everyday; create table dw_pvs_everyday(pvs bigint,month string,day string);insert into table dw_pvs_everyday select count(*) as pvs,a.month as month,a.day as day from (select distinct month, day from t_dim_time) a join ods_weblog_detail b on a.month=b.month and a.day=b.day group by a.month,a.day;--維度:月 drop table dw_pvs_everymonth; create table dw_pvs_everymonth (pvs bigint,month string);insert into table dw_pvs_everymonth select count(*) as pvs,a.month from (select distinct month from t_dim_time) a join ods_weblog_detail b on a.month=b.month group by a.month;--另外,也可以直接利用之前的計算結(jié)果。比如從之前算好的小時結(jié)果中統(tǒng)計每一天的 Insert into table dw_pvs_everyday Select sum(pvs) as pvs,month,day from dw_pvs_everyhour_oneday group by month,day having day='18';

按終端維度
數(shù)據(jù)中能夠反映出用戶終端信息的字段是http_user_agent。
User Agent也簡稱UA。它是一個特殊字符串頭,是一種向訪問網(wǎng)站提供所使用的瀏覽器類型及版本、操作系統(tǒng)及版本、瀏覽器內(nèi)核、等信息的標(biāo)識。例如:
?

User-Agent,Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.276 Safari/537.36

上述UA信息就可以提取出以下的信息:
chrome 58.0、瀏覽器?? ?chrome、瀏覽器版本?? ?58.0、系統(tǒng)平臺?? ?windows
瀏覽器內(nèi)核?? ?webkit

這里不再拓展相關(guān)知識,感興趣的可以查看參考資料如何解析UA。
可以用下面的語句進行試探性統(tǒng)計,當(dāng)然這樣的準(zhǔn)確度不是很高。
?

select distinct(http_user_agent) from ods_weblog_detail where http_user_agent like '%Chrome%' limit 200;

按欄目維度
網(wǎng)站欄目可以理解為網(wǎng)站中內(nèi)容相關(guān)的主題集中。體現(xiàn)在域名上來看就是不同的欄目會有不同的二級目錄。比如某網(wǎng)站網(wǎng)址為www.xxxx.cn,旗下欄目可以通過如下方式訪問:
欄目維度:../job
欄目維度:../news
欄目維度:../sports
欄目維度:../technology
那么根據(jù)用戶請求url就可以解析出訪問欄目,然后按照欄目進行統(tǒng)計分析。


按referer維度

--統(tǒng)計每小時各來訪url產(chǎn)生的pv量 drop table dw_pvs_referer_everyhour; create table dw_pvs_referer_everyhour(referer_url string,referer_host string,month string,day string,hour string,pv_referer_cnt bigint) partitioned by(datestr string);insert into table dw_pvs_referer_everyhour partition(datestr='20130918') select http_referer,ref_host,month,day,hour,count(1) as pv_referer_cnt from ods_weblog_detail group by http_referer,ref_host,month,day,hour having ref_host is not null order by hour asc,day asc,month asc,pv_referer_cnt desc; --統(tǒng)計每小時各來訪host的產(chǎn)生的pv數(shù)并排序 drop table dw_pvs_refererhost_everyhour; create table dw_pvs_refererhost_everyhour(ref_host string,month string,day string,hour string,ref_host_cnts bigint) partitioned by(datestr string);insert into table dw_pvs_refererhost_everyhour partition(datestr='20130918') select ref_host,month,day,hour,count(1) as ref_host_cnts from ods_weblog_detail group by ref_host,month,day,hour having ref_host is not null order by hour asc,day asc,month asc,ref_host_cnts desc;

注:還可以按來源地域維度、訪客終端維度等計算

1.2. 人均瀏覽量
需求描述:統(tǒng)計今日所有來訪者平均請求的頁面數(shù)。
人均瀏覽量也稱作人均瀏覽頁數(shù),該指標(biāo)可以說明網(wǎng)站對用戶的粘性。
人均頁面瀏覽量表示用戶某一時段平均瀏覽頁面的次數(shù)。
計算方式:總頁面請求數(shù)/去重總?cè)藬?shù)
remote_addr表示不同的用戶。可以先統(tǒng)計出不同remote_addr的pv量,然后累加(sum)所有pv作為總的頁面請求數(shù),再count所有remote_addr作為總的去重總?cè)藬?shù)。
?

--總頁面請求數(shù)/去重總?cè)藬?shù) drop table dw_avgpv_user_everyday; create table dw_avgpv_user_everyday( day string, avgpv string);insert into table dw_avgpv_user_everyday select '20130918',sum(b.pvs)/count(b.remote_addr) from (select remote_addr,count(1) as pvs from ods_weblog_detail where datestr='20130918' group by remote_addr) b;

1.3. 統(tǒng)計pv總量最大的來源TOPN (分組TOP)


需求描述:統(tǒng)計每小時各來訪host的產(chǎn)生的pvs數(shù)最多的前N個(topN)。
row_number()函數(shù)
??? ?語法:row_number() over (partition by xxx order by xxx) rank,rank為分組的別名,相當(dāng)于新增一個字段為rank。
??? ?partition by用于分組,比方說依照sex字段分組
??? ?order by用于分組內(nèi)排序,比方說依照sex分組,組內(nèi)按照age排序
??? ?排好序之后,為每個分組內(nèi)每一條分組記錄從1開始返回一個數(shù)字
??? ?取組內(nèi)某個數(shù)據(jù),可以使用where 表名.rank>x之類的語法去取
以下語句對每個小時內(nèi)的來訪host次數(shù)倒序排序標(biāo)號:
select ref_host,ref_host_cnts,concat(month,day,hour),
row_number() over (partition by concat(month,day,hour) order by ref_host_cnts desc) as od from dw_pvs_refererhost_everyhour;
效果如下:

根據(jù)上述row_number的功能,可編寫hql取各小時的ref_host訪問次數(shù)topn

drop table dw_pvs_refhost_topn_everyhour; create table dw_pvs_refhost_topn_everyhour( hour string, toporder string, ref_host string, ref_host_cnts string )partitioned by(datestr string);insert into table dw_pvs_refhost_topn_everyhour partition(datestr='20130918') select t.hour,t.od,t.ref_host,t.ref_host_cnts from(select ref_host,ref_host_cnts,concat(month,day,hour) as hour, row_number() over (partition by concat(month,day,hour) order by ref_host_cnts desc) as od from dw_pvs_refererhost_everyhour) t where od<=3;

結(jié)果如下:

2. 受訪分析(從頁面的角度分析)


2.1. 各頁面訪問統(tǒng)計
主要是針對數(shù)據(jù)中的request進行統(tǒng)計分析,比如各頁面PV ,各頁面UV 等。
以上指標(biāo)無非就是根據(jù)頁面的字段group by。例如:
?

--統(tǒng)計各頁面pv select request as request,count(request) as request_counts from ods_weblog_detail group by request having request is not null order by request_counts desc limit 20;

2.2. 熱門頁面統(tǒng)計

--統(tǒng)計每日最熱門的頁面top10 drop table dw_hotpages_everyday; create table dw_hotpages_everyday(day string,url string,pvs string);insert into table dw_hotpages_everyday select '20130918',a.request,a.request_counts from (select request as request,count(request) as request_counts from ods_weblog_detail where datestr='20130918' group by request having request is not null) a order by a.request_counts desc limit 10;

3. 訪客分析


3.1. 獨立訪客
需求描述:按照時間維度比如小時來統(tǒng)計獨立訪客及其產(chǎn)生的pv。
對于獨立訪客的識別,如果在原始日志中有用戶標(biāo)識,則根據(jù)用戶標(biāo)識即很好實現(xiàn);此處,由于原始日志中并沒有用戶標(biāo)識,以訪客IP來模擬,技術(shù)上是一樣的,只是精確度相對較低。
?

--時間維度:時 drop table dw_user_dstc_ip_h; create table dw_user_dstc_ip_h( remote_addr string, pvs bigint, hour string);insert into table dw_user_dstc_ip_h select remote_addr,count(1) as pvs,concat(month,day,hour) as hour from ods_weblog_detail Where datestr='20130918' group by concat(month,day,hour),remote_addr;在此結(jié)果表之上,可以進一步統(tǒng)計,如每小時獨立訪客總數(shù): select count(1) as dstc_ip_cnts,hour from dw_user_dstc_ip_h group by hour; --時間維度:日 select remote_addr,count(1) as counts,concat(month,day) as day from ods_weblog_detail Where datestr='20130918' group by concat(month,day),remote_addr; --時間維度:月 select remote_addr,count(1) as counts,month from ods_weblog_detail group by month,remote_addr;

3.2. 每日新訪客
需求:將每天的新訪客統(tǒng)計出來。
實現(xiàn)思路:創(chuàng)建一個去重訪客累積表,然后將每日訪客對比累積表。
?

--歷日去重訪客累積表 drop table dw_user_dsct_history; create table dw_user_dsct_history( day string, ip string ) partitioned by(datestr string);--每日新訪客表 drop table dw_user_new_d; create table dw_user_new_d ( day string, ip string ) partitioned by(datestr string);--每日新用戶插入新訪客表 insert into table dw_user_new_d partition(datestr='20130918') select tmp.day as day,tmp.today_addr as new_ip from ( select today.day as day,today.remote_addr as today_addr,old.ip as old_addr from (select distinct remote_addr as remote_addr,"20130918" as day from ods_weblog_detail where datestr="20130918") today left outer join dw_user_dsct_history old on today.remote_addr=old.ip ) tmp where tmp.old_addr is null;--每日新用戶追加到累計表 insert into table dw_user_dsct_history partition(datestr='20130918') select day,ip from dw_user_new_d where datestr='20130918';

驗證查看:

select count(distinct remote_addr) from ods_weblog_detail;select count(1) from dw_user_dsct_history where datestr='20130918';select count(1) from dw_user_new_d where datestr='20130918';

注:還可以按來源地域維度、訪客終端維度等計算

4. 訪客Visit分析(點擊流模型)


4.1. 回頭/單次訪客統(tǒng)計
需求:查詢今日所有回頭訪客及其訪問次數(shù)。

實現(xiàn)思路:上表中出現(xiàn)次數(shù)>1的訪客,即回頭訪客;反之,則為單次訪客。

drop table dw_user_returning; create table dw_user_returning( day string, remote_addr string, acc_cnt string) partitioned by (datestr string);insert overwrite table dw_user_returning partition(datestr='20130918') select tmp.day,tmp.remote_addr,tmp.acc_cnt from (select '20130918' as day,remote_addr,count(session) as acc_cnt from ods_click_stream_visit group by remote_addr) tmp where tmp.acc_cnt>1;

4.2. 人均訪問頻次


需求:統(tǒng)計出每天所有用戶訪問網(wǎng)站的平均次數(shù)(visit)
總visit數(shù)/去重總用戶數(shù)
?

select count(pagevisits)/count(distinct remote_addr) from ods_click_stream_visit where datestr='20130918';

5. 關(guān)鍵路徑轉(zhuǎn)化率分析(漏斗模型)


5.1. 需求分析
轉(zhuǎn)化:在一條指定的業(yè)務(wù)流程中,各個步驟的完成人數(shù)及相對上一個步驟的百分比。
?

5.2. 模型設(shè)計

定義好業(yè)務(wù)流程中的頁面標(biāo)識,下例中的步驟為: Step1、 /item Step2、 /category Step3、 /index Step4、 /order

5.3. 開發(fā)實現(xiàn)

??? ?查詢每一個步驟的總訪問人數(shù)

--查詢每一步人數(shù)存入dw_oute_numbs create table dw_oute_numbs as select 'step1' as step,count(distinct remote_addr) as numbs from ods_click_pageviews where datestr='20130920' and request like '/item%' union select 'step2' as step,count(distinct remote_addr) as numbs from ods_click_pageviews where datestr='20130920' and request like '/category%' union select 'step3' as step,count(distinct remote_addr) as numbs from ods_click_pageviews where datestr='20130920' and request like '/order%' union select 'step4' as step,count(distinct remote_addr) as numbs from ods_click_pageviews where datestr='20130920' and request like '/index%';

注:UNION將多個SELECT語句的結(jié)果集合并為一個獨立的結(jié)果集。

??? ?查詢每一步驟相對于路徑起點人數(shù)的比例
思路:級聯(lián)查詢,利用自join
?

--dw_oute_numbs跟自己join select rn.step as rnstep,rn.numbs as rnnumbs,rr.step as rrstep,rr.numbs as rrnumbs from dw_oute_numbs rn inner join dw_oute_numbs rr; --每一步的人數(shù)/第一步的人數(shù)==每一步相對起點人數(shù)比例 select tmp.rnstep,tmp.rnnumbs/tmp.rrnumbs as ratio from ( select rn.step as rnstep,rn.numbs as rnnumbs,rr.step as rrstep,rr.numbs as rrnumbs from dw_oute_numbs rn inner join dw_oute_numbs rr) tmp where tmp.rrstep='step1';

??? ?查詢每一步驟相對于上一步驟的漏出率

--自join表過濾出每一步跟上一步的記錄 select rn.step as rnstep,rn.numbs as rnnumbs,rr.step as rrstep,rr.numbs as rrnumbs from dw_oute_numbs rn inner join dw_oute_numbs rr where cast(substr(rn.step,5,1) as int)=cast(substr(rr.step,5,1) as int)-1; select tmp.rrstep as step,tmp.rrnumbs/tmp.rnnumbs as leakage_rate from ( select rn.step as rnstep,rn.numbs as rnnumbs,rr.step as rrstep,rr.numbs as rrnumbs from dw_oute_numbs rn inner join dw_oute_numbs rr) tmp where cast(substr(tmp.rnstep,5,1) as int)=cast(substr(tmp.rrstep,5,1) as int)-1;


匯總以上兩種指標(biāo)
?

select abs.step,abs.numbs,abs.rate as abs_ratio,rel.rate as leakage_rate from ( select tmp.rnstep as step,tmp.rnnumbs as numbs,tmp.rnnumbs/tmp.rrnumbs as rate from ( select rn.step as rnstep,rn.numbs as rnnumbs,rr.step as rrstep,rr.numbs as rrnumbs from dw_oute_numbs rn inner join dw_oute_numbs rr) tmp where tmp.rrstep='step1' ) abs left outer join ( select tmp.rrstep as step,tmp.rrnumbs/tmp.rnnumbs as rate from ( select rn.step as rnstep,rn.numbs as rnnumbs,rr.step as rrstep,rr.numbs as rrnumbs from dw_oute_numbs rn inner join dw_oute_numbs rr) tmp where cast(substr(tmp.rnstep,5,1) as int)=cast(substr(tmp.rrstep,5,1) as int)-1 ) rel on abs.step=rel.step;

五、 模塊開發(fā)----結(jié)果導(dǎo)出

為了將我們計算出來的數(shù)據(jù)通過報表的形式展現(xiàn)到前臺頁面上去,我們可以通過sqoop將我們計算后的數(shù)據(jù)導(dǎo)出到關(guān)系型數(shù)據(jù)庫mysql當(dāng)中去(通常計算之后的數(shù)據(jù)量一般都不會太大,可以考慮使用關(guān)系型數(shù)據(jù)庫的方式來做我們的報表展現(xiàn),如果統(tǒng)計之后的數(shù)據(jù)量仍然很大,那么就應(yīng)該考慮使用大數(shù)據(jù)的技術(shù)來實現(xiàn)我們數(shù)據(jù)的展現(xiàn))

這里選擇幾張hive表進行導(dǎo)出,其他的所有的導(dǎo)出基本上都是一樣

1. 第一步:創(chuàng)建mysql數(shù)據(jù)庫以及對應(yīng)的數(shù)據(jù)庫表

SQLyog Ultimate v8.32 MySQL - 5.6.22-log : Database - weblog ********************************************************************* */ /*!40101 SET NAMES utf8 */;/*!40101 SET SQL_MODE=''*/;/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; /*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; CREATE DATABASE /*!32312 IF NOT EXISTS*/`weblog` /*!40100 DEFAULT CHARACTER SET utf8 */;USE `weblog`;/*Table structure for table `dw_pvs_everyday` */DROP TABLE IF EXISTS `dw_pvs_everyday`;CREATE TABLE `dw_pvs_everyday` (`pvs` varchar(32) DEFAULT NULL,`month` varchar(16) DEFAULT NULL,`day` varchar(16) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8;/*Table structure for table `dw_pvs_everyhour_oneday` */DROP TABLE IF EXISTS `dw_pvs_everyhour_oneday`;CREATE TABLE `dw_pvs_everyhour_oneday` (`month` varchar(32) DEFAULT NULL,`day` varchar(32) DEFAULT NULL,`hour` varchar(32) DEFAULT NULL,`pvs` varchar(32) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8;/*Table structure for table `dw_pvs_referer_everyhour` */DROP TABLE IF EXISTS `dw_pvs_referer_everyhour`;CREATE TABLE `dw_pvs_referer_everyhour` (`refer_url` varchar(2048) DEFAULT NULL,`referer_host` varchar(64) DEFAULT NULL,`month` varchar(32) DEFAULT NULL,`day` varchar(32) DEFAULT NULL,`hour` varchar(32) DEFAULT NULL,`pv_referer_cnt` varchar(32) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8;/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; /*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; /*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;

2. 第二步:通過sqoop命令來進行導(dǎo)出

/export/servers/sqoop-1.4.6-cdh5.14.0/bin/sqoop export --connect jdbc:mysql://192.168.1.106:3306/weblog --username root --password admin --m 1 --export-dir /user/hive/warehouse/weblog.db/dw_pvs_everyday --table dw_pvs_everyday --input-fields-terminated-by '\001'/export/servers/sqoop-1.4.6-cdh5.14.0/bin/sqoop export --connect jdbc:mysql://192.168.1.106:3306/weblog --username root --password admin --m 1 --export-dir /user/hive/warehouse/weblog.db/dw_pvs_everyhour_oneday/datestr=20130918 --table dw_pvs_everyhour_oneday --input-fields-terminated-by '\001' /export/servers/sqoop-1.4.6-cdh5.14.0/bin/sqoop export --connect jdbc:mysql://192.168.1.106:3306/weblog --username root --password admin --m 1 --export-dir /user/hive/warehouse/weblog.db/dw_pvs_referer_everyhour/datestr=20130918 --table dw_pvs_referer_everyhour --input-fields-terminated-by '\001'

六、 模塊開發(fā)----工作流調(diào)度

整個項目的數(shù)據(jù)按照處理過程,從數(shù)據(jù)采集到數(shù)據(jù)分析,再到結(jié)果數(shù)據(jù)的導(dǎo)出,一系列的任務(wù)可以分割成若干個azkaban的job單元,然后由工作流調(diào)度器調(diào)度執(zhí)行。

調(diào)度腳本的編寫難點在于shell腳本。但是一般都是有固定編寫模式。大家可以參考資料中的腳本進行編寫。

第一步:開發(fā)我們的DateUtil工具類

開發(fā)我們的DateUtil工具類,用于獲取前一天的時間

public class DateUtil {/*** 獲取昨日的日期* @return*/public static String getYestDate(){Calendar instance = Calendar.getInstance();instance.add(Calendar.DATE,-1);Date time = instance.getTime();String format = new SimpleDateFormat("yyyy-MM-dd").format(time);return format;}public static void main(String[] args) {getYestDate();} }

第二步:定義我們的數(shù)據(jù)每日上傳目錄

定義我們的文件每日上傳目錄,并將我們的數(shù)據(jù)上傳到對應(yīng)的目錄下面去 hdfs dfs -mkdir -p /weblog/20180205/input hdfs dfs -put access.log.fensi /weblog/20180205/input

第三步:根據(jù)文件上傳目錄,改造MR程序

改造WebLogProcessor程序 String inputPath= "hdfs://node01:8020/weblog/"+DateUtil.getYestDate()+"/input"; String outputPath="hdfs://node01:8020/weblog/"+DateUtil.getYestDate()+"/weblogPreOut"; FileSystem fileSystem = FileSystem.get(new URI("hdfs://node01:8020"), conf); if (fileSystem.exists(new Path(outputPath))){fileSystem.delete(new Path(outputPath),true); } FileInputFormat.setInputPaths(job, new Path(inputPath)); FileOutputFormat.setOutputPath(job, new Path(outputPath));

改造ClickStreamPageViewString inputPath="hdfs://node01:8020/weblog/"+DateUtil.getYestDate()+"/weblogPreOut"; String outputPath="hdfs://node01: 8020/weblog/"+DateUtil.getYestDate()+"/pageViewOut"; FileSystem fileSystem = FileSystem.get(new URI("hdfs://node01: 8020"), conf); if (fileSystem.exists(new Path(outputPath))){fileSystem.delete(new Path(outputPath),true); } FileInputFormat.setInputPaths(job, new Path(inputPath)); FileOutputFormat.setOutputPath(job, new Path(outputPath));

改造ClickStreamVisitString inputPath = "hdfs://node01: 8020/weblog/"+ DateUtil.getYestDate() + "/pageViewOut"; String outPutPath="hdfs://node01: 8020/weblog/"+ DateUtil.getYestDate() + "/clickStreamVisit"; FileSystem fileSystem = FileSystem.get(new URI("hdfs://node01: 8020"),conf); if (fileSystem.exists(new Path(outPutPath))){fileSystem.delete(new Path(outPutPath),true); } FileInputFormat.setInputPaths(job, new Path(inputPath)); FileOutputFormat.setOutputPath(job, new Path(outPutPath));

第四步:將程序打成jar包

第五步:開發(fā)azkaban調(diào)度腳本

程序調(diào)度一共分為以下步驟: 第一步:第一個MR程序執(zhí)行 第二步:第二個MR程序執(zhí)行 第三步:第三個MR程序執(zhí)行 第四步:hive表數(shù)據(jù)加載 第五步:hive表數(shù)據(jù)分析 第六步:分析結(jié)果通過sqoop導(dǎo)出

第六步:定時執(zhí)行

定于每天晚上兩點鐘定時開始執(zhí)行任務(wù)

0 2 ? * *

七、 模塊開發(fā)----數(shù)據(jù)可視化

1. Echarts介紹

ECharts是一款由百度前端技術(shù)部開發(fā)的,基于Javascript的數(shù)據(jù)可視化圖表庫,提供直觀,生動,可交互,可個性化定制的數(shù)據(jù)可視化圖表。

提供大量常用的數(shù)據(jù)可視化圖表,底層基于ZRender(一個全新的輕量級canvas類庫),創(chuàng)建了坐標(biāo)系,圖例,提示,工具箱等基礎(chǔ)組件,并在此上構(gòu)建出折線圖(區(qū)域圖)、柱狀圖(條狀圖)、散點圖(氣泡圖)、餅圖(環(huán)形圖)、K線圖、地圖、力導(dǎo)向布局圖以及和弦圖,同時支持任意維度的堆積和多圖表混合展現(xiàn)。

2. Web程序工程結(jié)構(gòu)

本項目是個純粹的JavaEE項目,基于ssm的框架整合構(gòu)建。使用maven的tomcat插件啟動項目。

3. 感受Echarts—簡單入門


3.1. 下載Echarts


從官網(wǎng)下載界面選擇你需要的版本下載,根據(jù)開發(fā)者功能和體積上的需求,提供了不同打包的下載,如果在體積上沒有要求,可以直接下載完整版本。開發(fā)環(huán)境建議下載源代碼版本,包含了常見的錯誤提示和警告。


3.2. 頁面引入Echarts
ECharts 3 開始只需要像普通的 JavaScript 庫一樣用 script 標(biāo)簽引入即可。
?

<!DOCTYPE html> <html> <head><meta charset="utf-8"><!-- 引入 ECharts 文件 --><script src="echarts.min.js"></script> </head> </html>

3.3. 繪制一個簡單的圖表

在繪圖前我們需要為 ECharts 準(zhǔn)備一個具備高寬的 DOM 容器:

<body><!-- 為 ECharts 準(zhǔn)備一個具備大小(寬高)的 DOM --><div id="main" style="width: 600px;height:400px;"></div> </body>

然后就可以通過?echarts.init?方法初始化一個 echarts 實例并通過?setOption?方法生成一個簡單的柱狀圖,下面是完整代碼。

<!DOCTYPE html> <html> <head><meta charset="utf-8"><title>ECharts</title><!-- 引入 echarts.js --><script src="echarts.min.js"></script> </head> <body><!-- 為ECharts準(zhǔn)備一個具備大小(寬高)的Dom --><div id="main" style="width: 600px;height:400px;"></div><script type="text/javascript">// 基于準(zhǔn)備好的dom,初始化echarts實例var myChart = echarts.init(document.getElementById('main'));// 指定圖表的配置項和數(shù)據(jù)var option = {title: {text: 'ECharts 入門示例'},tooltip: {},legend: {data:['銷量']},xAxis: {data: ["襯衫","羊毛衫","雪紡衫","褲子","高跟鞋","襪子"]},yAxis: {},series: [{name: '銷量',type: 'bar',data: [5, 20, 36, 10, 10, 20]}]};// 使用剛指定的配置項和數(shù)據(jù)顯示圖表。myChart.setOption(option);</script> </body> </html>

不出意外的話你就可以看見如下的圖表:

三大框架環(huán)境搭建
第一步:創(chuàng)建數(shù)據(jù)庫并導(dǎo)入數(shù)據(jù)
?

/* SQLyog Ultimate v8.32 MySQL - 5.6.22-log : Database - web_log_view ********************************************************************* */ /*!40101 SET NAMES utf8 */;/*!40101 SET SQL_MODE=''*/;/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; /*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; CREATE DATABASE /*!32312 IF NOT EXISTS*/`web_log_view` /*!40100 DEFAULT CHARACTER SET utf8 */;USE `web_log_view`;/*Table structure for table `t_avgpv_num` */DROP TABLE IF EXISTS `t_avgpv_num`;CREATE TABLE `t_avgpv_num` (`id` int(11) DEFAULT NULL,`dateStr` varchar(255) DEFAULT NULL,`avgPvNum` decimal(6,2) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8;/*Data for the table `t_avgpv_num` */insert into `t_avgpv_num`(`id`,`dateStr`,`avgPvNum`) values (1,'20130919','13.40'),(2,'20130920','17.60'),(3,'20130921','15.20'),(4,'20130922','21.10'),(5,'20130923','16.90'),(6,'20130924','18.10'),(7,'20130925','18.60');/*Table structure for table `t_flow_num` */DROP TABLE IF EXISTS `t_flow_num`;CREATE TABLE `t_flow_num` (`id` int(11) DEFAULT NULL,`dateStr` varchar(255) DEFAULT NULL,`pVNum` int(11) DEFAULT NULL,`uVNum` int(11) DEFAULT NULL,`iPNum` int(11) DEFAULT NULL,`newUvNum` int(11) DEFAULT NULL,`visitNum` int(11) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8;/*Data for the table `t_flow_num` */insert into `t_flow_num`(`id`,`dateStr`,`pVNum`,`uVNum`,`iPNum`,`newUvNum`,`visitNum`) values (1,'20131001',4702,3096,2880,2506,3773),(2,'20131002',7528,4860,4435,4209,5937),(3,'20131003',7286,4741,4409,4026,5817),(4,'20131004',6653,5102,4900,2305,4659),(5,'20131005',5957,4943,4563,3134,3698),(6,'20131006',7978,6567,6063,4417,4560),(7,'20131007',6666,5555,4444,3333,3232);/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; /*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; /*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;

第二步:創(chuàng)建maven? web工程并導(dǎo)入jar包

<dependencies><!-- Spring --><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>4.2.4.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-beans</artifactId><version>4.2.4.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>4.2.4.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>4.2.4.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-aspects</artifactId><version>4.2.4.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jms</artifactId><version>4.2.4.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context-support</artifactId><version>4.2.4.RELEASE</version></dependency><!-- Mybatis --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.2.8</version></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>1.2.2</version></dependency><dependency><groupId>com.github.miemiedev</groupId><artifactId>mybatis-paginator</artifactId><version>1.2.15</version></dependency><!-- MySql --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.32</version></dependency><!-- 連接池 --><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.0.9</version></dependency><!-- JSP相關(guān) --><dependency><groupId>jstl</groupId><artifactId>jstl</artifactId><version>1.2</version></dependency><dependency><groupId>javax.servlet</groupId><artifactId>servlet-api</artifactId><version>2.5</version><scope>provided</scope></dependency><dependency><groupId>javax.servlet</groupId><artifactId>jsp-api</artifactId><version>2.0</version><scope>provided</scope></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.4.2</version></dependency></dependencies><build><finalName>${project.artifactId}</finalName><resources><resource><directory>src/main/java</directory><includes><include>**/*.properties</include><include>**/*.xml</include></includes><filtering>false</filtering></resource><resource><directory>src/main/resources</directory><includes><include>**/*.properties</include><include>**/*.xml</include></includes><filtering>false</filtering></resource></resources><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.2</version><configuration><source>1.7</source><target>1.7</target><encoding>UTF-8</encoding></configuration></plugin><!-- 配置Tomcat插件 --><plugin><groupId>org.apache.tomcat.maven</groupId><artifactId>tomcat7-maven-plugin</artifactId><version>2.2</version><configuration><path>/</path><port>8080</port></configuration></plugin></plugins></build>

第三步:配置SqlMapConfig.xml

<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration><settings><!-- 打印查詢語句 --><setting name="logImpl" value="STDOUT_LOGGING" /></settings> </configuration>

第四步:配置ApplicationContext.xml

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"xmlns:context="http://www.springframework.org/schema/context"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:aop="http://www.springframework.org/schema/aop"xmlns:tx="http://www.springframework.org/schema/tx"xmlns:p="http://www.springframework.org/schema/p"xmlns:c="http://www.springframework.org/schema/c"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd"><!-- 配置包掃描 --><context:component-scan base-package="cn.itcast.weblog.service"></context:component-scan><!-- 數(shù)據(jù)庫連接池 --><context:property-placeholder location="classpath:properties/jdbc.properties"></context:property-placeholder><bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"><property name="driverClassName" value="${jdbc.driver}"></property><property name="url" value="${jdbc.url}"></property><property name="username" value="${jdbc.username}"></property><property name="password" value="${jdbc.password}"></property></bean><!-- spring的事務(wù)管理--><bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource"></property></bean><!-- 注解的方式實現(xiàn)我們的事務(wù)管理 --><tx:annotation-driven transaction-manager="transactionManager"></tx:annotation-driven><!-- spring 與mybatis的整合 --><bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><property name="dataSource" ref="dataSource"></property><property name="configLocation" value="classpath:mybaits/SqlMapConfig.xml"></property><!--<property name="mapperLocations" value="classpath:mappers/*.xml"></property>--></bean><bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"><property name="basePackage" value="cn.itcast.weblog.mapper"></property></bean></beans>

第五步:配置springMVC.xml

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:mvc="http://www.springframework.org/schema/mvc"xmlns:context="http://www.springframework.org/schema/context"xmlns:task="http://www.springframework.org/schema/task"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsdhttp://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsdhttp://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-4.0.xsd"><!-- 配置包掃描 --><context:component-scan base-package="cn.itcast.weblog.controller"></context:component-scan><!-- 使用mvc的注解驅(qū)動開發(fā)--><mvc:annotation-driven/><bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/WEB-INF/jsp/"></property><property name="suffix" value=".jsp"></property></bean></beans>

第六步:配置web.xml

<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5"><display-name>crm</display-name><welcome-file-list><welcome-file>index.html</welcome-file><welcome-file>index.htm</welcome-file><welcome-file>index.jsp</welcome-file><welcome-file>default.html</welcome-file><welcome-file>default.htm</welcome-file><welcome-file>default.jsp</welcome-file><welcome-file>customer/list.action</welcome-file></welcome-file-list><!-- 配置contextLoadListener --><context-param><param-name>contextConfigLocation</param-name><param-value>classpath:spring/ApplicationContext.xml</param-value></context-param><!-- Bootstraps the root web application context before servlet initialization --><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><!-- 配置dispatcherServlet --><!-- The front controller of this Spring Web application, responsible for handling all application requests --><servlet><servlet-name>springDispatcherServlet</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:springMVC/springmvc.xml</param-value></init-param><load-on-startup>1</load-on-startup></servlet><!-- Map all requests to the DispatcherServlet for handling --><servlet-mapping><servlet-name>springDispatcherServlet</servlet-name><url-pattern>*.action</url-pattern></servlet-mapping><filter><filter-name>CharacterEncodingFilter</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><init-param><param-name>encoding</param-name><param-value>utf-8</param-value></init-param></filter><filter-mapping><filter-name>CharacterEncodingFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping></web-app>

第七步:拷貝我們準(zhǔn)備好的資源文件到項目中

第八步:配置IDEA使用tomcat插件訪問我們的項目

?

第九步:開發(fā)mapper層的xml以及接口

接口public interface TAvgpvNumMapper {List<TAvgpvNum> selectLastSeven(String s, String s1); }xml定義<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" > <mapper namespace="cn.itcast.weblog.mapper.TAvgpvNumMapper" ><select id="selectLastSeven" parameterType="string" resultType="cn.itcast.weblog.pojo.TAvgpvNum">select * from t_avgpv_numwhere dateStr &gt; #{0}and dateStr &lt; #{1}order by dateStr desclimit 7;</select><!-- mybaits特殊字符轉(zhuǎn)譯& &amp;< &lt;> &gt;" &quot;' &apos;小于等于 a<=b a &lt;= b a <![CDATA[<= ]]>b大于等于 a>=b a &gt;= b a <![CDATA[>= ]]>b不等于 a!=ba <![CDATA[ <> ]]>b a <![CDATA[!= ]]>b--></mapper>

第十步:開發(fā)service層

@Service @Transactional public class AvgPvServiceImpl implements AvgPvService {@Autowiredprivate TAvgpvNumMapper tAvgpvNumMapper;@Overridepublic String getAvgJson() {//查詢最近七天的所有數(shù)據(jù),指定起始日期和結(jié)束日期List<TAvgpvNum> tAvgpvNums = tAvgpvNumMapper.selectLastSeven("20130919","20130925");AvgToBean avgToBean = new AvgToBean();List<String> dateStrs = new ArrayList<String>();List<BigDecimal> datas = new ArrayList<BigDecimal>();for (TAvgpvNum tAvgpvNum : tAvgpvNums) {dateStrs.add(tAvgpvNum.getDatestr());datas.add(tAvgpvNum.getAvgpvnum());}avgToBean.setDates(dateStrs);avgToBean.setData(datas);String jsonString = JSONObject.toJSONString(avgToBean);return jsonString;} }

第十一步:開發(fā)controller層

@Controller public class IndexController {@Autowiredprivate AvgPvService avgPvService;@Autowiredprivate FlowService flowService;@RequestMapping("/index.action")public String skipToIndex(){return "index";}@RequestMapping("/avgPvNum.action")@ResponseBodypublic String getAvgPvJson(){String avgJson = avgPvService.getAvgJson();return avgJson;}}

?

總結(jié)

以上是生活随笔為你收集整理的网站流量日志数据分析系统(模块开发----数据仓库设计)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

97超碰伊人| 最新中文在线视频 | 五月天,com| 久久tv| 中文字幕免费高清在线 | 91精品国产91热久久久做人人 | 激情丁香月 | 欧美亚洲一级片 | 超级碰99 | www.午夜色.com| 四虎在线免费观看 | 亚欧洲精品视频在线观看 | 亚洲精品久久久久久中文传媒 | av免费片| 国产亚洲精品综合一区91 | 亚洲经典精品 | 一本一本久久a久久精品综合小说 | 中文字幕在线观看免费观看 | 天天干天天操天天射 | 久久免费视频5 | 国产区在线 | 久草精品在线 | 国产成人精品一区二区三区网站观看 | 国产日韩视频在线观看 | 四虎成人精品永久免费av | 五月天六月婷婷 | a天堂中文在线 | av在线com| www.在线观看视频 | 国产精品99久久久久久人免费 | 日韩在线二区 | 在线a亚洲视频播放在线观看 | 久久久久久97三级 | 麻豆影视在线播放 | 国产又黄又硬又爽 | av免费在线观看1 | 久久久精选 | 99视频在线精品国自产拍免费观看 | 欧美精品亚洲精品日韩精品 | 日韩成人高清在线 | 欧美国产不卡 | 视频二区在线 | 91成人免费电影 | 91视频在线免费 | 国产91精品久久久久久 | 精品久久在线 | 国产精品不卡在线观看 | 国产精品黄色影片导航在线观看 | 午夜三级大片 | 免费国产一区二区视频 | 不卡av在线免费观看 | 五月天六月婷婷 | 麻豆 91 在线 | www亚洲视频| 久久99精品久久久久久三级 | 色综合久久久久综合体 | 99在线视频免费观看 | 日本久久久久久久久 | 九色精品免费永久在线 | 精品一区二区视频 | 9色在线视频 | 人人射人人爽 | 97电影在线观看 | 欧美国产日韩一区二区三区 | 亚洲综合色视频在线观看 | 久久综合狠狠综合久久综合88 | 天天操夜夜做 | 色开心| 欧美色综合久久 | 在线高清av | 国产精品麻豆一区二区三区 | 夜夜躁狠狠躁日日躁视频黑人 | 奇米影音四色 | 欧美日韩久久 | 成人免费视频网站 | 国产精品99页 | 国产精品大全 | 99久久精品国产观看 | 国产精品午夜久久久久久99热 | 国产成人综合图片 | 91视频免费看网站 | 亚洲国产精品激情在线观看 | 91插插影库| 国产色婷婷精品综合在线手机播放 | 在线视频麻豆 | 久久成人毛片 | 91免费看黄色 | 日本久久久精品视频 | 男女视频国产 | 国产黄色在线看 | 国产成人一级 | 免费 在线 中文 日本 | 91 在线视频播放 | 青青草国产精品视频 | 午夜丰满寂寞少妇精品 | 久久涩视频 | 天天天色综合 | 免费在线观看成人av | 日韩电影中文 | 一级特黄aaa大片在线观看 | 永久精品视频 | 久久亚洲私人国产精品 | 国产中文字幕91 | 免费看久久久 | 国内精品视频久久 | 久久国产精品久久精品国产演员表 | 天天操天天干天天爱 | 一级片视频在线 | 日韩av电影免费在线观看 | 日韩精品一区二区在线视频 | 欧美一级黄大片 | 日韩精品免费在线观看 | 成人免费视频网址 | 玖玖在线观看视频 | 久草精品视频 | 男女激情免费网站 | 欧美日韩国产在线一区 | www成人精品 | 国产精品久久久久久久久久新婚 | 国产精品一区二区久久国产 | 天天天综合网 | 日韩精品免费在线观看 | 国产亚洲精品久久网站 | 国产免费黄视频在线观看 | av电影在线观看 | 美女网站在线观看 | 色综合天天 | 日韩视频一二三区 | 久久久香蕉视频 | 特级西西人体444是什么意思 | 日本成人黄色片 | 中文字幕av在线免费 | 在线观看av大片 | 射射色 | 亚洲精品字幕在线观看 | 国产精品久久一区二区三区不卡 | 日韩理论影院 | 国产福利小视频在线 | 久久中文字幕在线视频 | 久久九九国产视频 | 人人爽人人乐 | 超碰人人国产 | 99精品视频免费观看视频 | 色婷婷激情电影 | 韩国一区二区av | 国产一区精品在线观看 | 国产高清久久久 | 久久视频6 | 黄色国产大片 | 福利视频入口 | 日日干美女 | www操操操 | 欧美激情第一页xxx 午夜性福利 | 亚洲aaa毛片 | 亚洲欧美视屏 | 日日草夜夜操 | 国产小视频91| 亚洲少妇久久 | 欧美日韩高清不卡 | 能在线观看的日韩av | 久久综合中文字幕 | 久久久久久久久久久电影 | 就操操久久 | 久久伦理网 | 亚洲欧洲视频 | 色视频在线看 | 午夜12点 | 欧美精品一区二区三区四区在线 | 午夜视频免费在线观看 | www.久久视频 | 在线观看一二三区 | 99视频精品在线 | 久久精品国产成人精品 | 精品国产乱码久久久久 | 黄色在线观看污 | 亚欧日韩成人h片 | 亚洲91中文字幕无线码三区 | 激情网站网址 | 亚洲精品美女久久 | 91av中文| 国产福利专区 | 91网站观看| 日韩电影一区二区在线观看 | av福利在线看 | 日韩激情中文字幕 | 2019av在线视频 | 日韩激情网 | 最近更新好看的中文字幕 | 欧美日韩视频在线 | 黄色片网站av| 五月天中文在线 | 91在线视频一区 | 国产精品99久久久久 | 国产一二区视频 | 精品福利在线 | 久久美女高清视频 | 国产九九九视频 | 人人舔人人 | 日韩视频欧美视频 | 国产精品久久久久免费 | 欧美一区,二区 | 91成人在线观看喷潮 | 国产午夜三级一二三区 | 久草在线一免费新视频 | 92av视频 | www..com黄色片 | 久久精品91久久久久久再现 | 国产永久免费高清在线观看视频 | 操久久免费视频 | 亚洲精品视频免费看 | 中文字幕在线观看视频免费 | 国产一区二区在线观看免费 | 99精品99| 亚色视频在线观看 | 日本激情动作片免费看 | av中文字幕不卡 | 日韩欧美一区二区三区在线观看 | 亚洲 欧洲 国产 日本 综合 | 久久久黄色av| 97超碰中文字幕 | 国产精品久久久久久久久久久久冷 | 国产精品资源在线观看 | 久久免费看a级毛毛片 | www.xxx.性狂虐| 97超碰国产精品 | 久热免费 | 日韩视频在线观看视频 | 成人黄大片 | 男女啪啪网站 | 久久怡红院 | av视屏在线播放 | 久久综合给合久久狠狠色 | 中文字幕视频一区 | 97国产一区二区 | 一区二区三区免费在线播放 | 成年人视频在线免费观看 | 日日夜操 | 国产在线观看中文字幕 | 狠狠色狠狠色综合日日小说 | 亚洲最新视频在线 | 丰满少妇在线观看 | 国产精品电影一区二区 | 一本一本久久a久久精品综合妖精 | 国内久久| 欧美国产视频在线 | 久操中文字幕在线观看 | 日日干 天天干 | 精品女同一区二区三区在线观看 | 国产一区二区免费 | 国产午夜精品一区二区三区嫩草 | 久久久久在线视频 | 国产精品第二页 | 午夜在线免费视频 | 激情五月婷婷综合 | 91亚洲精品乱码久久久久久蜜桃 | 免费av网站在线看 | 91精品视频在线免费观看 | 国产99久久久国产精品 | 在线影视 一区 二区 三区 | 丁五月婷婷 | 99精彩视频在线观看免费 | 久久免费国产 | 精品人妖videos欧美人妖 | 日韩欧美99| 深爱激情av | 日韩在线精品一区 | 四虎欧美 | 欧美精品你懂的 | 视频一区二区国产 | 亚洲午夜大片 | 日韩一区精品 | 一区二区三区日韩在线观看 | 2018好看的中文在线观看 | 国产视频在线观看一区 | 亚洲资源在线 | 美女很黄免费网站 | 久久久久99精品成人片三人毛片 | 国产成人在线免费观看 | 日韩欧美视频在线观看免费 | 天天拍天天爽 | 欧美二区视频 | 高清免费在线视频 | 日韩伦理片一区二区三区 | 在线岛国av | 成片视频在线观看 | 免费观看成人av | 夜夜夜草 | av成人在线观看 | 成人一级在线观看 | 999久久国精品免费观看网站 | 国产精品18久久久久vr手机版特色 | 久草在线免费在线观看 | av在线网站观看 | 成人在线观看资源 | 日韩免费一级电影 | 福利在线看片 | 色橹橹欧美在线观看视频高清 | 成人福利av| 亚洲日韩精品欧美一区二区 | 国产一区二区三区高清播放 | 久久精品伊人 | 91精品蜜桃 | 一区二区免费不卡在线 | 国产精品一区二 | 久久久国产精品网站 | 久久私人影院 | 久久无码av一区二区三区电影网 | 日韩精品一区二区三区电影 | 国产精品一区二区三区99 | 国产精品美女久久久久久 | 亚洲精品网站 | av在线官网 | 中文免费观看 | 日韩精品欧美精品 | 久久人人爽人人人人片 | 97精品国产97久久久久久春色 | 精品久久久久久久久中文字幕 | 国内精品一区二区 | 国产中文在线观看 | 国产资源在线观看 | 免费亚洲片 | 日本高清xxxx | 91久久精品一区二区二区 | 中文字字幕在线 | 婷婷在线免费 | 欧美五月婷婷 | 欧美色图视频一区 | 欧美国产日韩一区 | 国产黄大片在线观看 | 日韩欧美国产成人 | 久久久久久亚洲精品 | 日日日日日 | 日韩不卡高清视频 | 丝袜制服综合网 | www.xxxx欧美| 91九色精品女同系列 | 国产婷婷视频在线 | 久久av中文字幕片 | 国产超碰在线 | 天天射狠狠干 | 国产亚洲精品久久 | 久久久综合九色合综国产精品 | 国产精品久久久久久久久久了 | 一区二区三区四区精品视频 | 国产精品99久久99久久久二8 | 国色天香第二季 | 激情五月激情综合网 | 亚洲精品在线资源 | 色激情五月 | 狠狠的干狠狠的操 | 91精品国产欧美一区二区成人 | 91网在线 | 最新av电影网址 | 九九视频精品在线 | 国产高清成人 | 精品久久久久久久久久岛国gif | 国产精品久久久久久久电影 | 亚洲免费视频在线观看 | 精品国产乱子伦一区二区 | 九九综合久久 | 99久久精品国产亚洲 | 69精品视频在线观看 | 天堂麻豆 | 精品成人网| 91免费高清视频 | 97成人精品视频在线观看 | 探花视频在线观看免费 | 日日精品 | 免费网站观看www在线观看 | 日韩精品久久一区二区 | 成人在线播放av | 成人av中文字幕在线观看 | 久久久久在线视频 | 999国内精品永久免费视频 | 色爽网站 | 欧美日韩18 | 1024久久 | 在线视频 一区二区 | 亚洲国产中文字幕 | 一级黄色在线免费观看 | 97电院网手机版 | 亚洲国产影院av久久久久 | 久久久免费少妇 | 天天综合天天综合 | 国产成人av电影在线 | 久久激情视频 | 日日夜夜噜 | 九九热国产 | 九九精品久久久 | 久久久九色精品国产一区二区三区 | 亚洲精品综合一区二区 | 免费a视频 | 91在线色 | 日本中文字幕视频 | 五月天中文字幕mv在线 | 亚洲精品国产精品99久久 | 国产一卡在线 | 天天色天天艹 | 日韩专区 在线 | 欧美日韩91 | 国产精品第十页 | 日韩欧美视频免费在线观看 | 欧洲精品码一区二区三区免费看 | 在线影院av| 在线激情av电影 | 亚洲视频第一页 | 欧美日韩综合在线 | 91在线看视频免费 | 亚洲国产wwwccc36天堂 | 天天干中文字幕 | 久草在线免费电影 | 在线观看免费视频你懂的 | 天天干天天干天天操 | 天天摸天天舔天天操 | 伊色综合久久之综合久久 | 国产精品视频专区 | 99精品视频在线观看 | 夜夜骑首页 | 亚洲欧洲精品一区二区精品久久久 | 激情六月婷婷久久 | 人人搞人人爽 | 五月天久久精品 | 国产精品嫩草影视久久久 | 成人在线播放免费观看 | 99精品国产一区二区三区麻豆 | 欧美午夜理伦三级在线观看 | 久久精品资源 | 91九色综合 | 福利视频精品 | 91中文字幕永久在线 | 成人黄色影片在线 | 黄色在线视频网址 | 四虎5151久久欧美毛片 | 国产一二区免费视频 | 午夜久久成人 | 天天搞夜夜骑 | 99欧美精品 | 少妇视频一区 | 综合网色 | 久久国产精品视频免费看 | 激情五月婷婷 | 最近中文字幕大全中文字幕免费 | 免费高清看电视网站 | 久久精品视频18 | 婷婷六月网| 性色av免费看 | 美女视频黄频大全免费 | 综合久久影院 | 99精品视频一区二区 | 狠狠狠色丁香婷婷综合久久五月 | 久久艹中文字幕 | 日本在线观看一区二区 | 狠狠操夜夜操 | 日韩av一区二区三区 | 国产精品久久99综合免费观看尤物 | 99色免费| 黄色的视频网站 | 九九色在线观看 | 黄色片软件网站 | 欧美日韩亚洲在线观看 | 欧美老少交 | 欧美伦理一区二区三区 | av一本久道久久波多野结衣 | 国产经典av | 麻豆91在线播放 | 日日夜夜骑 | 国产精品福利午夜在线观看 | 精品国产欧美一区二区 | 2019av在线视频| 亚洲综合网站在线观看 | 中文字幕一区二区三区四区视频 | 免费视频国产 | 一级淫片在线观看 | 樱空桃av | 激情小说 五月 | 成人资源在线播放 | 蜜臀av性久久久久蜜臀aⅴ流畅 | 亚洲国产精品500在线观看 | 精品一区二区在线免费观看 | 国产中文在线观看 | 国产精品毛片网 | 国产精品一区免费在线观看 | 国产精品99久久99久久久二8 | 久久热亚洲 | 日韩欧美电影网 | 日韩在线免费播放 | 久久国产精品免费一区 | 国产精品2020| 午夜色大片在线观看 | 国产精品美女视频网站 | 在线国产激情视频 | 日韩精品在线播放 | 欧美一二三视频 | 欧美日本不卡 | 超碰在线免费福利 | 精品国产乱码久久久久久三级人 | 91探花系列在线播放 | 成人app在线免费观看 | 国产视频精品久久 | 四虎影视精品成人 | 亚洲免费观看在线视频 | 婷婷激情五月综合 | 在线观看黄av | www.午夜色.com | 天天爽天天爽 | 亚洲最新视频在线 | 国产永久免费高清在线观看视频 | 九九久久影视 | 久久久黄视频 | 午夜视频在线观看欧美 | 麻豆小视频在线观看 | 中文字幕免费成人 | 国产一区二区网址 | 91人网站| 欧美大jb | 99精品视频精品精品视频 | 国产白浆在线观看 | 色av婷婷| 国产中文字幕在线观看 | 国产不卡精品 | 欧美日产一区 | 特级西西444www大胆高清无视频 | 中文字幕在线观看视频一区 | 日韩毛片在线播放 | 国产成人专区 | 三级黄色理论片 | 91福利视频免费观看 | 久久伦理电影 | 国产精品久久久久久久久搜平片 | 91精品国产高清自在线观看 | 久久久久久久免费 | 久久精品专区 | 亚洲一级黄色片 | 欧美极度另类性三渗透 | 国产在线a视频 | av资源免费在线观看 | av电影一区二区 | 99久久99视频 | 97成人在线视频 | 日韩城人在线 | 91精品国产电影 | 日韩精品视频网站 | 国产又粗又长的视频 | 91成人免费观看视频 | 中文字幕在线观看视频一区二区三区 | 97国产在线 | 成+人+色综合 | 91精品天码美女少妇 | 国产视频在线观看免费 | 日韩av一区二区三区四区 | 奇米网444 | 久久精品国产一区二区三区 | 视频直播国产精品 | 欧美国产日韩在线观看 | 国产资源在线视频 | 日日操网| 日本激情视频中文字幕 | 午夜视频在线瓜伦 | 免费看的av片 | 99精品视频播放 | 麻豆影音先锋 | 高清日韩一区二区 | 亚洲综合婷婷 | 成人在线播放免费观看 | 免费看片日韩 | wwwwww黄| 欧美精品一二 | 天天爱天天操 | 日韩精品无码一区二区三区 | 国产精品男女视频 | 夜色成人av | 国产精品乱码一区二三区 | 国产精品一区二区三区在线看 | 国产精品视频久久 | 欧美一级片在线免费观看 | 婷婷丁香国产 | 91视频下载| 天天色天天操天天爽 | 亚洲一级黄色片 | 免费视频久久 | 欧美一区二区三区在线观看 | 成人午夜精品久久久久久久3d | 韩国av一区二区三区在线观看 | 国产黄色片免费 | 久久伊人八月婷婷综合激情 | 麻豆视频在线观看免费 | 国产成人一区二区三区在线观看 | 国产做爰视频 | 日韩69视频 | 超碰成人免费电影 | 精品亚洲免费 | 少妇精品久久久一区二区免费 | 在线电影中文字幕 | 欧美人zozo | 国产特黄色片 | 精品国产激情 | 免费观看一区 | www91在线观看 | 91av欧美 | 国产视频久久久久 | 成人免费av电影 | 精品国产伦一区二区三区观看体验 | 亚洲国产三级在线 | 国产日本亚洲 | 免费看久久 | 天天摸天天操天天爽 | 亚洲理论电影 | 午夜电影久久久 | 九九免费在线观看视频 | 亚洲国产中文在线观看 | 99热精品国产一区二区在线观看 | 九九在线视频 | 亚洲精品视频在线观看免费 | 国产在线中文 | 午夜国产在线观看 | 久久激情日本aⅴ | 欧美国产精品一区二区 | 国产精品99蜜臀久久不卡二区 | 久草网在线 | 天天操比 | 中文字幕在线观看亚洲 | 伊人狠狠色 | 六月激情 | 色资源中文字幕 | 在线看毛片网站 | 91精品资源 | 91天堂素人约啪 | 国产又粗又猛又色又黄网站 | 91免费高清观看 | 成年人免费av | 婷婷开心久久网 | 日韩,精品电影 | 在线视频区 | 国产在线精品区 | 日本最新一区二区三区 | 国产亚洲在线 | 日本在线观看中文字幕 | 91综合久久一区二区 | 成人网看片 | 波多野结衣一区二区 | 日韩影片在线观看 | 波多野结衣久久资源 | 亚洲国产欧美在线人成大黄瓜 | 婷婷五综合 | 在线免费高清视频 | 国产又粗又猛又色又黄网站 | 国产高清第一页 | 天天爱天天射 | 色视频网站免费观看 | 欧美看片 | 欧美精品一区二区三区四区在线 | 91天堂在线观看 | 99久免费精品视频在线观看 | 日韩中文在线播放 | 亚洲五月综合 | 国产五月色婷婷六月丁香视频 | 国产精品毛片久久久久久久久久99999999 | av理论电影 | 在线免费观看视频一区二区三区 | 91精品在线麻豆 | 奇米先锋| 亚洲综合小说电影qvod | 成人免费视频视频在线观看 免费 | 97电影院网| 波多野结衣电影一区 | 婷婷www | 日本中文字幕网站 | 欧美在线18| 成人黄色片免费看 | 黄色免费观看 | 欧美精品一区二区性色 | 看黄色91 | 久久视频精品在线观看 | 亚洲精品综合在线观看 | .国产精品成人自产拍在线观看6 | 日本一区二区不卡高清 | 久久理论电影 | 国产精品永久免费视频 | 在线精品视频免费观看 | 亚洲免费不卡 | 婷婷激情影院 | 亚洲成人精品av | 国产精品亚洲成人 | 97免费视频在线播放 | 日本高清中文字幕有码在线 | 日韩欧美在线观看一区二区三区 | 欧美天堂久久 | 久久国产亚洲精品 | 成人一级电影在线观看 | 国产精久久久 | 麻豆视频大全 | 国产精品成人久久久 | 欧美性色黄大片在线观看 | 一本一本久久a久久精品牛牛影视 | 精品国产一区二区三区久久影院 | 精品99999 | 99久久精品免费看 | 狠狠狠色 | av免费看网站 | 国产精品免费高清 | 国产精品1区 | 97国产情侣爱久久免费观看 | 亚洲女人av| 日韩在线视频观看 | 国产精品自产拍在线观看 | 日韩成年视频 | 婷婷亚洲五月色综合 | 91国内产香蕉| 天天操夜 | 国产精品久久久久av | 国产一区二区高清视频 | 99视频99| 成人综合日日夜夜 | 国产精品99久久久久久人免费 | 国产在线中文字幕 | 最近中文字幕免费av | 天天操天天干天天操天天干 | 国产色区 | 国产一级片一区二区三区 | 视频国产一区二区三区 | 夜添久久精品亚洲国产精品 | 丝袜+亚洲+另类+欧美+变态 | 四虎影视成人永久免费观看亚洲欧美 | 免费在线观看国产黄 | 美女在线免费视频 | 免费一级片视频 | 久久99国产综合精品免费 | 99精品国产一区二区三区麻豆 | 奇人奇案qvod | 在线综合 亚洲 欧美在线视频 | 亚洲va韩国va欧美va精四季 | 日日躁你夜夜躁你av蜜 | 麻豆视频免费在线观看 | 日韩xxxx视频 | 成人在线一区二区三区 | 天堂va在线观看 | 亚洲一区欧美激情 | 国产午夜在线观看 | 色就是色综合 | 97干com| 国产成人福利在线 | 国产精品一区二区久久精品爱微奶 | 日韩欧美在线观看 | 精品国产一区二区三区男人吃奶 | 在线91网 | 国产91九色蝌蚪 | 亚洲国产欧美一区二区三区丁香婷 | 亚洲国产中文字幕在线观看 | 欧美日韩高清在线一区 | 免费看av片网站 | www.成人精品 | 男女男视频 | 波多野结衣一区二区三区中文字幕 | 久久久久久久久久久久久久电影 | 日韩伦理片hd | 九九视频在线观看视频6 | 久久国内精品视频 | 三级黄在线 | 欧美做受xxx | 美州a亚洲一视本频v色道 | 国产精品久久久一区二区 | 国产成人免费高清 | 大片网站久久 | 天天色宗合 | 成人av在线网 | 亚洲va欧美va人人爽春色影视 | 久久久一本精品99久久精品 | 国产精品丝袜在线 | 天天射天天射 | 国产视| 久草视频资源 | 波多野结衣资源 | a久久久久 | 四虎国产精品免费 | 亚洲污视频 | 天天爱天天干天天爽 | 久久精品99久久久久久 | 亚州av免费 | 久久精品精品电影网 | 欧美少妇xxx | www.国产高清 | 成人高清av在线 | 一级久久精品 | 国产一区在线免费观看 | 99免费精品 | 99高清视频有精品视频 | 一区二区三区免费 | 久久手机免费观看 | 午夜影视一区 | 日本黄色免费看 | 亚洲精品美女久久久久网站 | 九九热在线免费观看 | 免费视频在线观看网站 | 国产一区二区三区免费观看视频 | av久久久 | 蜜臀av性久久久久蜜臀aⅴ流畅 | 97av.com| 国产精品国产三级国产aⅴ9色 | 97超碰人| 久久涩涩网站 | 久久久久亚洲精品国产 | 女人18毛片a级毛片一区二区 | 成人97视频一区二区 | 狠狠激情中文字幕 | 极品美女被弄高潮视频网站 | 五月激情综合婷婷 | 免费成人看片 | 在线视频欧美精品 | 日韩a级黄色 | 久久精品久久精品久久精品 | 国产一区在线不卡 | 免费大片av| 国产精品区二区三区日本 | 日韩在线无 | 一级性视频 | 一级片视频在线 | 日本中文字幕在线观看 | 波多野结衣小视频 | a在线播放 | 天天夜夜亚洲 | 亚洲精品中文字幕在线 | 天天干天天草 | 久久久www免费电影网 | 日韩免费在线网站 | 青青河边草观看完整版高清 | www日韩欧美 | 久草精品免费 | 亚洲国产美女精品久久久久∴ | 激情综合网五月 | 免费亚洲电影 | 国产精品美 | 91片在线观看 | 狠狠色丁香婷婷综合久小说久 | 亚州免费视频 | 毛片区 | 国产成人777777 | 久久成人黄色 | a级国产乱理伦片在线观看 亚洲3级 | 亚洲欧美乱综合图片区小说区 | 奇米7777狠狠狠琪琪视频 | 最新91在线视频 | 911免费视频 | 久久综合影音 | 狠狠躁夜夜躁人人爽超碰97香蕉 | 五月视频| 亚洲免费在线播放视频 | 高清在线一区 | 久久久久久国产精品亚洲78 | 人人舔人人爽 | 97天天综合网 | 在线观看色网 | 九月婷婷色 | 久久精品视频在线看 | 久久久久久国产精品 | 99视频99| 成人久久18免费网站图片 | 一区二区精品在线观看 | 亚洲无吗视频在线 | 国产精品成人免费精品自在线观看 | 久久免费a | 鲁一鲁影院 | 午夜在线资源 | 日韩精品高清不卡 | 国产网站色 | 一区二区av | 黄色av一区二区三区 | 国产一级精品在线观看 | 中文字幕免费高清在线 | 国产精品视频全国免费观看 | 亚洲精品综合一二三区在线观看 | 日本在线观看中文字幕 | 国色综合 | 日韩精品免费一线在线观看 | 亚洲在线看 | 亚洲视频一级 | 婷婷九月激情 | 精品视频123区在线观看 | 91看片淫黄大片在线播放 | 欧美激情在线看 | 国产精品12345| 欧美巨乳网 | 黄色午夜网站 | 人人舔人人插 | 日韩免费视频观看 | 中文字幕乱视频 | 精品国产精品一区二区夜夜嗨 | 亚洲欧美日韩一二三区 | 色婷婷国产精品一区在线观看 | 成人毛片100免费观看 | 超碰免费av | 亚洲综合成人婷婷小说 | 亚洲一区欧美精品 | 国产精品久久久久久久久久久久久 | 精品国产一区二区三区av性色 | 天天天操操操 | 久久免费美女视频 | 99综合电影在线视频 | 亚洲国产一区在线观看 | 麻豆91在线观看 | 国内99视频 | 在线观看久 | 91亚洲成人 | 中文字幕第一页在线视频 | 麻豆精品视频在线 | 久久久免费播放 | 丝袜美腿在线播放 | 波多野结衣在线观看一区 | 亚洲 综合 国产 精品 | 人人网av| 三级黄色在线观看 | 亚洲黄色免费观看 | 大胆欧美gogo免费视频一二区 | 中文字幕网址 | 久久国产精品区 | 欧美黑人xxxx猛性大交 | 久久网站最新地址 | 狠狠干网 | 91久色蝌蚪| 日韩高清一区 | 午夜在线国产 | 国产精品精品久久久 | 久久久久久久网 | 九九九九九精品 | 69久久99精品久久久久婷婷 | 久久99久久99精品免视看婷婷 | 四虎免费在线观看视频 | 免费日韩 精品中文字幕视频在线 | 精品毛片久久久久久 | 青青河边草免费直播 | 依人成人综合网 | 81精品国产乱码久久久久久 | www.久久久精品 | 日韩在线视频一区 | 激情网婷婷 | 国产精品2019 | 久久天天躁夜夜躁狠狠躁2022 | 成年一级片 | 精品九九九九 | 500部大龄熟乱视频使用方法 | 亚洲黄色免费电影 | 久久中文网 | 99视频精品免费观看, | 欧美孕妇视频 | 91精品啪在线观看国产 | 婷婷综合视频 | 久久久国产精品视频 | 久久99精品国产一区二区三区 | 91丨porny丨九色| 日韩在线电影一区 | 久久久久www | 国产成人专区 | 亚洲aⅴ在线观看 | 亚洲电影一级黄 | 免费成人av| 五月婷亚洲 | 中文字幕文字幕一区二区 | av成人在线电影 | www.com.日本一级 | 亚洲精品一区二区18漫画 | 欧美激情视频一区二区三区免费 | 国产五月 | 国产va饥渴难耐女保洁员在线观看 | 久久视频6| 日韩高清一二区 | 在线免费国产 | 91av在线精品| 国产精品一区二区久久精品爱涩 | 国产丝袜美腿在线 | 97超碰在线人人 | 国产精品短视频 | 欧美另类xxx | 日日摸日日添夜夜爽97 | 亚洲国产精品推荐 | 99在线高清视频在线播放 | 欧美成人xxxxx| 久久人视频 | 天天干.com | 国产在线色站 | 免费看国产黄色 | av中文电影 | 99热这里精品 | 国产一级片免费播放 | 激情婷婷在线 | 国产精品久久久久9999吃药 | 狠狠狠色丁香婷婷综合久久五月 | 免费看的黄色录像 | 麻豆传媒视频在线 | 欧美久久久影院 | 丁香婷婷深情五月亚洲 | 欧美性极品xxxx做受 | 97超碰站 | 超碰在线cao | 一区二区在线电影 | www.伊人网.com | 久久 精品一区 | 国产一区二区久久久久 | 国产亚洲精品免费 | 久久国产系列 |