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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

数据仓库之电商数仓-- 3.4、电商数据仓库系统(ADS层)

發(fā)布時(shí)間:2025/3/17 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据仓库之电商数仓-- 3.4、电商数据仓库系统(ADS层) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

目錄

  • 九、數(shù)倉搭建-ADS層
    • 9.1 建表說明
    • 9.2 訪客主題
      • 9.2.1 訪客統(tǒng)計(jì)
      • 9.2.2 路徑分析
    • 9.3 用戶主題
      • 9.3.1 用戶統(tǒng)計(jì)
      • 9.3.2 用戶變動(dòng)統(tǒng)計(jì)
      • 9.3.3 用戶行為漏斗分析
      • 9.3.4 用戶留存率
    • 9.4 商品主題
      • 9.4.1 商品統(tǒng)計(jì)
      • 9.4.2 品牌復(fù)購率
    • 9.5 訂單主題
      • 9.5.1 訂單統(tǒng)計(jì)
      • 9.5.2 各地區(qū)訂單統(tǒng)計(jì)
    • 9.6 優(yōu)惠券主題
      • 9.6.1 優(yōu)惠券統(tǒng)計(jì)
    • 9.7 活動(dòng)主題
      • 9.7.1 活動(dòng)統(tǒng)計(jì)
    • 9.8 ADS層業(yè)務(wù)數(shù)據(jù)導(dǎo)入腳本
  • 第10章 全流程調(diào)度
    • 10.1 Azkaban部署
    • 10.2 創(chuàng)建MySQL數(shù)據(jù)庫和表
    • 10.3 Sqoop導(dǎo)出腳本
    • 10.4 全調(diào)度流程
      • 10.4.1 數(shù)據(jù)準(zhǔn)備
      • 10.4.2 編寫Azkaban工作流程配置文件

-----------------------------------------------------分隔符-----------------------------------------------------
數(shù)據(jù)倉庫之電商數(shù)倉-- 1、用戶行為數(shù)據(jù)采集==>
數(shù)據(jù)倉庫之電商數(shù)倉-- 2、業(yè)務(wù)數(shù)據(jù)采集平臺(tái)==>
數(shù)據(jù)倉庫之電商數(shù)倉-- 3.1、電商數(shù)據(jù)倉庫系統(tǒng)(DIM層、ODS層、DWD層)==>
數(shù)據(jù)倉庫之電商數(shù)倉-- 3.2、電商數(shù)據(jù)倉庫系統(tǒng)(DWS層)==>
數(shù)據(jù)倉庫之電商數(shù)倉-- 3.3、電商數(shù)據(jù)倉庫系統(tǒng)(DWT層)==>
數(shù)據(jù)倉庫之電商數(shù)倉-- 3.4、電商數(shù)據(jù)倉庫系統(tǒng)(ADS層)==>
數(shù)據(jù)倉庫之電商數(shù)倉-- 4、可視化報(bào)表Superset==>
數(shù)據(jù)倉庫之電商數(shù)倉-- 5、即席查詢Kylin==>

九、數(shù)倉搭建-ADS層

9.1 建表說明

ADS層不涉及建模,建表根據(jù)具體需求而定。

9.2 訪客主題

9.2.1 訪客統(tǒng)計(jì)

  • 建表語句
  • DROP TABLE IF EXISTS ads_visit_stats; CREATE EXTERNAL TABLE ads_visit_stats (`dt` STRING COMMENT '統(tǒng)計(jì)日期',`is_new` STRING COMMENT '新老標(biāo)識(shí),1:新,0:老',`recent_days` BIGINT COMMENT '最近天數(shù),1:最近1天,7:最近7天,30:最近30天',`channel` STRING COMMENT '渠道',`uv_count` BIGINT COMMENT '日活(訪問人數(shù))',`duration_sec` BIGINT COMMENT '頁面停留總時(shí)長',`avg_duration_sec` BIGINT COMMENT '一次會(huì)話,頁面停留平均時(shí)長,單位為描述',`page_count` BIGINT COMMENT '頁面總瀏覽數(shù)',`avg_page_count` BIGINT COMMENT '一次會(huì)話,頁面平均瀏覽數(shù)',`sv_count` BIGINT COMMENT '會(huì)話次數(shù)',`bounce_count` BIGINT COMMENT '跳出數(shù)',`bounce_rate` DECIMAL(16,2) COMMENT '跳出率' ) COMMENT '訪客統(tǒng)計(jì)' ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LOCATION '/warehouse/gmall/ads/ads_visit_stats/';
  • 數(shù)據(jù)裝載
    思路分析:該需求的關(guān)鍵點(diǎn)為會(huì)話的劃分,總體實(shí)現(xiàn)思路可分為以下幾步:
    第一步:對(duì)所有頁面訪問記錄進(jìn)行會(huì)話的劃分。
    第二步:統(tǒng)計(jì)每個(gè)會(huì)話的瀏覽時(shí)長和瀏覽頁面數(shù)。
    第三步:統(tǒng)計(jì)上述各指標(biāo)。
  • insert overwrite table ads_visit_stats select * from ads_visit_stats union select'2020-06-14' dt,is_new,recent_days,channel,count(distinct(mid_id)) uv_count,cast(sum(duration)/1000 as bigint) duration_sec,cast(avg(duration)/1000 as bigint) avg_duration_sec,sum(page_count) page_count,cast(avg(page_count) as bigint) avg_page_count,count(*) sv_count,sum(if(page_count=1,1,0)) bounce_count,cast(sum(if(page_count=1,1,0))/count(*)*100 as decimal(16,2)) bounce_rate from (selectsession_id,mid_id,is_new,recent_days,channel,count(*) page_count,sum(during_time) durationfrom(selectmid_id,channel,recent_days,is_new,last_page_id,page_id,during_time,concat(mid_id,'-',last_value(if(last_page_id is null,ts,null),true) over (partition by recent_days,mid_id order by ts)) session_idfrom(selectmid_id,channel,last_page_id,page_id,during_time,ts,recent_days,if(visit_date_first>=date_add('2020-06-14',-recent_days+1),'1','0') is_newfrom(selectt1.mid_id,t1.channel,t1.last_page_id,t1.page_id,t1.during_time,t1.dt,t1.ts,t2.visit_date_firstfrom(selectmid_id,channel,last_page_id,page_id,during_time,dt,tsfrom dwd_page_logwhere dt>=date_add('2020-06-14',-30))t1left join(selectmid_id,visit_date_firstfrom dwt_visitor_topicwhere dt='2020-06-14')t2on t1.mid_id=t2.mid_id)t3 lateral view explode(Array(1,7,30)) tmp as recent_dayswhere dt>=date_add('2020-06-14',-recent_days+1))t4)t5group by session_id,mid_id,is_new,recent_days,channel )t6 group by is_new,recent_days,channel;

    9.2.2 路徑分析

    用戶路徑分析,顧名思義,就是指用戶在APP或網(wǎng)站中的訪問路徑。為了衡量網(wǎng)站優(yōu)化的效果或營銷推廣的效果,以及了解用戶行為偏好,時(shí)常要對(duì)訪問路徑進(jìn)行分析。
    用戶訪問路徑的可視化通常使用桑基圖。如下圖所示,該圖可真實(shí)還原用戶的訪問路徑,包括頁面跳轉(zhuǎn)和頁面訪問次序。
    桑基圖需要我們提供每種頁面跳轉(zhuǎn)的次數(shù),每個(gè)跳轉(zhuǎn)由source/target表示,source指跳轉(zhuǎn)起始頁面,target表示跳轉(zhuǎn)終到頁面。

  • 建表語句
  • DROP TABLE IF EXISTS ads_page_path; CREATE EXTERNAL TABLE ads_page_path (`dt` STRING COMMENT '統(tǒng)計(jì)日期',`recent_days` BIGINT COMMENT '最近天數(shù),1:最近1天,7:最近7天,30:最近30天',`source` STRING COMMENT '跳轉(zhuǎn)起始頁面ID',`target` STRING COMMENT '跳轉(zhuǎn)終到頁面ID',`path_count` BIGINT COMMENT '跳轉(zhuǎn)次數(shù)' ) COMMENT '頁面瀏覽路徑' ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LOCATION '/warehouse/gmall/ads/ads_page_path/';
  • 數(shù)據(jù)裝載
  • ??:
    思路分析:該需求要統(tǒng)計(jì)的就是每種跳轉(zhuǎn)的次數(shù),故理論上對(duì)source/target進(jìn)行分組count()即可。統(tǒng)計(jì)時(shí)需注意以下兩點(diǎn):
    1). 桑基圖的source不允許為空,但target可為空。
    2). 桑基圖所展示的流程不允許存在環(huán)。

    insert overwrite table ads_page_path select * from ads_page_path union select'2020-06-14',recent_days,source,target,count(*) from (selectrecent_days,concat('step-',step,':',source) source,concat('step-',step+1,':',target) targetfrom(selectrecent_days,page_id source,lead(page_id,1,null) over (partition by recent_days,session_id order by ts) target,row_number() over (partition by recent_days,session_id order by ts) stepfrom(selectrecent_days,last_page_id,page_id,ts,concat(mid_id,'-',last_value(if(last_page_id is null,ts,null),true) over (partition by mid_id,recent_days order by ts)) session_idfrom dwd_page_log lateral view explode(Array(1,7,30)) tmp as recent_dayswhere dt>=date_add('2020-06-14',-30)and dt>=date_add('2020-06-14',-recent_days+1))t2)t3 )t4 group by recent_days,source,target;

    9.3 用戶主題

    9.3.1 用戶統(tǒng)計(jì)

    該需求為用戶綜合統(tǒng)計(jì),其中包含若干指標(biāo),以下為對(duì)每個(gè)指標(biāo)的解釋說明。

  • 建表語句
  • DROP TABLE IF EXISTS ads_user_total; CREATE EXTERNAL TABLE `ads_user_total` (`dt` STRING COMMENT '統(tǒng)計(jì)日期',`recent_days` BIGINT COMMENT '最近天數(shù),0:累積值,1:最近1天,7:最近7天,30:最近30天',`new_user_count` BIGINT COMMENT '新注冊(cè)用戶數(shù)',`new_order_user_count` BIGINT COMMENT '新增下單用戶數(shù)',`order_final_amount` DECIMAL(16,2) COMMENT '下單總金額',`order_user_count` BIGINT COMMENT '下單用戶數(shù)',`no_order_user_count` BIGINT COMMENT '未下單用戶數(shù)(具體指活躍用戶中未下單用戶)' ) COMMENT '用戶統(tǒng)計(jì)' ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LOCATION '/warehouse/gmall/ads/ads_user_total/';
  • 數(shù)據(jù)裝載
  • insert overwrite table ads_user_total select * from ads_user_total union select'2020-06-14',recent_days,sum(if(login_date_first>=recent_days_ago,1,0)) new_user_count,sum(if(order_date_first>=recent_days_ago,1,0)) new_order_user_count,sum(order_final_amount) order_final_amount,sum(if(order_final_amount>0,1,0)) order_user_count,sum(if(login_date_last>=recent_days_ago and order_final_amount=0,1,0)) no_order_user_count from (selectrecent_days,user_id,login_date_first,login_date_last,order_date_first,case when recent_days=0 then order_final_amountwhen recent_days=1 then order_last_1d_final_amountwhen recent_days=7 then order_last_7d_final_amountwhen recent_days=30 then order_last_30d_final_amountend order_final_amount,if(recent_days=0,'1970-01-01',date_add('2020-06-14',-recent_days+1)) recent_days_agofrom dwt_user_topic lateral view explode(Array(0,1,7,30)) tmp as recent_dayswhere dt='2020-06-14' )t1 group by recent_days;

    9.3.2 用戶變動(dòng)統(tǒng)計(jì)

    該需求包括兩個(gè)指標(biāo),分別為流失用戶數(shù)和回流用戶數(shù),以下為對(duì)兩個(gè)指標(biāo)的解釋說明。

  • 建表語句
  • DROP TABLE IF EXISTS ads_user_change; CREATE EXTERNAL TABLE `ads_user_change` (`dt` STRING COMMENT '統(tǒng)計(jì)日期',`user_churn_count` BIGINT COMMENT '流失用戶數(shù)',`user_back_count` BIGINT COMMENT '回流用戶數(shù)' ) COMMENT '用戶變動(dòng)統(tǒng)計(jì)' ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LOCATION '/warehouse/gmall/ads/ads_user_change/';
  • 數(shù)據(jù)裝載
  • 思路分析:
    流失用戶:末次活躍時(shí)間為7日前的用戶即為流失用戶。
    回流用戶:末次活躍時(shí)間為今日,上次活躍時(shí)間在8日前的用戶即為回流用戶。

    insert overwrite table ads_user_change select * from ads_user_change union selectchurn.dt,user_churn_count,user_back_count from (select'2020-06-14' dt,count(*) user_churn_countfrom dwt_user_topicwhere dt='2020-06-14'and login_date_last=date_add('2020-06-14',-7) )churn join (select'2020-06-14' dt,count(*) user_back_countfrom(selectuser_id,login_date_lastfrom dwt_user_topicwhere dt='2020-06-14'and login_date_last='2020-06-14')t1join(selectuser_id,login_date_last login_date_previousfrom dwt_user_topicwhere dt=date_add('2020-06-14',-1))t2on t1.user_id=t2.user_idwhere datediff(login_date_last,login_date_previous)>=8 )back on churn.dt=back.dt;

    9.3.3 用戶行為漏斗分析

    漏斗分析是一個(gè)數(shù)據(jù)分析模型,它能夠科學(xué)反映一個(gè)業(yè)務(wù)過程從起點(diǎn)到終點(diǎn)各階段用戶轉(zhuǎn)化情況。由于其能將各階段環(huán)節(jié)都展示出來,故哪個(gè)階段存在問題,就能一目了然。

    該需求要求統(tǒng)計(jì)一個(gè)完整的購物流程各個(gè)階段的人數(shù)。

  • 建表語句
  • DROP TABLE IF EXISTS ads_user_action; CREATE EXTERNAL TABLE `ads_user_action` (`dt` STRING COMMENT '統(tǒng)計(jì)日期',`recent_days` BIGINT COMMENT '最近天數(shù),1:最近1天,7:最近7天,30:最近30天',`home_count` BIGINT COMMENT '瀏覽首頁人數(shù)',`good_detail_count` BIGINT COMMENT '瀏覽商品詳情頁人數(shù)',`cart_count` BIGINT COMMENT '加入購物車人數(shù)',`order_count` BIGINT COMMENT '下單人數(shù)',`payment_count` BIGINT COMMENT '支付人數(shù)' ) COMMENT '漏斗分析' ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LOCATION '/warehouse/gmall/ads/ads_user_action/';
  • 數(shù)據(jù)裝載
  • insert overwrite table ads_user_action select * from ads_user_action union select'2020-06-14',cop.recent_days,home_count,good_detail_count,cart_count,order_count,payment_count from (selectrecent_days,sum(if(array_contains(pages,'home'),1,0)) home_count,sum(if(array_contains(pages,'good_detail'),1,0)) good_detail_countfrom(selectrecent_days,mid_id,collect_set(page_id) pagesfrom dwd_page_log lateral view explode(array(1,7,30)) tmp as recent_dayswhere dt>=date_add('2020-06-14',-recent_days+1)and page_id in ('home','good_detail')group by recent_days,mid_id)t1group by recent_days )page join (selectrecent_days,sum(if(cart_count>0,1,0)) cart_count,sum(if(order_count>0,1,0)) order_count,sum(if(payment_count>0,1,0)) payment_countfrom(selectrecent_days,casewhen recent_days=1 then cart_last_1d_countwhen recent_days=7 then cart_last_7d_countwhen recent_days=30 then cart_last_30d_countend cart_count,casewhen recent_days=1 then order_last_1d_countwhen recent_days=7 then order_last_7d_countwhen recent_days=30 then order_last_30d_countend order_count,casewhen recent_days=1 then payment_last_1d_countwhen recent_days=7 then payment_last_7d_countwhen recent_days=30 then payment_last_30d_countend payment_countfrom dwt_user_topic lateral view explode(array(1,7,30)) tmp as recent_dayswhere dt='2020-06-14')t1group by recent_days )cop on page.recent_days=cop.recent_days

    9.3.4 用戶留存率

    留存分析一般包含新增留存和活躍留存分析。
    新增留存分析是分析某天的新增用戶中,有多少人有后續(xù)的活躍行為;
    活躍留存分析是分析某天的活躍用戶中,有多少人有后續(xù)的活躍行為。
    留存分析是衡量產(chǎn)品對(duì)用戶價(jià)值高低的重要指標(biāo)。
    此處要求統(tǒng)計(jì)新增留存率,新增留存率具體是指留存用戶數(shù)與新增用戶數(shù)的比值,例如2020-06-14新增100個(gè)用戶,1日之后(2020-06-15)這100人中有80個(gè)人活躍了,那2020-06-14的1日留存數(shù)則為80,2020-06-14的1日留存率則為80%。

    要求統(tǒng)計(jì)每天的1至7日留存率,如下圖所示。

  • 建表語句
  • DROP TABLE IF EXISTS ads_user_retention; CREATE EXTERNAL TABLE ads_user_retention (`dt` STRING COMMENT '統(tǒng)計(jì)日期',`create_date` STRING COMMENT '用戶新增日期',`retention_day` BIGINT COMMENT '截至當(dāng)前日期留存天數(shù)',`retention_count` BIGINT COMMENT '留存用戶數(shù)量',`new_user_count` BIGINT COMMENT '新增用戶數(shù)量',`retention_rate` DECIMAL(16,2) COMMENT '留存率' ) COMMENT '用戶留存率' ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LOCATION '/warehouse/gmall/ads/ads_user_retention/';
  • 數(shù)據(jù)裝載
  • insert overwrite table ads_user_retention select * from ads_user_retention union select'2020-06-14',login_date_first create_date,datediff('2020-06-14',login_date_first) retention_day,sum(if(login_date_last='2020-06-14',1,0)) retention_count,count(*) new_user_count,cast(sum(if(login_date_last='2020-06-14',1,0))/count(*)*100 as decimal(16,2)) retention_rate from dwt_user_topic where dt='2020-06-14' and login_date_first>=date_add('2020-06-14',-7) and login_date_first<'2020-06-14' group by login_date_first;

    9.4 商品主題

    9.4.1 商品統(tǒng)計(jì)

    該指標(biāo)為商品綜合統(tǒng)計(jì),包含每個(gè)spu被下單總次數(shù)和被下單總金額。

  • 建表語句
  • DROP TABLE IF EXISTS ads_order_spu_stats; CREATE EXTERNAL TABLE `ads_order_spu_stats` (`dt` STRING COMMENT '統(tǒng)計(jì)日期',`recent_days` BIGINT COMMENT '最近天數(shù),1:最近1天,7:最近7天,30:最近30天',`spu_id` STRING COMMENT '商品ID',`spu_name` STRING COMMENT '商品名稱',`tm_id` STRING COMMENT '品牌ID',`tm_name` STRING COMMENT '品牌名稱',`category3_id` STRING COMMENT '三級(jí)品類ID',`category3_name` STRING COMMENT '三級(jí)品類名稱',`category2_id` STRING COMMENT '二級(jí)品類ID',`category2_name` STRING COMMENT '二級(jí)品類名稱',`category1_id` STRING COMMENT '一級(jí)品類ID',`category1_name` STRING COMMENT '一級(jí)品類名稱',`order_count` BIGINT COMMENT '訂單數(shù)',`order_amount` DECIMAL(16,2) COMMENT '訂單金額' ) COMMENT '商品銷售統(tǒng)計(jì)' ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LOCATION '/warehouse/gmall/ads/ads_order_spu_stats/';
  • 數(shù)據(jù)裝載
  • insert overwrite table ads_order_spu_stats select * from ads_order_spu_stats union select'2020-06-14' dt,recent_days,spu_id,spu_name,tm_id,tm_name,category3_id,category3_name,category2_id,category2_name,category1_id,category1_name,sum(order_count),sum(order_amount) from (selectrecent_days,sku_id,casewhen recent_days=1 then order_last_1d_countwhen recent_days=7 then order_last_7d_countwhen recent_days=30 then order_last_30d_countend order_count,casewhen recent_days=1 then order_last_1d_final_amountwhen recent_days=7 then order_last_7d_final_amountwhen recent_days=30 then order_last_30d_final_amountend order_amountfrom dwt_sku_topic lateral view explode(Array(1,7,30)) tmp as recent_dayswhere dt='2020-06-14' )t1 left join (selectid,spu_id,spu_name,tm_id,tm_name,category3_id,category3_name,category2_id,category2_name,category1_id,category1_namefrom dim_sku_infowhere dt='2020-06-14' )t2 on t1.sku_id=t2.id group by recent_days,spu_id,spu_name,tm_id,tm_name,category3_id,category3_name,category2_id,category2_name,category1_id,category1_name;

    9.4.2 品牌復(fù)購率

    品牌復(fù)購率是指一段時(shí)間內(nèi)重復(fù)購買某品牌的人數(shù)與購買過該品牌的人數(shù)的比值。重復(fù)購買即購買次數(shù)大于等于2,購買過即購買次數(shù)大于1。
    此處要求統(tǒng)計(jì)最近1,7,30天的各品牌復(fù)購率。

  • 建表語句
  • DROP TABLE IF EXISTS ads_repeat_purchase; CREATE EXTERNAL TABLE `ads_repeat_purchase` (`dt` STRING COMMENT '統(tǒng)計(jì)日期',`recent_days` BIGINT COMMENT '最近天數(shù),1:最近1天,7:最近7天,30:最近30天',`tm_id` STRING COMMENT '品牌ID',`tm_name` STRING COMMENT '品牌名稱',`order_repeat_rate` DECIMAL(16,2) COMMENT '復(fù)購率' ) COMMENT '品牌復(fù)購率' ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LOCATION '/warehouse/gmall/ads/ads_repeat_purchase/';
  • 數(shù)據(jù)裝載
    **思路分析:**該需求可分兩步實(shí)現(xiàn):
    1). 統(tǒng)計(jì)每個(gè)用戶購買每個(gè)品牌的次數(shù);
    2). 分別統(tǒng)計(jì)購買次數(shù)大于1的人數(shù)和大于2的人數(shù)。
  • insert overwrite table ads_repeat_purchase select * from ads_repeat_purchase union select'2020-06-14' dt,recent_days,tm_id,tm_name,cast(sum(if(order_count>=2,1,0))/sum(if(order_count>=1,1,0))*100 as decimal(16,2)) from (selectrecent_days,user_id,tm_id,tm_name,sum(order_count) order_countfrom(selectrecent_days,user_id,sku_id,count(*) order_countfrom dwd_order_detail lateral view explode(Array(1,7,30)) tmp as recent_dayswhere dt>=date_add('2020-06-14',-29)and dt>=date_add('2020-06-14',-recent_days+1)group by recent_days, user_id,sku_id)t1left join(selectid,tm_id,tm_namefrom dim_sku_infowhere dt='2020-06-14')t2on t1.sku_id=t2.idgroup by recent_days,user_id,tm_id,tm_name )t3 group by recent_days,tm_id,tm_name;

    9.5 訂單主題

    9.5.1 訂單統(tǒng)計(jì)

    該需求包含訂單總數(shù),訂單總金額和下單總?cè)藬?shù)。

  • 建表語句
  • DROP TABLE IF EXISTS ads_order_total; CREATE EXTERNAL TABLE `ads_order_total` (`dt` STRING COMMENT '統(tǒng)計(jì)日期',`recent_days` BIGINT COMMENT '最近天數(shù),1:最近1天,7:最近7天,30:最近30天',`order_count` BIGINT COMMENT '訂單數(shù)',`order_amount` DECIMAL(16,2) COMMENT '訂單金額',`order_user_count` BIGINT COMMENT '下單人數(shù)' ) COMMENT '訂單統(tǒng)計(jì)' ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LOCATION '/warehouse/gmall/ads/ads_order_total/';
  • 數(shù)據(jù)裝載
  • insert overwrite table ads_order_total select * from ads_order_total union select'2020-06-14',recent_days,sum(order_count),sum(order_final_amount) order_final_amount,sum(if(order_final_amount>0,1,0)) order_user_count from (selectrecent_days,user_id,case when recent_days=0 then order_countwhen recent_days=1 then order_last_1d_countwhen recent_days=7 then order_last_7d_countwhen recent_days=30 then order_last_30d_countend order_count,case when recent_days=0 then order_final_amountwhen recent_days=1 then order_last_1d_final_amountwhen recent_days=7 then order_last_7d_final_amountwhen recent_days=30 then order_last_30d_final_amountend order_final_amountfrom dwt_user_topic lateral view explode(Array(1,7,30)) tmp as recent_dayswhere dt='2020-06-14' )t1 group by recent_days;

    9.5.2 各地區(qū)訂單統(tǒng)計(jì)

    該需求包含各省份訂單總數(shù)和訂單總金額。

  • 建表語句
  • DROP TABLE IF EXISTS ads_order_by_province; CREATE EXTERNAL TABLE `ads_order_by_province` (`dt` STRING COMMENT '統(tǒng)計(jì)日期',`recent_days` BIGINT COMMENT '最近天數(shù),1:最近1天,7:最近7天,30:最近30天',`province_id` STRING COMMENT '省份ID',`province_name` STRING COMMENT '省份名稱',`area_code` STRING COMMENT '地區(qū)編碼',`iso_code` STRING COMMENT '國際標(biāo)準(zhǔn)地區(qū)編碼',`iso_code_3166_2` STRING COMMENT '國際標(biāo)準(zhǔn)地區(qū)編碼',`order_count` BIGINT COMMENT '訂單數(shù)',`order_amount` DECIMAL(16,2) COMMENT '訂單金額' ) COMMENT '各地區(qū)訂單統(tǒng)計(jì)' ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LOCATION '/warehouse/gmall/ads/ads_order_by_province/';
  • 數(shù)據(jù)裝載
  • insert overwrite table ads_order_by_province select * from ads_order_by_province union selectdt,recent_days,province_id,province_name,area_code,iso_code,iso_3166_2,order_count,order_amount from (select'2020-06-14' dt,recent_days,province_id,sum(order_count) order_count,sum(order_amount) order_amountfrom(selectrecent_days,province_id,casewhen recent_days=1 then order_last_1d_countwhen recent_days=7 then order_last_7d_countwhen recent_days=30 then order_last_30d_countend order_count,casewhen recent_days=1 then order_last_1d_final_amountwhen recent_days=7 then order_last_7d_final_amountwhen recent_days=30 then order_last_30d_final_amountend order_amountfrom dwt_area_topic lateral view explode(Array(1,7,30)) tmp as recent_dayswhere dt='2020-06-14')t1group by recent_days,province_id )t2 join dim_base_province t3 on t2.province_id=t3.id;

    9.6 優(yōu)惠券主題

    9.6.1 優(yōu)惠券統(tǒng)計(jì)

    該需求要求統(tǒng)計(jì)最近30日發(fā)布的所有優(yōu)惠券的領(lǐng)用情況和補(bǔ)貼率,補(bǔ)貼率是指,優(yōu)惠金額與使用優(yōu)惠券的訂單的原價(jià)金額的比值。

  • 建表語句
  • DROP TABLE IF EXISTS ads_coupon_stats; CREATE EXTERNAL TABLE ads_coupon_stats (`dt` STRING COMMENT '統(tǒng)計(jì)日期',`coupon_id` STRING COMMENT '優(yōu)惠券ID',`coupon_name` STRING COMMENT '優(yōu)惠券名稱',`start_date` STRING COMMENT '發(fā)布日期',`rule_name` STRING COMMENT '優(yōu)惠規(guī)則,例如滿100元減10元',`get_count` BIGINT COMMENT '領(lǐng)取次數(shù)',`order_count` BIGINT COMMENT '使用(下單)次數(shù)',`expire_count` BIGINT COMMENT '過期次數(shù)',`order_original_amount` DECIMAL(16,2) COMMENT '使用優(yōu)惠券訂單原始金額',`order_final_amount` DECIMAL(16,2) COMMENT '使用優(yōu)惠券訂單最終金額',`reduce_amount` DECIMAL(16,2) COMMENT '優(yōu)惠金額',`reduce_rate` DECIMAL(16,2) COMMENT '補(bǔ)貼率' ) COMMENT '商品銷售統(tǒng)計(jì)' ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LOCATION '/warehouse/gmall/ads/ads_coupon_stats/';
  • 數(shù)據(jù)裝載
  • insert overwrite table ads_coupon_stats select * from ads_coupon_stats union select'2020-06-14' dt,t1.id,coupon_name,start_date,rule_name,get_count,order_count,expire_count,order_original_amount,order_final_amount,reduce_amount,reduce_rate from (selectid,coupon_name,date_format(start_time,'yyyy-MM-dd') start_date,casewhen coupon_type='3201' then concat('滿',condition_amount,'元減',benefit_amount,'元')when coupon_type='3202' then concat('滿',condition_num,'件打', (1-benefit_discount)*10,'折')when coupon_type='3203' then concat('減',benefit_amount,'元')end rule_namefrom dim_coupon_infowhere dt='2020-06-14'and date_format(start_time,'yyyy-MM-dd')>=date_add('2020-06-14',-29) )t1 left join (selectcoupon_id,get_count,order_count,expire_count,order_original_amount,order_final_amount,order_reduce_amount reduce_amount,cast(order_reduce_amount/order_original_amount as decimal(16,2)) reduce_ratefrom dwt_coupon_topicwhere dt='2020-06-14' )t2 on t1.id=t2.coupon_id;

    9.7 活動(dòng)主題

    9.7.1 活動(dòng)統(tǒng)計(jì)

    該需求要求統(tǒng)計(jì)最近30日發(fā)布的所有活動(dòng)的參與情況和補(bǔ)貼率,補(bǔ)貼率是指,優(yōu)惠金額與參與活動(dòng)的訂單原價(jià)金額的比值。

  • 建表語句
  • DROP TABLE IF EXISTS ads_activity_stats; CREATE EXTERNAL TABLE `ads_activity_stats` (`dt` STRING COMMENT '統(tǒng)計(jì)日期',`activity_id` STRING COMMENT '活動(dòng)ID',`activity_name` STRING COMMENT '活動(dòng)名稱',`start_date` STRING COMMENT '活動(dòng)開始日期',`order_count` BIGINT COMMENT '參與活動(dòng)訂單數(shù)',`order_original_amount` DECIMAL(16,2) COMMENT '參與活動(dòng)訂單原始金額',`order_final_amount` DECIMAL(16,2) COMMENT '參與活動(dòng)訂單最終金額',`reduce_amount` DECIMAL(16,2) COMMENT '優(yōu)惠金額',`reduce_rate` DECIMAL(16,2) COMMENT '補(bǔ)貼率' ) COMMENT '商品銷售統(tǒng)計(jì)' ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LOCATION '/warehouse/gmall/ads/ads_activity_stats/';
  • 數(shù)據(jù)裝載
  • insert overwrite table ads_activity_stats select * from ads_activity_stats union select'2020-06-14' dt,t4.activity_id,activity_name,start_date,order_count,order_original_amount,order_final_amount,reduce_amount,reduce_rate from (selectactivity_id,activity_name,date_format(start_time,'yyyy-MM-dd') start_datefrom dim_activity_rule_infowhere dt='2020-06-14'and date_format(start_time,'yyyy-MM-dd')>=date_add('2020-06-14',-29)group by activity_id,activity_name,start_time )t4 left join (selectactivity_id,sum(order_count) order_count,sum(order_original_amount) order_original_amount,sum(order_final_amount) order_final_amount,sum(order_reduce_amount) reduce_amount,cast(sum(order_reduce_amount)/sum(order_original_amount)*100 as decimal(16,2)) reduce_ratefrom dwt_activity_topicwhere dt='2020-06-14'group by activity_id )t5 on t4.activity_id=t5.activity_id;

    自此 所有表已裝載完畢!

    9.8 ADS層業(yè)務(wù)數(shù)據(jù)導(dǎo)入腳本

  • 在/home/xiaobai/bin目錄下創(chuàng)建腳本dwt_to_ads.sh:
  • [xiaobai@hadoop102 ~]$ vim dwt_to_ads.sh #!/bin/bashAPP=gmall# 如果是輸入的日期按照取輸入日期;如果沒輸入日期取當(dāng)前時(shí)間的前一天 if [ -n "$2" ] ;thendo_date=$2 else do_date=`date -d "-1 day" +%F` fiads_activity_stats=" insert overwrite table ${APP}.ads_activity_stats select * from ${APP}.ads_activity_stats union select'$do_date' dt,t4.activity_id,activity_name,start_date,order_count,order_original_amount,order_final_amount,reduce_amount,reduce_rate from (selectactivity_id,activity_name,date_format(start_time,'yyyy-MM-dd') start_datefrom ${APP}.dim_activity_rule_infowhere dt='$do_date'and date_format(start_time,'yyyy-MM-dd')>=date_add('$do_date',-29)group by activity_id,activity_name,start_time )t4 left join (selectactivity_id,sum(order_count) order_count,sum(order_original_amount) order_original_amount,sum(order_final_amount) order_final_amount,sum(order_reduce_amount) reduce_amount,cast(sum(order_reduce_amount)/sum(order_original_amount)*100 as decimal(16,2)) reduce_ratefrom ${APP}.dwt_activity_topicwhere dt='$do_date'group by activity_id )t5 on t4.activity_id=t5.activity_id; " ads_coupon_stats=" insert overwrite table ${APP}.ads_coupon_stats select * from ${APP}.ads_coupon_stats union select'$do_date' dt,t1.id,coupon_name,start_date,rule_name,get_count,order_count,expire_count,order_original_amount,order_final_amount,reduce_amount,reduce_rate from (selectid,coupon_name,date_format(start_time,'yyyy-MM-dd') start_date,casewhen coupon_type='3201' then concat('滿',condition_amount,'元減',benefit_amount,'元')when coupon_type='3202' then concat('滿',condition_num,'件打', (1-benefit_discount)*10,'折')when coupon_type='3203' then concat('減',benefit_amount,'元')end rule_namefrom ${APP}.dim_coupon_infowhere dt='$do_date'and date_format(start_time,'yyyy-MM-dd')>=date_add('$do_date',-29) )t1 left join (selectcoupon_id,get_count,order_count,expire_count,order_original_amount,order_final_amount,order_reduce_amount reduce_amount,cast(order_reduce_amount/order_original_amount as decimal(16,2)) reduce_ratefrom ${APP}.dwt_coupon_topicwhere dt='$do_date' )t2 on t1.id=t2.coupon_id; "ads_order_by_province=" insert overwrite table ${APP}.ads_order_by_province select * from ${APP}.ads_order_by_province union selectdt,recent_days,province_id,province_name,area_code,iso_code,iso_3166_2,order_count,order_amount from (select'$do_date' dt,recent_days,province_id,sum(order_count) order_count,sum(order_amount) order_amountfrom(selectrecent_days,province_id,casewhen recent_days=1 then order_last_1d_countwhen recent_days=7 then order_last_7d_countwhen recent_days=30 then order_last_30d_countend order_count,casewhen recent_days=1 then order_last_1d_final_amountwhen recent_days=7 then order_last_7d_final_amountwhen recent_days=30 then order_last_30d_final_amountend order_amountfrom ${APP}.dwt_area_topic lateral view explode(Array(1,7,30)) tmp as recent_dayswhere dt='$do_date')t1group by recent_days,province_id )t2 join ${APP}.dim_base_province t3 on t2.province_id=t3.id; "ads_order_spu_stats=" insert overwrite table ${APP}.ads_order_spu_stats select * from ${APP}.ads_order_spu_stats union select'$do_date' dt,recent_days,spu_id,spu_name,tm_id,tm_name,category3_id,category3_name,category2_id,category2_name,category1_id,category1_name,sum(order_count),sum(order_amount) from (selectrecent_days,sku_id,casewhen recent_days=1 then order_last_1d_countwhen recent_days=7 then order_last_7d_countwhen recent_days=30 then order_last_30d_countend order_count,casewhen recent_days=1 then order_last_1d_final_amountwhen recent_days=7 then order_last_7d_final_amountwhen recent_days=30 then order_last_30d_final_amountend order_amountfrom ${APP}.dwt_sku_topic lateral view explode(Array(1,7,30)) tmp as recent_dayswhere dt='$do_date' )t1 left join (selectid,spu_id,spu_name,tm_id,tm_name,category3_id,category3_name,category2_id,category2_name,category1_id,category1_namefrom ${APP}.dim_sku_infowhere dt='$do_date' )t2 on t1.sku_id=t2.id group by recent_days,spu_id,spu_name,tm_id,tm_name,category3_id,category3_name,category2_id,category2_name,category1_id,category1_name; "ads_order_total=" insert overwrite table ${APP}.ads_order_total select * from ${APP}.ads_order_total union select'$do_date',recent_days,sum(order_count),sum(order_final_amount) order_final_amount,sum(if(order_final_amount>0,1,0)) order_user_count from (selectrecent_days,user_id,case when recent_days=0 then order_countwhen recent_days=1 then order_last_1d_countwhen recent_days=7 then order_last_7d_countwhen recent_days=30 then order_last_30d_countend order_count,case when recent_days=0 then order_final_amountwhen recent_days=1 then order_last_1d_final_amountwhen recent_days=7 then order_last_7d_final_amountwhen recent_days=30 then order_last_30d_final_amountend order_final_amountfrom ${APP}.dwt_user_topic lateral view explode(Array(1,7,30)) tmp as recent_dayswhere dt='$do_date' )t1 group by recent_days; "ads_page_path=" insert overwrite table ${APP}.ads_page_path select * from ${APP}.ads_page_path union select'$do_date',recent_days,source,target,count(*) from (selectrecent_days,concat('step-',step,':',source) source,concat('step-',step+1,':',target) targetfrom(selectrecent_days,page_id source,lead(page_id,1,null) over (partition by recent_days,session_id order by ts) target,row_number() over (partition by recent_days,session_id order by ts) stepfrom(selectrecent_days,last_page_id,page_id,ts,concat(mid_id,'-',last_value(if(last_page_id is null,ts,null),true) over (partition by mid_id,recent_days order by ts)) session_idfrom ${APP}.dwd_page_log lateral view explode(Array(1,7,30)) tmp as recent_dayswhere dt>=date_add('$do_date',-30)and dt>=date_add('$do_date',-recent_days+1))t2)t3 )t4 group by recent_days,source,target; "ads_repeat_purchase=" insert overwrite table ${APP}.ads_repeat_purchase select * from ${APP}.ads_repeat_purchase union select'$do_date' dt,recent_days,tm_id,tm_name,cast(sum(if(order_count>=2,1,0))/sum(if(order_count>=1,1,0))*100 as decimal(16,2)) from (selectrecent_days,user_id,tm_id,tm_name,sum(order_count) order_countfrom(selectrecent_days,user_id,sku_id,count(*) order_countfrom ${APP}.dwd_order_detail lateral view explode(Array(1,7,30)) tmp as recent_dayswhere dt>=date_add('$do_date',-29)and dt>=date_add('$do_date',-recent_days+1)group by recent_days, user_id,sku_id)t1left join(selectid,tm_id,tm_namefrom ${APP}.dim_sku_infowhere dt='$do_date')t2on t1.sku_id=t2.idgroup by recent_days,user_id,tm_id,tm_name )t3 group by recent_days,tm_id,tm_name; "ads_user_action=" with tmp_page as (select'$do_date' dt,recent_days,sum(if(array_contains(pages,'home'),1,0)) home_count,sum(if(array_contains(pages,'good_detail'),1,0)) good_detail_countfrom(selectrecent_days,mid_id,collect_set(page_id) pagesfrom(selectdt,mid_id,page.page_idfrom ${APP}.dws_visitor_action_daycount lateral view explode(page_stats) tmp as pagewhere dt>=date_add('$do_date',-29)and page.page_id in('home','good_detail'))t1 lateral view explode(Array(1,7,30)) tmp as recent_dayswhere dt>=date_add('$do_date',-recent_days+1)group by recent_days,mid_id)t2group by recent_days ), tmp_cop as (select'$do_date' dt,recent_days,sum(if(cart_count>0,1,0)) cart_count,sum(if(order_count>0,1,0)) order_count,sum(if(payment_count>0,1,0)) payment_countfrom(selectrecent_days,user_id,casewhen recent_days=1 then cart_last_1d_countwhen recent_days=7 then cart_last_7d_countwhen recent_days=30 then cart_last_30d_countend cart_count,casewhen recent_days=1 then order_last_1d_countwhen recent_days=7 then order_last_7d_countwhen recent_days=30 then order_last_30d_countend order_count,casewhen recent_days=1 then payment_last_1d_countwhen recent_days=7 then payment_last_7d_countwhen recent_days=30 then payment_last_30d_countend payment_countfrom ${APP}.dwt_user_topic lateral view explode(Array(1,7,30)) tmp as recent_dayswhere dt='$do_date')t1group by recent_days ) insert overwrite table ${APP}.ads_user_action select * from ${APP}.ads_user_action union selecttmp_page.dt,tmp_page.recent_days,home_count,good_detail_count,cart_count,order_count,payment_count from tmp_page join tmp_cop on tmp_page.recent_days=tmp_cop.recent_days; "ads_user_change=" insert overwrite table ${APP}.ads_user_change select * from ${APP}.ads_user_change union selectchurn.dt,user_churn_count,user_back_count from (select'$do_date' dt,count(*) user_churn_countfrom ${APP}.dwt_user_topicwhere dt='$do_date'and login_date_last=date_add('$do_date',-7) )churn join (select'$do_date' dt,count(*) user_back_countfrom(selectuser_id,login_date_lastfrom ${APP}.dwt_user_topicwhere dt='$do_date'and login_date_last='$do_date')t1join(selectuser_id,login_date_last login_date_previousfrom ${APP}.dwt_user_topicwhere dt=date_add('$do_date',-1))t2on t1.user_id=t2.user_idwhere datediff(login_date_last,login_date_previous)>=8 )back on churn.dt=back.dt; "ads_user_retention=" insert overwrite table ${APP}.ads_user_retention select * from ${APP}.ads_user_retention union select'$do_date',login_date_first create_date,datediff('$do_date',login_date_first) retention_day,sum(if(login_date_last='$do_date',1,0)) retention_count,count(*) new_user_count,cast(sum(if(login_date_last='$do_date',1,0))/count(*)*100 as decimal(16,2)) retention_rate from ${APP}.dwt_user_topic where dt='$do_date' and login_date_first>=date_add('$do_date',-7) and login_date_first<'$do_date' group by login_date_first; "ads_user_total=" insert overwrite table ${APP}.ads_user_total select * from ${APP}.ads_user_total union select'$do_date',recent_days,sum(if(login_date_first>=recent_days_ago,1,0)) new_user_count,sum(if(order_date_first>=recent_days_ago,1,0)) new_order_user_count,sum(order_final_amount) order_final_amount,sum(if(order_final_amount>0,1,0)) order_user_count,sum(if(login_date_last>=recent_days_ago and order_final_amount=0,1,0)) no_order_user_count from (selectrecent_days,user_id,login_date_first,login_date_last,order_date_first,case when recent_days=0 then order_final_amountwhen recent_days=1 then order_last_1d_final_amountwhen recent_days=7 then order_last_7d_final_amountwhen recent_days=30 then order_last_30d_final_amountend order_final_amount,if(recent_days=0,'1970-01-01',date_add('$do_date',-recent_days+1)) recent_days_agofrom ${APP}.dwt_user_topic lateral view explode(Array(0,1,7,30)) tmp as recent_dayswhere dt='$do_date' )t1 group by recent_days; "ads_visit_stats=" insert overwrite table ${APP}.ads_visit_stats select * from ${APP}.ads_visit_stats union select'$do_date' dt,is_new,recent_days,channel,count(distinct(mid_id)) uv_count,cast(sum(duration)/1000 as bigint) duration_sec,cast(avg(duration)/1000 as bigint) avg_duration_sec,sum(page_count) page_count,cast(avg(page_count) as bigint) avg_page_count,count(*) sv_count,sum(if(page_count=1,1,0)) bounce_count,cast(sum(if(page_count=1,1,0))/count(*)*100 as decimal(16,2)) bounce_rate from (selectsession_id,mid_id,is_new,recent_days,channel,count(*) page_count,sum(during_time) durationfrom(selectmid_id,channel,recent_days,is_new,last_page_id,page_id,during_time,concat(mid_id,'-',last_value(if(last_page_id is null,ts,null),true) over (partition by recent_days,mid_id order by ts)) session_idfrom(selectmid_id,channel,last_page_id,page_id,during_time,ts,recent_days,if(visit_date_first>=date_add('$do_date',-recent_days+1),'1','0') is_newfrom(selectt1.mid_id,t1.channel,t1.last_page_id,t1.page_id,t1.during_time,t1.dt,t1.ts,t2.visit_date_firstfrom(selectmid_id,channel,last_page_id,page_id,during_time,dt,tsfrom ${APP}.dwd_page_logwhere dt>=date_add('$do_date',-30))t1left join(selectmid_id,visit_date_firstfrom ${APP}.dwt_visitor_topicwhere dt='$do_date')t2on t1.mid_id=t2.mid_id)t3 lateral view explode(Array(1,7,30)) tmp as recent_dayswhere dt>=date_add('$do_date',-recent_days+1))t4)t5group by session_id,mid_id,is_new,recent_days,channel )t6 group by is_new,recent_days,channel; "case $1 in"ads_activity_stats" )hive -e "$ads_activity_stats" ;;"ads_coupon_stats" )hive -e "$ads_coupon_stats";;"ads_order_by_province" )hive -e "$ads_order_by_province" ;;"ads_order_spu_stats" )hive -e "$ads_order_spu_stats" ;;"ads_order_total" )hive -e "$ads_order_total" ;;"ads_page_path" )hive -e "$ads_page_path" ;;"ads_repeat_purchase" )hive -e "$ads_repeat_purchase" ;;"ads_user_action" )hive -e "$ads_user_action" ;;"ads_user_change" )hive -e "$ads_user_change" ;;"ads_user_retention" )hive -e "$ads_user_retention" ;;"ads_user_total" )hive -e "$ads_user_total" ;;"ads_visit_stats" )hive -e "$ads_visit_stats" ;;"all" )hive -e "$ads_activity_stats$ads_coupon_stats$ads_order_by_province$ads_order_spu_stats$ads_order_total$ads_page_path$ads_repeat_purchase$ads_user_action$ads_user_change$ads_user_retention$ads_user_total$ads_visit_stats";; esac
  • 權(quán)限:
  • [xiaobai@hadoop102 ~]$ chmod 777 dwt_to_ads.sh
  • 執(zhí)行:
  • [xiaobai@hadoop102 ~]$ dwt_to_ads.sh all 2020-06-14

    第10章 全流程調(diào)度

    10.1 Azkaban部署

    大數(shù)據(jù)之Azkaban部署戳這里==>

    10.2 創(chuàng)建MySQL數(shù)據(jù)庫和表

  • 創(chuàng)建gmall_report數(shù)據(jù)庫:

    或使用sql語句/
  • CREATE DATABASE `gmall_report` CHARACTER SET 'utf8' COLLATE 'utf8_general_ci';
  • 創(chuàng)建表:
    1). 訪客統(tǒng)計(jì)
  • DROP TABLE IF EXISTS ads_visit_stats; CREATE TABLE `ads_visit_stats` (`dt` DATE NOT NULL COMMENT '統(tǒng)計(jì)日期',`is_new` VARCHAR(255) NOT NULL COMMENT '新老標(biāo)識(shí),1:新,0:老',`recent_days` INT NOT NULL COMMENT '最近天數(shù),1:最近1天,7:最近7天,30:最近30天',`channel` VARCHAR(255) NOT NULL COMMENT '渠道',`uv_count` BIGINT(20) DEFAULT NULL COMMENT '日活(訪問人數(shù))',`duration_sec` BIGINT(20) DEFAULT NULL COMMENT '頁面停留總時(shí)長',`avg_duration_sec` BIGINT(20) DEFAULT NULL COMMENT '一次會(huì)話,頁面停留平均時(shí)長',`page_count` BIGINT(20) DEFAULT NULL COMMENT '頁面總瀏覽數(shù)',`avg_page_count` BIGINT(20) DEFAULT NULL COMMENT '一次會(huì)話,頁面平均瀏覽數(shù)',`sv_count` BIGINT(20) DEFAULT NULL COMMENT '會(huì)話次數(shù)',`bounce_count` BIGINT(20) DEFAULT NULL COMMENT '跳出數(shù)',`bounce_rate` DECIMAL(16,2) DEFAULT NULL COMMENT '跳出率',PRIMARY KEY (`dt`,`recent_days`,`is_new`,`channel`) ) ENGINE=INNODB DEFAULT CHARSET=utf8;

    2). 頁面路徑分析

    DROP TABLE IF EXISTS ads_page_path; CREATE TABLE `ads_page_path` ( `dt` DATE NOT NULL COMMENT '統(tǒng)計(jì)日期',`recent_days` BIGINT(20) NOT NULL COMMENT '最近天數(shù),1:最近1天,7:最近7天,30:最近30天',`source` VARCHAR(255) DEFAULT NULL COMMENT '跳轉(zhuǎn)起始頁面',`target` VARCHAR(255) DEFAULT NULL COMMENT '跳轉(zhuǎn)終到頁面',`path_count` BIGINT(255) DEFAULT NULL COMMENT '跳轉(zhuǎn)次數(shù)',UNIQUE KEY (`dt`,`recent_days`,`source`,`target`) USING BTREE ) ENGINE=INNODB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;

    3). 用戶統(tǒng)計(jì)

    DROP TABLE IF EXISTS ads_user_total; CREATE TABLE `ads_user_total` ( `dt` DATE NOT NULL COMMENT '統(tǒng)計(jì)日期',`recent_days` BIGINT(20) NOT NULL COMMENT '最近天數(shù),0:累積值,1:最近1天,7:最近7天,30:最近30天',`new_user_count` BIGINT(20) DEFAULT NULL COMMENT '新注冊(cè)用戶數(shù)',`new_order_user_count` BIGINT(20) DEFAULT NULL COMMENT '新增下單用戶數(shù)',`order_final_amount` DECIMAL(16,2) DEFAULT NULL COMMENT '下單總金額',`order_user_count` BIGINT(20) DEFAULT NULL COMMENT '下單用戶數(shù)',`no_order_user_count` BIGINT(20) DEFAULT NULL COMMENT '未下單用戶數(shù)(具體指活躍用戶中未下單用戶)',PRIMARY KEY (`dt`,`recent_days`) ) ENGINE=INNODB DEFAULT CHARSET=utf8;

    4). 用戶變動(dòng)統(tǒng)計(jì)

    DROP TABLE IF EXISTS ads_user_change; CREATE TABLE `ads_user_change` (`dt` DATE NOT NULL COMMENT '統(tǒng)計(jì)日期',`user_churn_count` BIGINT(20) DEFAULT NULL COMMENT '流失用戶數(shù)',`user_back_count` BIGINT(20) DEFAULT NULL COMMENT '回流用戶數(shù)',PRIMARY KEY (`dt`) ) ENGINE=INNODB DEFAULT CHARSET=utf8;

    5). 用戶行為漏斗分析

    DROP TABLE IF EXISTS ads_user_action; CREATE TABLE `ads_user_action` (`dt` DATE NOT NULL COMMENT '統(tǒng)計(jì)日期',`recent_days` BIGINT(20) NOT NULL COMMENT '最近天數(shù),1:最近1天,7:最近7天,30:最近30天',`home_count` BIGINT(20) DEFAULT NULL COMMENT '瀏覽首頁人數(shù)',`good_detail_count` BIGINT(20) DEFAULT NULL COMMENT '瀏覽商品詳情頁人數(shù)',`cart_count` BIGINT(20) DEFAULT NULL COMMENT '加入購物車人數(shù)',`order_count` BIGINT(20) DEFAULT NULL COMMENT '下單人數(shù)',`payment_count` BIGINT(20) DEFAULT NULL COMMENT '支付人數(shù)',PRIMARY KEY (`dt`,`recent_days`) USING BTREE ) ENGINE=INNODB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;

    6). 用戶留存率分析

    DROP TABLE IF EXISTS ads_user_retention; CREATE TABLE `ads_user_retention` ( `dt` DATE DEFAULT NULL COMMENT '統(tǒng)計(jì)日期',`create_date` VARCHAR(255) NOT NULL COMMENT '用戶新增日期',`retention_day` BIGINT(20) NOT NULL COMMENT '截至當(dāng)前日期留存天數(shù)',`retention_count` BIGINT(20) DEFAULT NULL COMMENT '留存用戶數(shù)量',`new_user_count` BIGINT(20) DEFAULT NULL COMMENT '新增用戶數(shù)量',`retention_rate` DECIMAL(16,2) DEFAULT NULL COMMENT '留存率',PRIMARY KEY (`create_date`,`retention_day`) USING BTREE ) ENGINE=INNODB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;

    7). 訂單統(tǒng)計(jì)

    DROP TABLE IF EXISTS ads_order_total;CREATE TABLE `ads_order_total` ( `dt` DATE NOT NULL COMMENT '統(tǒng)計(jì)日期', `recent_days` BIGINT(20) NOT NULL COMMENT '最近天數(shù),1:最近1天,7:最近7天,30:最近30天',`order_count` BIGINT(255) DEFAULT NULL COMMENT '訂單數(shù)', `order_amount` DECIMAL(16,2) DEFAULT NULL COMMENT '訂單金額', `order_user_count` BIGINT(255) DEFAULT NULL COMMENT '下單人數(shù)',PRIMARY KEY (`dt`,`recent_days`) ) ENGINE=INNODB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;

    8). 各省份訂單統(tǒng)計(jì)

    DROP TABLE IF EXISTS ads_order_by_province; CREATE TABLE `ads_order_by_province` (`dt` DATE NOT NULL,`recent_days` BIGINT(20) NOT NULL COMMENT '最近天數(shù),1:最近1天,7:最近7天,30:最近30天',`province_id` VARCHAR(255) NOT NULL COMMENT '統(tǒng)計(jì)日期',`province_name` VARCHAR(255) DEFAULT NULL COMMENT '省份名稱',`area_code` VARCHAR(255) DEFAULT NULL COMMENT '地區(qū)編碼',`iso_code` VARCHAR(255) DEFAULT NULL COMMENT '國際標(biāo)準(zhǔn)地區(qū)編碼',`iso_code_3166_2` VARCHAR(255) DEFAULT NULL COMMENT '國際標(biāo)準(zhǔn)地區(qū)編碼',`order_count` BIGINT(20) DEFAULT NULL COMMENT '訂單數(shù)',`order_amount` DECIMAL(16,2) DEFAULT NULL COMMENT '訂單金額',PRIMARY KEY (`dt`, `recent_days` ,`province_id`) USING BTREE ) ENGINE=INNODB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;

    9). 品牌復(fù)購率

    DROP TABLE IF EXISTS ads_repeat_purchase; CREATE TABLE `ads_repeat_purchase` ( `dt` DATE NOT NULL COMMENT '統(tǒng)計(jì)日期',`recent_days` BIGINT(20) NOT NULL COMMENT '最近天數(shù),1:最近1天,7:最近7天,30:最近30天',`tm_id` VARCHAR(255) NOT NULL COMMENT '品牌ID',`tm_name` VARCHAR(255) DEFAULT NULL COMMENT '品牌名稱',`order_repeat_rate` DECIMAL(16,2) DEFAULT NULL COMMENT '復(fù)購率',PRIMARY KEY (`dt` ,`recent_days`,`tm_id`) ) ENGINE=INNODB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;

    10). 商品統(tǒng)計(jì)

    DROP TABLE IF EXISTS ads_order_spu_stats; CREATE TABLE `ads_order_spu_stats` (`dt` DATE NOT NULL COMMENT '統(tǒng)計(jì)日期',`recent_days` BIGINT(20) NOT NULL COMMENT '最近天數(shù),1:最近1天,7:最近7天,30:最近30天',`spu_id` VARCHAR(255) NOT NULL COMMENT '商品ID',`spu_name` VARCHAR(255) DEFAULT NULL COMMENT '商品名稱',`tm_id` VARCHAR(255) NOT NULL COMMENT '品牌ID',`tm_name` VARCHAR(255) DEFAULT NULL COMMENT '品牌名稱',`category3_id` VARCHAR(255) NOT NULL COMMENT '三級(jí)品類ID',`category3_name` VARCHAR(255) DEFAULT NULL COMMENT '三級(jí)品類名稱',`category2_id` VARCHAR(255) NOT NULL COMMENT '二級(jí)品類ID',`category2_name` VARCHAR(255) DEFAULT NULL COMMENT '二級(jí)品類名稱',`category1_id` VARCHAR(255) NOT NULL COMMENT '一級(jí)品類ID',`category1_name` VARCHAR(255) NOT NULL COMMENT '一級(jí)品類名稱',`order_count` BIGINT(20) DEFAULT NULL COMMENT '訂單數(shù)',`order_amount` DECIMAL(16,2) DEFAULT NULL COMMENT '訂單金額', PRIMARY KEY (`dt`,`recent_days`,`spu_id`) ) ENGINE=INNODB DEFAULT CHARSET=utf8;

    11). 活動(dòng)統(tǒng)計(jì)

    DROP TABLE IF EXISTS ads_activity_stats; CREATE TABLE `ads_activity_stats` (`dt` DATE NOT NULL COMMENT '統(tǒng)計(jì)日期',`activity_id` VARCHAR(255) NOT NULL COMMENT '活動(dòng)ID',`activity_name` VARCHAR(255) DEFAULT NULL COMMENT '活動(dòng)名稱',`start_date` DATE DEFAULT NULL COMMENT '開始日期',`order_count` BIGINT(11) DEFAULT NULL COMMENT '參與活動(dòng)訂單數(shù)',`order_original_amount` DECIMAL(16,2) DEFAULT NULL COMMENT '參與活動(dòng)訂單原始金額',`order_final_amount` DECIMAL(16,2) DEFAULT NULL COMMENT '參與活動(dòng)訂單最終金額',`reduce_amount` DECIMAL(16,2) DEFAULT NULL COMMENT '優(yōu)惠金額',`reduce_rate` DECIMAL(16,2) DEFAULT NULL COMMENT '補(bǔ)貼率',PRIMARY KEY (`dt`,`activity_id` ) ) ENGINE=INNODB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;

    12). 優(yōu)惠券統(tǒng)計(jì)

    DROP TABLE IF EXISTS ads_coupon_stats; CREATE TABLE `ads_coupon_stats` (`dt` DATE NOT NULL COMMENT '統(tǒng)計(jì)日期',`coupon_id` VARCHAR(255) NOT NULL COMMENT '優(yōu)惠券ID',`coupon_name` VARCHAR(255) DEFAULT NULL COMMENT '優(yōu)惠券名稱',`start_date` DATE DEFAULT NULL COMMENT '開始日期', `rule_name` VARCHAR(200) DEFAULT NULL COMMENT '優(yōu)惠規(guī)則',`get_count` BIGINT(20) DEFAULT NULL COMMENT '領(lǐng)取次數(shù)',`order_count` BIGINT(20) DEFAULT NULL COMMENT '使用(下單)次數(shù)',`expire_count` BIGINT(20) DEFAULT NULL COMMENT '過期次數(shù)',`order_original_amount` DECIMAL(16,2) DEFAULT NULL COMMENT '使用優(yōu)惠券訂單原始金額',`order_final_amount` DECIMAL(16,2) DEFAULT NULL COMMENT '使用優(yōu)惠券訂單最終金額',`reduce_amount` DECIMAL(16,2) DEFAULT NULL COMMENT '優(yōu)惠金額',`reduce_rate` DECIMAL(16,2) DEFAULT NULL COMMENT '補(bǔ)貼率',PRIMARY KEY (`dt`,`coupon_id` ) ) ENGINE=INNODB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;

    如圖,所有表已經(jīng)全部創(chuàng)建完成?

    10.3 Sqoop導(dǎo)出腳本

  • 編寫Sqoop導(dǎo)出腳本,在/home/xiaobai/bin目錄下創(chuàng)建腳本hdfs_to_mysql.sh
  • [xiaobai@hadoop102 bin]$ vim hdfs_to_mysql.sh #!/bin/bashhive_db_name=gmall mysql_db_name=gmall_reportexport_data() { /opt/module/sqoop/bin/sqoop export \ --connect "jdbc:mysql://hadoop102:3306/${mysql_db_name}?useUnicode=true&characterEncoding=utf-8" \ --username root \ --password ****** \ --table $1 \ --num-mappers 1 \ --export-dir /warehouse/$hive_db_name/ads/$1 \ --input-fields-terminated-by "\t" \ --update-mode allowinsert \ --update-key $2 \ --input-null-string '\\N' \ --input-null-non-string '\\N' }case $1 in"ads_activity_stats" )export_data "ads_activity_stats" "dt,activity_id";;"ads_coupon_stats" )export_data "ads_coupon_stats" "dt,coupon_id";;"ads_order_by_province" )export_data "ads_order_by_province" "dt,recent_days,province_id";;"ads_order_spu_stats" )export_data "ads_order_spu_stats" "dt,recent_days,spu_id";;"ads_order_total" )export_data "ads_order_total" "dt,recent_days";;"ads_page_path" )export_data "ads_page_path" "dt,recent_days,source,target";;"ads_repeat_purchase" )export_data "ads_repeat_purchase" "dt,recent_days,tm_id";;"ads_user_action" )export_data "ads_user_action" "dt,recent_days";;"ads_user_change" )export_data "ads_user_change" "dt";;"ads_user_retention" )export_data "ads_user_retention" "create_date,retention_day";;"ads_user_total" )export_data "ads_user_total" "dt,recent_days";;"ads_visit_stats" )export_data "ads_visit_stats" "dt,recent_days,is_new,channel";;"all" )export_data "ads_activity_stats" "dt,activity_id"export_data "ads_coupon_stats" "dt,coupon_id"export_data "ads_order_by_province" "dt,recent_days,province_id"export_data "ads_order_spu_stats" "dt,recent_days,spu_id"export_data "ads_order_total" "dt,recent_days"export_data "ads_page_path" "dt,recent_days,source,target"export_data "ads_repeat_purchase" "dt,recent_days,tm_id"export_data "ads_user_action" "dt,recent_days"export_data "ads_user_change" "dt"export_data "ads_user_retention" "create_date,retention_day"export_data "ads_user_total" "dt,recent_days"export_data "ads_visit_stats" "dt,recent_days,is_new,channel";; esac
  • 權(quán)限:
  • [xiaobai@hadoop102 bin]$ chmod 777 hdfs_to_mysql.sh
  • 執(zhí)行:
  • [xiaobai@hadoop102 bin]$ ./hdfs_to_mysql.sh all

    在MySQL查看執(zhí)行結(jié)果:

    tips:
    關(guān)于導(dǎo)出update還是insert的問題:
    –update-mode:
    updateonly:只更新,無法插入新數(shù)據(jù);
    allowinsert 允許新增 ;

    –update-key: 允許更新的情況下,指定哪些字段匹配視為同一條數(shù)據(jù),進(jìn)行更新而不增加;多個(gè)字段用逗號(hào)分隔。

    –input-null-string和–input-null-non-string:
    分別表示,將字符串列和非字符串列的空串和“null”轉(zhuǎn)義。

    Sqoop will by default import NULL values as string null. Hive is however using string \N to denote NULL values and therefore predicates dealing with NULL(like IS NULL) will not work correctly. You should append parameters --null-string and --null-non-string in case of import job or --input-null-string and --input-null-non-string in case of an export job if you wish to properly preserve NULL values. Because sqoop is using those parameters in generated code, you need to properly escape value \N to \\N:

    Hive中的Null在底層是以“\N”來存儲(chǔ),而MySQL中的Null在底層就是Null,為了保證數(shù)據(jù)兩端的一致性。在導(dǎo)出數(shù)據(jù)時(shí)采用–input-null-string和–input-null-non-string兩個(gè)參數(shù)。導(dǎo)入數(shù)據(jù)時(shí)采用–null-string和–null-non-string。

    官網(wǎng)地址:http://sqoop.apache.org/docs/1.4.6/SqoopUserGuide.html

    10.4 全調(diào)度流程

    10.4.1 數(shù)據(jù)準(zhǔn)備

    用戶行為數(shù)據(jù)準(zhǔn)備

    先開啟數(shù)據(jù)采集通道:

    [xiaobai@hadoop102 ~]$ f1.sh start ------啟動(dòng)hadoop102采集flume------ ------啟動(dòng)hadoop103采集flume------ [xiaobai@hadoop102 ~]$ f2.sh start--------啟動(dòng) hadoop104 消費(fèi)flume-------
  • 分別修改hadoop102 / hadoop103的/opt/module/applog下的application.yml:

  • 生成數(shù)據(jù):

  • [xiaobai@hadoop102 applog]$ lg.sh
  • 查看hdfs的/origin_data/gmall/log/topic_log/2020-06-15路徑下是否有數(shù)據(jù)生成:

    業(yè)務(wù)數(shù)據(jù)準(zhǔn)備

  • 修改hadoop102下的/opt/module/db_log/路徑下的application.properties:

  • [xiaobai@hadoop102 db_log]$ vim application.properties

  • 生成數(shù)據(jù):
  • [xiaobai@hadoop102 db_log]$ java -jar gmall2020-mock-db-2021-01-22.jar
  • 查看order_infor表中operate_time中有2020-06-15日期的數(shù)據(jù):
  • 10.4.2 編寫Azkaban工作流程配置文件

  • 編寫azkaban.property文件:
  • azkaban-flow-version: 2.0
  • 編寫gmall.flow文件:
  • nodes:- name: mysql_to_hdfstype: commandconfig:command: /home/atguigu/bin/mysql_to_hdfs.sh all ${dt}- name: hdfs_to_ods_logtype: commandconfig:command: /home/atguigu/bin/hdfs_to_ods_log.sh ${dt}- name: hdfs_to_ods_dbtype: commanddependsOn: - mysql_to_hdfsconfig: command: /home/atguigu/bin/hdfs_to_ods_db.sh all ${dt}- name: ods_to_dim_dbtype: commanddependsOn: - hdfs_to_ods_dbconfig: command: /home/atguigu/bin/ods_to_dim_db.sh all ${dt}- name: ods_to_dwd_logtype: commanddependsOn: - hdfs_to_ods_logconfig: command: /home/atguigu/bin/ods_to_dwd_log.sh all ${dt}- name: ods_to_dwd_dbtype: commanddependsOn: - hdfs_to_ods_dbconfig: command: /home/atguigu/bin/ods_to_dwd_db.sh all ${dt}- name: dwd_to_dwstype: commanddependsOn:- ods_to_dim_db- ods_to_dwd_log- ods_to_dwd_dbconfig:command: /home/atguigu/bin/dwd_to_dws.sh all ${dt}- name: dws_to_dwttype: commanddependsOn:- dwd_to_dwsconfig:command: /home/atguigu/bin/dws_to_dwt.sh all ${dt}- name: dwt_to_adstype: commanddependsOn: - dws_to_dwtconfig:command: /home/atguigu/bin/dwt_to_ads.sh all ${dt}- name: hdfs_to_mysqltype: commanddependsOn:- dwt_to_adsconfig:command: /home/atguigu/bin/hdfs_to_mysql.sh all
  • 將azkaban.project、gmall.flow文件壓縮到一個(gè)zip文件gmall.zip(需是英文哦);
  • 在WebServer:http://hadoop102:8081/index 新建項(xiàng)目并上傳gmall.zip;
  • 點(diǎn)擊execute flow
  • 總結(jié)

    以上是生活随笔為你收集整理的数据仓库之电商数仓-- 3.4、电商数据仓库系统(ADS层)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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

    黄色三级在线 | 福利片免费看 | 国产成视频在线观看 | 欧美激情操| 亚洲精品视频观看 | 国产中文字幕视频在线观看 | 人人狠 | 国产一区二区三区在线免费观看 | 久久国产乱 | 亚洲日本va中文字幕 | 成人在线视频观看 | 香蕉视频在线观看免费 | 一区二区理论片 | 欧美中文字幕久久 | 日韩精品视频一二三 | 夜夜摸夜夜爽 | 五月天电影免费在线观看一区 | 国产在线91精品 | 日韩中文字幕一区 | 深爱激情亚洲 | 国产精品 国产精品 | 国产小视频在线播放 | 麻豆视传媒官网免费观看 | 91日韩精品视频 | 久久国产精品区 | 久久99精品久久久久久秒播蜜臀 | 国产a高清 | 在线播放日韩 | 国产精品黑丝在线观看 | 亚洲国产精品传媒在线观看 | 在线 国产 亚洲 欧美 | www.一区二区三区 | 国产999久久久 | 久久色网站 | 久久私人影院 | 2019中文| 天天操夜操视频 | 五月婷香| 91在线国内视频 | a一片一级 | 亚洲日韩中文字幕在线播放 | 日韩av不卡在线观看 | 91av影视| 四虎在线视频免费观看 | 中文字幕三区 | 天天干天天操天天做 | 草久视频在线观看 | 国产成人黄色网址 | 91看片淫黄大片在线播放 | 亚洲成人av在线 | 国产私拍在线 | 欧美成人h版 | 日韩成人免费在线 | 欧美精品黑人性xxxx | 国产精品久久久久久久7电影 | 久久久久久久久久久久久影院 | 人人澡人摸人人添学生av | 91正在播放 | 美女久久视频 | 国产色视频网站 | 在线观看免费国产小视频 | 日本性高潮视频 | 欧美网站黄色 | 婷婷综合电影 | 国产精品久久久久久久久久久久冷 | 又大又硬又黄又爽视频在线观看 | 最新影院 | 91久久一区二区 | 婷婷六月丁| 97成人精品视频在线观看 | 国产精品九九久久99视频 | 午夜性福利| 在线观看中文字幕视频 | 国产丝袜 | 伊人视频| 在线电影 一区 | 丝袜美腿亚洲综合 | 国产精品毛片久久久 | 久久亚洲热 | 96久久欧美麻豆网站 | 成人免费视频播放 | 国产午夜精品理论片在线 | 91av视频导航 | 成人精品一区二区三区中文字幕 | 97人人视频 | 91麻豆.com| 国产精品欧美久久久久三级 | 天天操天天拍 | 毛片无卡免费无播放器 | 99精品国产免费久久 | 亚洲欧美日韩国产精品一区午夜 | 色999精品 | 久久色中文字幕 | 97精品久久人人爽人人爽 | 在线观看一级片 | 在线免费观看国产 | 中文永久免费观看 | 国产精品igao视频网入口 | 国产精品久久久久永久免费观看 | 国产91精品一区二区麻豆网站 | 在线观看91 | 久久久福利视频 | 黄色午夜 | 一本一道久久a久久精品蜜桃 | 亚洲午夜久久久久久久久久久 | 婷婷久操 | 在线观看av麻豆 | 亚洲激情婷婷 | 亚洲欧美观看 | 在线草| 大型av综合网站 | 视频二区 | 午夜国产在线观看 | 伊人电影天堂 | 色综合色综合久久综合频道88 | 99免费观看视频 | 中文字幕国语官网在线视频 | 日韩理论片在线观看 | 玖玖玖精品 | 国产黄色特级片 | 深夜免费福利网站 | 一区二区在线不卡 | 午夜在线免费观看视频 | 97精品在线观看 | 五月激情丁香婷婷 | 九九视频在线播放 | 成人黄色在线 | 精品国产乱码久久久久久1区2匹 | 在线久热 | 丁香六月中文字幕 | 免费观看性生交 | 亚洲天堂精品视频 | 国产九九九九九 | 国内精品久久久久影院男同志 | 夜夜夜夜操 | 81精品国产乱码久久久久久 | 69人人 | 日韩性色 | 久久视频精品在线观看 | 99精品视频在线观看视频 | 92中文资源在线 | 精品免费久久 | 日韩欧美一区二区三区在线观看 | 国产精品成人在线观看 | 久久er99热精品一区二区三区 | 在线观看日本高清mv视频 | 久久噜噜少妇网站 | 国产精品福利在线播放 | 91精品久久久久久综合乱菊 | 亚洲精品国产综合99久久夜夜嗨 | 成年人视频免费在线 | 狠狠狠色丁香婷婷综合激情 | 久久一区国产 | 免费看成人片 | 精品久久久久久久久久久久 | 国产手机av在线 | 在线а√天堂中文官网 | 蜜臀av网址 | 色婷婷福利 | 天天色天天操天天爽 | av网站播放 | 一级一片免费观看 | 九九久 | 天天操天天爽天天干 | 久久亚洲美女 | 久久99精品波多结衣一区 | 国产精品黄网站在线观看 | www.香蕉视频 | 日韩精品中文字幕在线播放 | 西西4444www大胆无视频 | 美女国产免费 | 久久久久久久久综合 | 天天操月月操 | 国产精品久99| 国产亚洲欧美精品久久久久久 | 久久久久激情 | av电影一区二区 | 日韩3区| 日日干天天 | 99精品视频在线观看播放 | 玖玖在线资源 | 91精品免费在线观看 | 国产在线v | 日韩女同一区二区三区在线观看 | 国产视频2区 | 精品国产一区二区三区四区在线观看 | 中文av资源站| 天天爱天天射天天干天天 | 麻花豆传媒mv在线观看网站 | 啪啪av在线| av大全在线免费观看 | 特级黄色一级 | 九九九在线观看视频 | 国产夫妻av在线 | 久久综合激情 | 亚洲综合国产精品 | 一区二区三区日韩精品 | 久久久免费播放 | 色综合天天 | 又污又黄网站 | 亚洲做受高潮欧美裸体 | 日韩一级黄色av | 国产成人久久av免费高清密臂 | 久久色亚洲 | 国产一级在线免费观看 | 精品国产一区二区三区久久久久久 | av7777777 | www.久久色 | 欧美午夜理伦三级在线观看 | 中国一级片在线观看 | 丁香在线视频 | 欧美一级小视频 | 在线免费黄网站 | 久久99国产一区二区三区 | 欧美一级免费片 | 国产一区二区三区免费观看视频 | 高潮久久久久久久久 | 国产福利一区二区三区在线观看 | 91热爆在线观看 | 国产精品porn | 99视频在线观看免费 | 97精品国产91久久久久久 | 91禁在线观看 | 亚洲精品国产免费 | 中文字幕制服丝袜av久久 | 九九99 | 日韩网站免费观看 | 亚洲年轻女教师毛茸茸 | 99国内精品久久久久久久 | 欧美日韩色婷婷 | 中文在线a√在线 | 91视频91自拍 | 中文字幕成人网 | 国产欧美最新羞羞视频在线观看 | 就色干综合 | 91精品婷婷国产综合久久蝌蚪 | 天天躁天天躁天天躁婷 | 亚洲日本三级 | 超碰97网站| 在线 国产 亚洲 欧美 | 四虎成人精品永久免费av | www.色午夜,com | 日本视频不卡 | 在线观看一区二区精品 | 国产婷婷精品 | 在线看国产一区 | 日韩一级电影在线 | 91九色网站| 欧美日韩亚洲第一页 | 国产精彩视频一区二区 | 精品美女在线视频 | 狠狠色狠狠综合久久 | 欧美色综合天天久久综合精品 | av在线电影网站 | 波多野结衣小视频 | 国产 日韩 中文字幕 | 久久久久免费精品国产小说色大师 | 国产在线精品国自产拍影院 | 免费看的黄色 | 超碰人人做 | 日韩有码第一页 | 国产精品免费一区二区三区在线观看 | 美女黄网站视频免费 | 超碰在线9 | 久久不射电影院 | 日韩精品一区二区三区外面 | 国产最新在线观看 | 五月综合激情 | h网站免费在线观看 | 91丝袜美腿 | 日韩av不卡播放 | 在线观看视频色 | 毛片随便看 | 久久综合欧美精品亚洲一区 | 在线观看成人 | 国产欧美精品一区aⅴ影院 99视频国产精品免费观看 | 国语久久| 国产视频久 | 中文字幕在线视频一区二区 | 色午夜 | 天天干人人 | 久久成 | 国产精品成人免费一区久久羞羞 | 国产乱对白刺激视频不卡 | 国产不卡高清 | 中文字幕日韩一区二区三区不卡 | 丁香六月婷婷开心 | 亚洲精品国产精品国自产观看 | 国产91精品一区二区麻豆网站 | 91av视频在线观看 | 日韩专区中文字幕 | 天天射天天做 | 91网在线看| 亚洲另类久久 | 麻豆传媒视频观看 | 国产高清在线免费观看 | 99精品国产99久久久久久97 | 西西www4444大胆在线 | 成人黄色国产 | 国产特黄色片 | 亚洲一区二区视频在线播放 | 国产日韩在线观看一区 | 国产精品中文字幕av | 精品亚洲va在线va天堂资源站 | 啪啪av在线 | 成人一区二区在线 | 伊人久久电影网 | 激情大尺度视频 | 91九色蝌蚪视频 | 午夜精品一区二区三区在线视频 | 婷婷av电影 | 国产精品毛片一区二区三区 | 精品久久久久国产 | 日韩www在线 | 在线观看一级 | 免费在线精品视频 | 日韩免费在线观看 | 中文字幕中文字幕中文字幕 | 久久精品福利 | 激情综合网五月激情 | 日韩一区二区免费在线观看 | 在线免费视频一区 | 97超碰在线资源 | www.99av | 色成人亚洲网 | 五月亚洲| 麻豆视频在线播放 | 成年人免费看片 | 狠狠躁夜夜躁人人爽视频 | 亚洲精品久久久蜜桃 | av天天澡天天爽天天av | 色视频国产直接看 | 国产精品免费久久久久影院仙踪林 | 国产成人一区二区三区在线观看 | 久久99精品久久久久久久久久久久 | 欧美日韩国产精品一区 | 91欧美精品| 国产精品久久久精品 | 国产午夜精品视频 | 久久亚洲区 | 欧美污在线观看 | 国产精品不卡av | 日一日干一干 | 色网站在线 | 久久在线视频精品 | 66av99精品福利视频在线 | 久久艹国产视频 | 国产在线综合视频 | 国产玖玖在线 | 天天综合网~永久入口 | 国产精品入口久久 | 91看片一区二区三区 | 久久综合免费视频影院 | 午夜精品一区二区三区可下载 | 婷婷伊人五月 | 中国精品少妇 | 99国产精品一区 | 97超碰网| 亚洲一区日韩在线 | 久久久久久久久久久精 | 韩国一区二区av | 国产九色在线播放九色 | 中文字幕一区二区三区在线播放 | 国产精品一区二区视频 | 国产精品久久99综合免费观看尤物 | 久草视频播放 | 久色网 | 国产精品女同一区二区三区久久夜 | 久久999久久 | 91av视频| 国产中年夫妇高潮精品视频 | 天天爽天天做 | 男女日麻批| 911精品视频| 日日摸日日添夜夜爽97 | 丁香六月激情婷婷 | 久草视频中文在线 | 成在线播放| 国产免费一区二区三区网站免费 | 国产黄在线 | 日本久久成人 | 天天透天天插 | 欧美福利片在线观看 | 久久午夜电影网 | 久草视频在线新免费 | 国产原创91| 黄色网址国产 | 久草电影免费在线观看 | 96精品视频| 黄色免费网战 | 91成人免费观看视频 | 久久精品小视频 | 日韩网站一区二区 | 亚洲少妇影院 | 婷婷色婷婷 | 日韩av一区二区三区四区 | 日本二区三区在线 | 国产在线91精品 | 激情黄色av | 日日夜夜免费精品 | 久久亚洲综合国产精品99麻豆的功能介绍 | 在线观看免费视频你懂的 | 成人h动漫精品一区二 | 精品久久久久久久久久久院品网 | 狠狠干综合 | 天天操天天操天天 | 五月天激情视频在线观看 | 男女视频久久久 | 婷婷激情五月综合 | 国产日本亚洲 | 中文字幕91视频 | 色综合五月 | 日韩中文久久 | 99久久er热在这里只有精品15 | 国产精品视频最多的网站 | 久久伊人综合 | 国产精品久久久久久一区二区三区 | 丁香婷婷综合激情五月色 | 国产精品ⅴa有声小说 | 久久天 | 亚洲婷久久 | 999国产在线| 黄色av一区二区 | 久久国产女人 | 黄色av电影网 | 中文字幕一区二区三区久久蜜桃 | 久久久久久久久电影 | 精品久久久久久国产偷窥 | 免费看的黄网站软件 | 91免费试看| 国产精品第三页 | 精品国产黄色片 | 在线国产专区 | 夜夜夜夜猛噜噜噜噜噜初音未来 | 丁香激情综合久久伊人久久 | 日韩欧美在线第一页 | 欧美久久九九 | 国产视频精品免费 | 国产精品久久久久久一区二区三区 | 亚洲免费av电影 | 丁香激情五月婷婷 | 国产一级免费视频 | 一区二区精品国产 | 免费在线观看不卡av | 天天插天天狠 | 在线观看黄色大片 | 亚洲精品动漫在线 | 国产又黄又猛又粗 | 波多野结衣一区二区三区中文字幕 | 免费在线国产精品 | av高清在线观看 | 中文字幕日韩免费视频 | 自拍超碰在线 | 久久久国产日韩 | 日韩欧美精品一区 | 国产精品久久久电影 | 久久一区精品 | 九七在线视频 | 天天看天天操 | 超碰在线最新网址 | 天天干天天插伊人网 | 日韩伦理一区二区三区av在线 | 国产视频一区在线 | 99视频在线免费观看 | 国产亚洲成人精品 | 丰满少妇一级 | 开心激情五月婷婷 | 久草免费福利在线观看 | 日日干视频| 亚洲国产成人久久 | 国产精品18久久久久久久 | 五月婷婷丁香在线观看 | 国产美女无遮挡永久免费 | 视频在线播放国产 | 免费久久99精品国产 | 在线观看中文字幕网站 | 国产亚洲激情视频在线 | 久久久高清视频 | 亚洲国产精品推荐 | 成av在线| 久久精品综合视频 | 国产精品久久一区二区三区不卡 | 国产一级二级三级在线观看 | 1024手机基地在线观看 | 美女激情影院 | 久久久久久久久久网 | 久国产在线播放 | 国产成人三级 | 人人爽人人爽人人爽学生一级 | 久久激情五月婷婷 | 久久99精品久久只有精品 | 在线中文字母电影观看 | 视频在线观看亚洲 | 久久综合五月天婷婷伊人 | 黄网站app在线观看免费视频 | 99国产精品一区二区 | 国精产品999国精产品视频 | 亚洲精品短视频 | 日本一区二区高清不卡 | 鲁一鲁影院 | 99热手机在线观看 | 一区二区精品在线 | 黄色小说视频在线 | 91av在线不卡 | 国内三级在线观看 | 久草电影免费在线观看 | 九九在线精品视频 | a级国产毛片 | 天堂va欧美va亚洲va老司机 | 最近中文字幕国语免费高清6 | av片中文| 国产91在线看 | 中文字幕中文字幕中文字幕 | 国产成人精品免高潮在线观看 | 在线免费中文字幕 | 中文字幕亚洲综合久久五月天色无吗'' | 国产精品黄网站在线观看 | 波多野结衣电影久久 | 日韩在线观看电影 | 亚洲人成免费网站 | 五月婷婷中文 | 中文字幕中文字幕在线中文字幕三区 | 欧美日韩中| 日韩免费在线看 | 免费观看国产精品 | 午夜av色 | 日韩中文字幕亚洲一区二区va在线 | 91精品视频网站 | 日韩三级视频在线看 | 综合久久久久久久久 | 欧美成人黄色片 | 在线精品亚洲 | 日本护士撒尿xxxx18 | 中文字幕一区二区三区久久 | 成人免费视频视频在线观看 免费 | 在线视频18在线视频4k | 又色又爽又黄 | 亚洲成a人片在线观看中文 中文字幕在线视频第一页 狠狠色丁香婷婷综合 | 一级黄色在线免费观看 | 91大神在线观看视频 | 亚洲,播放| 在线观看国产日韩 | 美女很黄免费网站 | 久久男女视频 | 五月开心六月伊人色婷婷 | 久久视了 | 麻豆视频国产在线观看 | 国产精品美女视频网站 | 99av国产精品欲麻豆 | 国产成人精品999在线观看 | 亚洲国产精品日韩 | 正在播放国产91 | 一区二区不卡视频在线观看 | 亚洲精品国产精品久久99热 | 久久玖 | 国产精品黄网站在线观看 | 婷婷电影在线观看 | 98久9在线 | 免费 | 日韩欧美在线观看一区二区三区 | 91av在| 日韩在线观看一区二区 | 伊人天天干 | 精品一区二区三区在线播放 | 成人精品99 | 中文字幕在线观看免费观看 | 久久免费资源 | 欧美成人va| 国产美女视频网站 | 美女黄频在线观看 | 五月激情五月激情 | 人人讲 | 国产精成人品免费观看 | 中文字幕在线观看免费高清完整版 | 精品中文字幕在线播放 | 中日韩在线视频 | 久草在线免费看视频 | 日韩精品在线视频免费观看 | 欧美精品一区二区蜜臀亚洲 | 欧美一级免费片 | 狠狠色丁香久久婷婷综合_中 | 日韩在线观看你懂的 | 国产91精品久久久久 | 精品九九九九 | 日韩videos高潮hd| 午夜久久| av888av.com| 人人澡人人添人人爽一区二区 | 人人爱人人射 | 国产精品久久久久久久久久久免费 | 久久精视频 | 国产在线欧美在线 | 亚洲国产精品500在线观看 | 一色屋精品视频在线观看 | avlulu久久精品 | 99视频在线| 国产伦理一区二区三区 | 99视| 狠狠色2019综合网 | 日韩黄色大片在线观看 | 91亚洲免费| 久久综合五月天 | 国产亚洲精品综合一区91 | 国产手机视频在线播放 | 成人全视频免费观看在线看 | 欧美孕妇与黑人孕交 | 韩国在线一区 | 久草免费在线 | 亚洲性少妇性猛交wwww乱大交 | 国产成人精品区 | 亚洲精品xx| 亚洲激情一区二区三区 | 精品久久久久久久久久久久久久久久久久 | 丁香综合av | av天天草| 亚洲精品视频第一页 | 国产日韩欧美在线看 | 欧美日韩免费在线视频 | 国产美女免费看 | 欧美一区在线观看视频 | 91porny九色在线播放 | 狠狠操导航 | 久久不射电影院 | 最近日本韩国中文字幕 | 久久极品 | 欧美最爽乱淫视频播放 | 久久呀| 狠狠干干 | 国产精品国产三级国产aⅴ入口 | 日p在线观看 | 国产精品正在播放 | 国产亚洲成av人片在线观看桃 | 人人爽人人香蕉 | 国产精品网在线观看 | 精品在线一区二区 | 亚洲激情综合网 | 狠日日| 亚洲精品自在在线观看 | 天天操天天操天天干 | 久久国产精品精品国产色婷婷 | 免费观看的av网站 | 国产精品大全 | 精品国产诱惑 | 久久九九九九 | 一区二区三区在线电影 | 日韩有码专区 | 午夜黄色一级片 | 中文字幕亚洲精品日韩 | 天天爱天天干天天爽 | 国产中文字幕在线看 | 亚洲污视频 | 久久国产精品二国产精品中国洋人 | 成人网在线免费视频 | 91免费在线看片 | 国语精品免费视频 | 美女视频黄的免费的 | 久久国产精品二国产精品中国洋人 | 国产黄色一级片在线 | 免费三级a | 婷婷色在线观看 | 久久精品亚洲综合专区 | 麻豆传媒一区二区 | 免费看的黄色的网站 | av中文字幕在线免费观看 | 国产免费黄视频在线观看 | 国产精品毛片一区二区在线 | 国产中文a| 国产精品免费视频一区二区 | 国产色视频一区 | 在线观影网站 | 天天色天天艹 | 日韩xxx视频 | 久久精品永久免费 | 91成人亚洲 | 亚洲成人免费在线 | 在线 国产 日韩 | 岛国av在线免费 | 亚洲综合黄色 | 色婷婷福利 | 四虎影视成人 | 亚洲伦理电影在线 | 欧美精品乱码99久久影院 | 久久精品中文字幕少妇 | 全久久久久久久久久久电影 | 久久在线免费观看 | 人人爽人人爽人人片av免 | 九九免费在线看完整版 | 欧美成人手机版 | 欧美成人精品欧美一级乱黄 | 在线视频亚洲 | 免费99精品国产自在在线 | 日韩精品一卡 | 日本在线视频网址 | 人人爽人人爽人人爽学生一级 | 亚洲成人免费 | 欧美国产视频在线 | 久久在线看 | 日韩成人精品在线观看 | 午夜视频在线观看一区二区三区 | 久久久久久久久久久久亚洲 | 久久视影 | 免费在线一区二区 | 久久久人人爽 | 人人爽人人射 | 久草视频网 | 久久精品精品电影网 | 一区三区在线欧 | 国产精品99视频 | 91重口视频| 最近日本韩国中文字幕 | 9797在线看片亚洲精品 | 成人精品视频久久久久 | 精品国产一区二区三区久久久久久 | 丝袜美腿在线播放 | 91网址在线看 | 亚洲狠狠操 | 午夜久久电影网 | 伊人婷婷激情 | 亚洲综合色站 | 国产中的精品av小宝探花 | 麻豆视频免费 | 天天综合天天做 | 99久久精品国产欧美主题曲 | 99精品一区二区 | 激情综合五月婷婷 | 亚洲美女免费视频 | 亚洲第一伊人 | 天天操天天拍 | 国产精品亚洲片夜色在线 | 九九精品视频在线 | 99情趣网视频 | 九色91福利| 久久夜靖品 | 国产精品入口久久 | 中文字幕亚洲高清 | 91中文字幕一区 | 国产一卡二卡在线 | 亚洲免费精品视频 | 国产日韩欧美在线看 | av网站大全免费 | 国产成人性色生活片 | 97成人精品视频在线观看 | 亚洲理论在线 | 午夜久久久影院 | 成人三级黄色 | 久久久久国产一区二区三区 | 九九热视频在线播放 | 国产在线黄色 | 婷婷丁香在线观看 | 在线免费观看视频一区 | 国产欧美精品一区二区三区 | 国产在线精品观看 | 天天舔天天射天天操 | 91亚洲精品久久久蜜桃借种 | 91桃色在线观看视频 | 精品久久久久久久久久 | 亚洲三级影院 | 免费看片亚洲 | 超碰人人干人人 | 久久精品成人热国产成 | 欧美精品免费一区二区 | 欧美日韩二区在线 | 免费看十八岁美女 | 偷拍久久久 | 在线三级av| 黄色午夜网站 | 成人久久久久久久久久 | 国产成人a亚洲精品 | 天天操天天干天天爱 | 亚洲精品在线观看av | 久久免费视频1 | 婷婷视频 | 伊人中文字幕在线 | 九九视频一区 | 最近免费在线观看 | av九九九| 中文字幕在线播放一区二区 | 最新国产精品拍自在线播放 | 亚洲电影久久久 | 69久久夜色精品国产69 | 99av在线视频| 国产精品k频道 | 天天射射天天 | 91亚洲在线 | 成人一级视频在线观看 | www视频在线免费观看 | 91av在线播放| 三上悠亚一区二区在线观看 | 免费色黄 | 久久伊人精品一区二区三区 | 97视频在线免费播放 | 奇米777777| 九九热久久久 | 91高清一区 | 在线看成人片 | 久久99精品国产91久久来源 | 亚洲2019精品 | 免费黄色特级片 | 91大神精品视频在线观看 | 最近日韩免费视频 | 欧美色噜噜 | 久久社区视频 | 国产精品你懂的在线观看 | 成年人免费在线播放 | 欧美日韩啪啪 | 国产精品一区在线观看你懂的 | 国产一区高清在线 | 97国产超碰在线 | 日本女人的性生活视频 | 久久福利小视频 | 国产一级大片在线观看 | 国产一级一片免费播放放 | 成人va在线观看 | a黄色影院 | 国产精品乱码高清在线看 | 日日夜夜天天久久 | 偷拍视频一区 | 成年人视频免费在线 | 五月天综合婷婷 | 久久精品一区八戒影视 | 国产精品成人自产拍在线观看 | 国内久久久久 | 毛片视频电影 | 亚洲精品在线免费观看视频 | 欧美性网站 | 在线观看电影av | 欧美精品做受xxx性少妇 | 亚洲黄色激情小说 | 在线免费三级 | 欧美成年性 | www国产亚洲精品久久麻豆 | 色网站国产精品 | 成人精品一区二区三区电影免费 | 97成人免费视频 | 久草免费资源 | 久久成人国产 | 久热香蕉视频 | 日韩二区在线观看 | 国产精品麻豆果冻传媒在线播放 | 亚洲极色| 色wwww| 3d黄动漫免费看 | 午夜狠狠干 | 成人av在线播放网站 | 天天综合网 天天 | 夜夜夜精品 | 婷婷av电影 | 免费观看的黄色 | 久久综合婷婷国产二区高清 | 婷婷播播网| 国产精品美女久久久久久 | 国产精品一区二区av日韩在线 | 九九久久精品 | 黄色一级在线免费观看 | 一区二区欧美激情 | 国产色女人 | 中文字幕在线精品 | 91高清完整版在线观看 | 在线 国产一区 | 97视频在线观看成人 | av线上免费看 | 91精品秘密在线观看 | 久久精品理论 | 日日插日日干 | 国产成人精品福利 | 成人黄色电影在线播放 | 蜜桃视频在线视频 | 精品视频成人 | 激情五月五月婷婷 | 欧美在线日韩在线 | 亚洲综合欧美激情 | 国产精品一区二区视频 | 综合激情网... | 一级片黄色片网站 | 97超碰人人模人人人爽人人爱 | 黄色三级久久 | 人人爽久久久噜噜噜电影 | 国产精品国产亚洲精品看不卡 | 六月丁香在线观看 | 一区二区三区电影 | 久久九九国产视频 | 三级av中文字幕 | 日韩成人精品一区二区三区 | 国产成人av综合色 | 日韩免费在线一区 | 三上悠亚一区二区在线观看 | 中文字幕在线观看一区 | 精品国产一区二区三区久久 | 国产亚洲精品久久网站 | 日韩中文字幕免费在线观看 | 欧美人牲 | 免费网站在线观看成人 | 成人动漫精品一区二区 | 中文字幕视频观看 | 国产精品成人国产乱 | 久久久精品网站 | 日本大尺码专区mv | 91久色蝌蚪 | 久久99中文字幕 | 91精品久久久久久粉嫩 | 久久免费视频在线观看 | 久久久国产精品电影 | 国产精品高清在线观看 | 国产美女网站视频 | 国产精品av电影 | 九九免费视频 | 国产视频不卡一区 | 欧洲一区二区在线观看 | 日韩精品无| 日韩精品一区二区电影 | 中文在线8资源库 | 日韩精品一区二区在线观看 | 久久精品波多野结衣 | 欧美成人tv | 亚洲精品动漫成人3d无尽在线 | 亚洲丝袜一区二区 | 91精品国自产在线观看 | 2021国产精品 | 国产精品尤物视频 | 中文在线免费视频 | 国产精品乱码久久久 | 91日韩精品一区 | 久草在线官网 | 国产亚洲人 | 久久久久国产精品视频 | 成人av电影免费观看 | 亚洲精品国精品久久99热一 | 狠狠操天天射 | 在线日韩视频 | 久久字幕 | 久久成人精品电影 | 亚洲精品视频在线观看网站 | 中文字幕日韩有码 | x99av成人免费 | 丁香婷婷色综合亚洲电影 | 国产精品欧美久久久久无广告 | 国产手机视频在线 | 精品视频资源站 | 免费在线色 | 96精品视频 | 午夜在线观看影院 | 在线观看播放av | 激情综合色图 | 中文视频在线 | 欧美日韩国产精品一区二区 | 91色吧| 国产色拍拍拍拍在线精品 | 亚洲精品在线网站 | 人人插人人艹 | 2021国产视频 | 少妇高潮流白浆在线观看 | 日韩电影在线一区 | 中文字幕中文字幕在线一区 | 伊人成人精品 | 草久久久久久 | 91精品网站在线观看 | 美女亚洲精品 | 日韩久久久久久久久久 | 欧美日韩国产精品一区二区三区 | 色五月成人 | 久久精品99精品国产香蕉 | av福利在线导航 | 日韩视频专区 | 婷婷精品国产一区二区三区日韩 | 久久久久久久久久久免费视频 | 少妇bbb搡bbbb搡bbbb | 国产精品99免费看 | 久草久热 | 91九色自拍 | 国产精品人人做人人爽人人添 | 国产精品欧美精品 | 日本激情视频中文字幕 | 麻豆你懂的| av一区二区三区在线播放 | 国产美女精品视频 | 欧美激情精品 | av经典在线| 欧美一二三视频 | 91九色国产 | 97成人在线观看视频 | 亚洲精品小区久久久久久 | 免费网站看av片 | 中文字幕在线观看第三页 | 91丨精品丨蝌蚪丨白丝jk | 中文在线a天堂 | 激情综合色图 | 国产永久免费高清在线观看视频 | 一区二区中文字幕在线 | 在线香蕉视频 | 精选久久| 在线 国产 亚洲 欧美 | 亚洲综合精品视频 | 黄色的片子| 69夜色精品国产69乱 | 色99在线 | 欧美不卡视频在线 | 欧美日韩一区二区三区不卡 | av黄网站| 久久久影院官网 |