亚洲有码Av一区二区三区_国产高清啪啪免费视频_69色视频国产_国产成人人人爆出白浆_国产精品自在线拍国_一本久久伊人热热精品无码_午夜性刺激在线看免费带字幕_助力高品质欧美狂喷水_亚洲精品日韩无码_精品无码一区二区三区蜜臀_麻豆高清国产AV_熟妇人素无码中文字幕_亚洲a级片在线观看_国产欧美日韩三区_99国产成人高清在线观看

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運營的一線實戰(zhàn)洞察。

Hive SQL連續(xù)登錄天數(shù)計算:開窗函數(shù)LAG與ROW_NUMBER實戰(zhàn)

Hive SQL連續(xù)登錄天數(shù)計算:開窗函數(shù)LAG與ROW_NUMBER實戰(zhàn) 1. 項目需求拆解連續(xù)登錄到底在算什么先說結(jié)論這個需求在數(shù)據(jù)分析里幾乎屬于“必考題型”它本質(zhì)是兩個問題第一個問題一個用戶歷史上最多連續(xù)多少天登錄過比如連續(xù)3天、連續(xù)7天中間斷開一天就重新計數(shù)。第二個問題用戶每次斷開后重新登錄要生成一個從1開始的序號讓后續(xù)統(tǒng)計能區(qū)分“第幾段連續(xù)區(qū)間”。比如用戶1月1日、1月2日登錄1月3日沒登錄1月4日又登錄那么前兩天的序號是1、2后一天的序號重新從1開始。這兩件事聽起來簡單但真正落到 Hive SQL 里需要想清楚“連續(xù)”的數(shù)學(xué)定義、日期去重、跨天跨月邊界以及 Hive 特有的并行和字段處理細節(jié)。我在實際項目中接過不少類似需求有的要算連續(xù)簽到、有的要算商家連續(xù)營業(yè)天數(shù)、有的要算用戶活躍連續(xù)性底層邏輯完全一致。只要把核心方法吃透任何連續(xù)性問題都能直接套。這個方案適合誰參考一類是剛接觸 Hive 開窗函數(shù)的人另一類是已經(jīng)寫了一些 SQL 但總覺得邏輯繞不清的人。我會從最基礎(chǔ)的行文思路上講把每一步拆開連 SQL 里每一步在干什么都解釋清楚最后給出完整可復(fù)制的實現(xiàn)。2. 前置知識Hive 開窗函數(shù)和下鉆的邏輯基礎(chǔ)2.1 為什么計算連續(xù)性問題必須用開窗函數(shù)先明確一個痛點普通 GROUP BY 只能做聚合算不出“連續(xù)”。因為你不知道某一行是不是和前一行日期連續(xù)而有了開窗函數(shù)后每一行都能看到它前一行、后一行的對應(yīng)字段。這就像排隊點名你不僅知道自己是誰還能看到排在自己前一位的人是誰一下就能判斷中間有沒有缺人。Hive 里常用的開窗函數(shù)有 ROW_NUMBER()、LAG()、LEAD()、SUM() OVER() 等。計算連續(xù)登錄天數(shù)的核心套路有兩個基于 LAG() 判斷與前一行是否連續(xù)再給斷開處打標(biāo)記基于日期減去行號的差值分組把連續(xù)的行歸到同一個組里。這里要特別提醒不要用自關(guān)聯(lián)去判斷連續(xù)性。數(shù)據(jù)量一上來自關(guān)聯(lián)的性能和復(fù)雜度都不可控而且 SQL 寫出來很難維護。開窗函數(shù)的方式幾乎是固定的性能和可讀性都最好。2.2 日期去重很多連續(xù)性算錯的第一步登錄記錄表可能一行一天也可能同一人同一天有很多條記錄比如用戶一天內(nèi)多次打開 App每個事件都落了一條日志。如果不去重1月1日有三條記錄就會被錯誤地認為是連續(xù)三天。所以在計算之前必須對登錄日期做去重才能進入“連續(xù)日期序列”的下一步。去重標(biāo)準寫法SELECT DISTINCT user_id, login_date FROM login_log;如果你用的是 SparkSQL也可以用 GROUP BY user_id, login_date效果一樣。這個操作看起來簡單但漏掉這一步后面全盤皆輸。2.3 日期格式與日期相減的攔路問題另一個常見坑是日期并不是標(biāo)準日期類型。有的是字符串20250101有的是y-M-d格式有的是帶時間戳的 2025-01-01 12:34:56。做日期差之前必須統(tǒng)一為標(biāo)準日期類型。Hive 里常用的日期函數(shù)to_date(字段)把時間字符串轉(zhuǎn)成日期格式date_sub(日期, n)日期往前推n天datediff(日期1, 日期2)返回日期1減日期2的天數(shù)regexp_replace把 20250101 轉(zhuǎn)成 2025-01-01寫法為 regexp_replace(dt, (\d{4})(\d{2})(\d{2}), $1-$2-$3)我見過很多同學(xué)在測試環(huán)境日期格式正常生產(chǎn)環(huán)境因為日期字段帶了時分秒導(dǎo)致連續(xù)判斷全部失效。所以第一步必須做數(shù)據(jù)探查看清楚日期字段的真實類型和格式。3. 核心方法一基于 LAG 和分組標(biāo)記實現(xiàn)最大連續(xù)登錄天數(shù)3.1 思路拆解怎么定義“同一段連續(xù)區(qū)間”假設(shè)有這樣一個用戶的登錄日期序列2025-01-01 2025-01-02 2025-01-03 2025-01-05 2025-01-06可以看到1月1日到1月3日是連續(xù)的之后斷了1月5日到1月6日又是連續(xù)的。我們需要讓 SQL 自己識別出這兩段區(qū)間并給每段區(qū)間一個組編號。識別斷點的思路如果當(dāng)前行的日期減去它上一行的日期結(jié)果大于1說明上一行和當(dāng)前行之間不連續(xù)當(dāng)前行就是一段新區(qū)間的起點。具體實現(xiàn)先用 LAG(login_date, 1, NULL) OVER (PARTITION BY user_id ORDER BY login_date) 拿到前一行日期。然后判斷 datediff(當(dāng)前日期, 前一行日期) 是否等于1。如果不等于1說明當(dāng)前行是新一段連續(xù)區(qū)間的開頭標(biāo)記為1否則標(biāo)記為0。有了標(biāo)記之后再用 SUM(標(biāo)記) OVER (PARTITION BY user_id ORDER BY login_date ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) 做累加。這個累加結(jié)果就是分組編號。因為新區(qū)間起點為1累加后會把后續(xù)所有行都歸到同一個段數(shù)字下直到下一個斷點出現(xiàn)。拿上面的例子走一遍登錄日期 前一日 是否斷點 累加和 2025-01-01 NULL 1 1 2025-01-02 2025-01-01 0 1 2025-01-03 2025-01-02 0 1 2025-01-05 2025-01-03 1 2 2025-01-06 2025-01-05 0 2可見前三天分組為1后兩天分組為2分段完全正確。3.2 完整 SQL直接能跑的 Hive 腳本下面給出一套完整可用的 Hive SQL。假設(shè)登錄日志表名為 login_log字段為 user_id、login_datetime可能有多條重復(fù)日期也可能有時間戳。第一步做清洗去重第二步算分組第三步按組聚合算出每次連續(xù)天數(shù)第四步取最大。WITH login_dedup AS ( SELECT user_id, to_date(login_datetime) AS login_date FROM login_log GROUP BY user_id, to_date(login_datetime) ), login_group AS ( SELECT user_id, login_date, CASE WHEN datediff(login_date, LAG(login_date) OVER (PARTITION BY user_id ORDER BY login_date)) 1 THEN 0 ELSE 1 END AS is_new_group_start, LAG(login_date) OVER (PARTITION BY user_id ORDER BY login_date) AS prev_login_date FROM login_dedup ), login_with_group_id AS ( SELECT user_id, login_date, SUM(is_new_group_start) OVER (PARTITION BY user_id ORDER BY login_date) AS group_id FROM login_group ), login_duration AS ( SELECT user_id, group_id, MIN(login_date) AS start_date, MAX(login_date) AS end_date, COUNT(*) AS continuous_days FROM login_with_group_id GROUP BY user_id, group_id ) SELECT user_id, MAX(continuous_days) AS max_continuous_days FROM login_duration GROUP BY user_id;如果想把最大連續(xù)登錄天數(shù)對應(yīng)的起止日期也一起帶出來可以在最后一步用排序或結(jié)構(gòu)體。常見做法是把每段連續(xù)的天數(shù)、開始日期、結(jié)束日期都聚合到一個 map 中再取天數(shù)最大的那一個。但實際業(yè)務(wù)中大多數(shù)只要求一個數(shù)字所以上面這個 SQL 已經(jīng)足夠。3.3 為什么寫 CASE 而不是直接 LAG 減 1有同學(xué)會問既然 LAG 能拿到前一日日期能不能直接用一個字段標(biāo)記“是否連續(xù)”然后分組我給你一個反面示例-- 錯誤寫法示意 if(datediff(login_date, lag_date)1, group_id, group_id1)這樣寫的問題在于每一行的 group_id 都依賴前一行計算完的結(jié)果而 SQL 開窗函數(shù)中不能以這種方式迭代賦值。正確做法是把“是否新組”做成0/1的獨立標(biāo)記再通過 SUM 累加生成組號。這是 SQL 實現(xiàn)連續(xù)分組的經(jīng)典范式理解了這個后面很多問題都能解決。另外要注意 LAG 的第一個參數(shù)是列名第二個參數(shù)是偏移量第三個參數(shù)是默認值。第三個參數(shù)不寫的話默認就是 NULL。這里我們故意不寫因為第一行的前一日是 NULLdatediff(NULL) 結(jié)果是 NULLCASE 的判斷條件不成立會走 ELSE 分支得到1正好符合“第一行作為新起點”的語義。3.4 跨年、跨月、時區(qū)問題一并處理連續(xù)登錄的日期可能跨年比如 12月31日 到 1月1日。只要日期類型正確、datediff 直接用日期相減跨年不是問題Hive 的日期函數(shù)內(nèi)部會處理好絕對天數(shù)差。真正要注意的是時區(qū)問題。如果日志里的登錄時間是 UTC而業(yè)務(wù)期望的是北京時間那么直接 to_date 會使得部分用戶晚上登錄被算到前一天。比如 UTC 時間 1月1日16點北京時間已經(jīng)是1月2日0點但 to_date 后還是1月1日。這在計算連續(xù)登錄次數(shù)時會造成偏差。穩(wěn)妥的做法是在清洗層統(tǒng)一做時區(qū)轉(zhuǎn)換再 to_dateto_date(from_utc_timestamp(login_datetime, GMT8)) AS login_date具體時區(qū)名要按集群支持情況調(diào)整。如果你們公司日志埋點本身就統(tǒng)一用東八區(qū)那就不存在這個問題但建議每個項目都確認一次別想當(dāng)然。4. 核心方法二斷連后重新編號連續(xù)序號4.1 業(yè)務(wù)場景什么叫連續(xù)序號“連續(xù)序號”本質(zhì)是給用戶每一段連續(xù)登錄區(qū)間內(nèi)部的行從1、2、3……依次編號一旦登錄日期斷開則重新從1開始。也就是user_id login_date seq A 2025-01-01 1 A 2025-01-02 2 A 2025-01-03 3 A 2025-01-05 1 A 2025-01-06 2這個序號在很多場景下有用比如判斷用戶是否連續(xù)登錄第7天直接取 seq7 的記錄統(tǒng)計用戶有多少次連續(xù)3天以上的活躍期可以先按 seq 判斷生成“連續(xù)簽到獎勵”報表比如第幾段連續(xù)簽到的第幾天。如果讓排序字段直接 ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY login_date)得到的將是全量序號 1、2、3、4、5而不是在斷點重置的序號。所以必須先對連續(xù)區(qū)間分組再在每組內(nèi)做編號。4.2 實現(xiàn)思路先分組再編號分組的方法和上一節(jié)完全一樣先用 LAG 判斷斷點再用 SUM(0/1) 累加成 group_id。之后組內(nèi)排序編號就非常簡單ROW_NUMBER() OVER (PARTITION BY user_id, group_id ORDER BY login_date) AS seq注意這里 PARTITION BY 是 user_id 和 group_id 兩個字段的組合。group_id 在同一個用戶內(nèi)不同連續(xù)區(qū)間取值不同所以可以準確地把每一段連續(xù)區(qū)間分出來。4.3 完整 SQL連續(xù)序號生成WITH login_dedup AS ( SELECT user_id, to_date(login_datetime) AS login_date FROM login_log GROUP BY user_id, to_date(login_datetime) ), login_with_flag AS ( SELECT user_id, login_date, CASE WHEN LAG(login_date) OVER (PARTITION BY user_id ORDER BY login_date) IS NULL THEN 1 WHEN datediff(login_date, LAG(login_date) OVER (PARTITION BY user_id ORDER BY login_date)) 1 THEN 0 ELSE 1 END AS is_new_start FROM login_dedup ), login_with_group AS ( SELECT user_id, login_date, SUM(is_new_start) OVER (PARTITION BY user_id ORDER BY login_date) AS group_id FROM login_with_flag ) SELECT user_id, login_date, ROW_NUMBER() OVER (PARTITION BY user_id, group_id ORDER BY login_date) AS seq FROM login_with_group ORDER BY user_id, login_date;這段 SQL 把1月1日、1月2日、1月3日編為1、2、31月5日因為斷點形成新組所以重新從1開始。實際運行結(jié)果和預(yù)期完全一致。4.4 小心重復(fù)日期導(dǎo)致的組內(nèi)編號錯亂上面已經(jīng)做了 user_id login_date 去重所以不會出現(xiàn)同一天多條記錄。但如果去重沒做同一登錄日期會出現(xiàn)多條相同日期記錄組內(nèi) ROW_NUMBER 會給他們編出 1、2、3看起來就像連續(xù)多天其實是誤報。還有一個隱蔽細節(jié)如果登錄時間字段是帶時分秒的直接用 to_date 后再去重是對的但如果你用的是原始時間戳字段去做 LAG 比較比如直接 LAG(login_datetime)則同一天的兩次登錄會因為時間不同而判定為斷點導(dǎo)致連續(xù)區(qū)間被錯誤切分。所以全程必須使用 date 類型的字段同一標(biāo)準從一而終。5. 兩個需求合體同時輸出最大連續(xù)天數(shù)和斷連序號5.1 一條 SQL 搞定兩個指標(biāo)的建模邏輯實際業(yè)務(wù)中經(jīng)常需要同時輸出兩種信息一個是每個人最大的連續(xù)登錄天數(shù)一個是每次登錄對應(yīng)的第幾天序號。這兩個需求的前半部分完全一致都是“去重 → 打斷點標(biāo)記 → 生成 group_id”。我強烈建議不要寫兩遍重復(fù)代碼而是把公共部分放在 WITH 子句里一步到位。這也是 Hive 開發(fā)中非常重要的習(xí)慣先做一個高質(zhì)量的明細模型再從明細模型派生不同的聚合結(jié)果。用代碼來表達就是公共部分得到 user_id、login_date、group_id基于公共部分用 ROW_NUMBER 生成組內(nèi)序號基于公共部分按 user_id、group_id 聚合求 COUNT 得到每段連續(xù)天數(shù)再按 user_id 聚合取 MAX 得到最大連續(xù)天數(shù)。如果希望最后一張表既包含明細又包含每人最大連續(xù)天數(shù)一種簡單做法是先把明細和聚合算好再做 JOIN。下面給出完整的合體 SQL。5.2 完整合體 SQL可直接復(fù)制WITH login_dedup AS ( SELECT user_id, to_date(login_datetime) AS login_date FROM login_log GROUP BY user_id, to_date(login_datetime) ), login_with_group AS ( SELECT user_id, login_date, SUM(CASE WHEN LAG(login_date) OVER (PARTITION BY user_id ORDER BY login_date) IS NULL OR datediff( login_date, LAG(login_date) OVER (PARTITION BY user_id ORDER BY login_date) ) 1 THEN 1 ELSE 0 END) OVER (PARTITION BY user_id ORDER BY login_date) AS group_id FROM login_dedup ), login_detail_with_seq AS ( SELECT user_id, login_date, group_id, ROW_NUMBER() OVER (PARTITION BY user_id, group_id ORDER BY login_date) AS seq FROM login_with_group ), login_duration AS ( SELECT user_id, group_id, COUNT(*) AS continuous_days FROM login_with_group GROUP BY user_id, group_id ), user_max_duration AS ( SELECT user_id, MAX(continuous_days) AS max_continuous_days FROM login_duration GROUP BY user_id ) SELECT d.user_id, d.login_date, d.group_id, d.seq, m.max_continuous_days FROM login_detail_with_seq d JOIN user_max_duration m ON d.user_id m.user_id ORDER BY d.user_id, d.login_date;輸出結(jié)果示例user_id login_date group_id seq max_continuous_days A 2025-01-01 1 1 3 A 2025-01-02 1 2 3 A 2025-01-03 1 3 3 A 2025-01-05 2 1 3 A 2025-01-06 2 2 3這樣用戶在明細每一行都能看到“我現(xiàn)在第幾天”也能看到“歷史最多連續(xù)幾天”對后續(xù)報表分析非常友好。5.3 性能優(yōu)化減少重復(fù) LAG 計算上面的 SQL 在 login_with_group 子句里CASE 中調(diào)用了兩次 LAG。雖然邏輯上不報錯但 Hive 執(zhí)行時會對每一行計算兩次 LAG生產(chǎn)環(huán)境大表下不夠優(yōu)雅。更穩(wěn)妥的做法是先用 LAG 把上一行日期計算出來再做判斷l(xiāng)ogin_with_prev AS ( SELECT user_id, login_date, LAG(login_date) OVER (PARTITION BY user_id ORDER BY login_date) AS prev_date FROM login_dedup ), login_with_group AS ( SELECT user_id, login_date, SUM(CASE WHEN prev_date IS NULL OR datediff(login_date, prev_date) 1 THEN 1 ELSE 0 END) OVER (PARTITION BY user_id ORDER BY login_date) AS group_id FROM login_with_prev )這個寫法更清晰每行計算一次 LAG整體性能更好。我第一次寫的時候直接套復(fù)雜 CASE數(shù)據(jù)量500萬行跑了很久改成上面的寫法之后快了一倍多。后來排查發(fā)現(xiàn)有些引擎對重復(fù)開窗函數(shù)識別不全確實會真實計算兩次。6. 常用陷阱與真實排查記錄6.1 表里存在未來時間戳導(dǎo)致連續(xù)天數(shù)虛高有次遇到一個項目某用戶的最大連續(xù)登錄天數(shù)突然從15天跳到了40天直覺上不對勁。查數(shù)據(jù)后發(fā)現(xiàn)該用戶有幾條登錄時間來自用戶本地設(shè)備時間改過系統(tǒng)時間后產(chǎn)生了未來時間戳。這類數(shù)據(jù)如果不加過濾會把未來日期也算進登錄序列導(dǎo)致連續(xù)天數(shù)被錯誤拉長。解決方案很簡單在清洗層增加過濾條件保留登錄日期小于等于當(dāng)前日期或業(yè)務(wù)允許的最大日期。WHERE to_date(login_datetime) current_date()如果是離線數(shù)倉因為跑批有延遲也可以統(tǒng)一對時間做上限控制。這一條原本不在需求里但實際開發(fā)中必須考慮臟數(shù)據(jù)對連續(xù)計算的影響。6.2 用戶在多設(shè)備登錄導(dǎo)致同一天多次記錄很多業(yè)務(wù)場景是一個賬號綁定多個設(shè)備一天內(nèi)可能在手機、平板、電腦上都有登錄事件。如果不做去重直接計算會得出user_id login_dt A 2025-01-01 A 2025-01-01 A 2025-01-01然后按 login_date 排序這里因為有三條同日期記錄LAG 判斷 datediff 為0因為不等于1所以第二個和第三個都被標(biāo)記為新組起點得出用戶有三次“1天連續(xù)登錄”的假象。正確去重方式SELECT user_id, MAX(login_date) AS login_date FROM ... GROUP BY user_id, login_date;這里用 MAX 是為了兼容可能有空值的情況其實DISTINCT 就足夠。我在實際中發(fā)現(xiàn) DISTINCT 在 Hive 某些版本對大量字段會有 shuffle 性能問題但只針對兩三個字段沒毛病。6.3 斷點標(biāo)記中的 NULL 陷阱很多人在寫斷點判斷時只判斷 datediff 是否等于1忽略了第一行的前一日期是 NULL。如果寫成CASE WHEN datediff(login_date, LAG(login_date) OVER (...)) 1 THEN 0 ELSE 1 END第一行因為 datediff 結(jié)果為 NULL判斷結(jié)果為 NULL走到 ELSE 得到1恰恰也是正確結(jié)果。所以這個寫法在實際運行中是對的。但為了可讀性我還是建議在 NULL 判斷上明確寫出來避免后續(xù)維護的人閱讀困難CASE WHEN LAG(login_date) OVER (...) IS NULL THEN 1 WHEN datediff(login_date, LAG(login_date) OVER (...)) 1 THEN 0 ELSE 1 END6.4 大表下開窗排序帶來的數(shù)據(jù)傾斜PARTITION BY user_id 時會按用戶分桶如果少數(shù)超級用戶登錄記錄特別多會導(dǎo)致單個 reducer 處理量過大形成數(shù)據(jù)傾斜。常用優(yōu)化手段有三個設(shè)置 hive.optimize.sort.dynamic.partition 等參數(shù)但有時效果有限按用戶維度判斷是否為大用戶單獨分桶處理再 union 回主流程在清洗層把明顯異常的超高頻用戶比如機器人賬號過濾掉或者按業(yè)務(wù)口徑剔除以秒級頻率登錄的異常數(shù)據(jù)。如果只是離線報表且數(shù)據(jù)量在億級以內(nèi)通常并行度調(diào)一下就能解決問題。我遇到實際傾斜時會用以下參數(shù)先試試SET hive.exec.reducers.bytes.per.reducer256000000; SET hive.exec.paralleltrue;不過每個集群版本不一樣參數(shù)名可能會有差異要根據(jù)實際環(huán)境確認。6.5 對連續(xù)天數(shù)的“自然日”定義要保持一致業(yè)務(wù)上“連續(xù)登錄7天”是不是一定要7個自然日有些產(chǎn)品的連續(xù)簽到規(guī)則是“任意7天內(nèi)有登錄即算連續(xù)”這種口徑就不能用上面的方法需要改成滾動窗口統(tǒng)計。例如用SUM(1) OVER (PARTITION BY user_id ORDER BY login_date RANGE BETWEEN INTERVAL 6 DAYS PRECEDING AND CURRENT ROW)或者先展開日期再計算。實際中業(yè)務(wù)方說“連續(xù)”通常默認自然日連續(xù)但你要主動確認一次。我吃過虧開發(fā)完后業(yè)務(wù)說他們想要的是“任意7天內(nèi)登錄過5天”完全不是一個東西返工成本很高。7. 從志經(jīng)驗談什么時候用 SQL 什么時候用腳本7.1 SQL 方案的優(yōu)缺點這套用 Hive SQL 實現(xiàn)的方案優(yōu)點是純 SQL、好維護、跑批穩(wěn)定不依賴外部 Python 或代碼環(huán)境數(shù)據(jù)量大時只要調(diào)參數(shù)能扛住。缺點在于如果業(yè)務(wù)很復(fù)雜比如需要判斷自然日還是活躍日、需要排除指定節(jié)假日、需要每個用戶有自定義起始周期SQL 表達起來會比較繞。這時用 Python、Scala 或者 Spark RDD 也可以實現(xiàn)但不一定更快。7.2 讓臨時表變成數(shù)倉模型我在實際項目中一般情況下不會讓業(yè)務(wù)查詢直接訪問原始登錄日志。要先構(gòu)建一個“用戶登錄密集模型”包含 user_id、login_date、group_id、seq、max_continuous_days 字段落在 Hive 表中后續(xù)所有報表都查詢這張表。這樣處理有幾個好處計算一次多處復(fù)用原始日志變化時只需要刷新這張表下游各種報表不需要重復(fù)計算同樣的分組邏輯。建表語句簡單示意CREATE TABLE dws_user_login_continuous ( user_id STRING COMMENT 用戶ID, login_date STRING COMMENT 登錄日期, group_id BIGINT COMMENT 連續(xù)區(qū)間分組ID, seq BIGINT COMMENT 連續(xù)區(qū)間內(nèi)序號, max_continuous_days BIGINT COMMENT 歷史最大連續(xù)登錄天數(shù) ) COMMENT 用戶登錄連續(xù)明細表 PARTITIONED BY (dt STRING COMMENT 數(shù)據(jù)分區(qū)日期) STORED AS ORC;寫入時把上面的合體 SQL 結(jié)果 insert overwrite 到表中即可。注意分區(qū)字段 dt 與 login_date 不要混淆一個是數(shù)據(jù)加工日期一個是業(yè)務(wù)登錄日期。7.3 連續(xù)問題的一招通吃日期減去行號除了 LAG SUM(標(biāo)記) 的方法還有一種非常經(jīng)典的方法用日期減去所在組內(nèi)的行號得到一個穩(wěn)定的日期基準這個基準相同則屬于同一連續(xù)區(qū)間。寫成 SQL 就是SELECT user_id, login_date, date_sub(login_date, ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY login_date)) AS group_date FROM login_dedup;舉例說明連續(xù)登錄三天行號分別是1、2、3日期分別是 2025-01-01、2025-01-02、2025-01-03那么 date_sub 后得到 2024-12-31、2024-12-31、2024-12-31完全相等。而斷掉后再出現(xiàn)的 2025-01-05行號是4date_sub 得到 2025-01-01和前一段的 2024-12-31 不同于是分到不同組。這個方法實現(xiàn)起來代碼更短WITH login_dedup AS ( SELECT user_id, to_date(login_datetime) AS login_date FROM login_log GROUP BY user_id, to_date(login_datetime) ), login_with_gap AS ( SELECT user_id, login_date, date_sub(login_date, ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY login_date)) AS group_date FROM login_dedup ) SELECT user_id, login_date, ROW_NUMBER() OVER (PARTITION BY user_id, group_date ORDER BY login_date) AS seq FROM login_with_gap;這個方法被稱為“差值和行號法”比 LAG 判斷少一個開窗計算性能通常更好。但有一個前提條件登錄日期必須是嚴格連續(xù)且沒有重復(fù)的日期值。只要已經(jīng)做了去重完全可行。我個人更喜歡先用 LAG 法因為更容易理解便于別人接手但差值和行號法在某些大表場景下更快值得掌握。8. 實操場景擴展不只是登錄天數(shù)8.1 統(tǒng)計商家連續(xù)營業(yè)天數(shù)電商平臺經(jīng)常要分析商家是不是“僵尸店”或者評選“金牌店鋪”其中就有連續(xù)營業(yè)天數(shù)指標(biāo)。和用戶登錄基本一樣只要把 user_id 換成 shop_idlogin_date 換成 business_date。業(yè)務(wù)上要考慮實體店可能會因為疫情、裝修停業(yè)這種斷點自然也會重新分段。8.2 計算用戶連續(xù)簽到獎勵等級很多 App 有簽到活動連續(xù)簽到7天給獎勵。利用 seq 字段可以很輕松地篩出每個用戶當(dāng)前連續(xù)簽到的天數(shù)并判斷是否達到獎勵條件SELECT user_id, MAX(seq) AS current_continuous_days FROM login_detail_with_seq WHERE login_date current_date() GROUP BY user_id;還可以進一步統(tǒng)計每個用戶的連續(xù)簽到段數(shù)、每一段跨了多少天。這些指標(biāo)都可以基于上面已經(jīng)構(gòu)建好的模型完成。8.3 監(jiān)控數(shù)據(jù)回補導(dǎo)致的歷史連續(xù)性重算數(shù)倉里經(jīng)常有上游數(shù)據(jù)回補的情況比如某天的日志數(shù)據(jù)凌晨沒有到位第二天補了上來。如果模型表沒有做冪等處理重跑全量時會因為新增的歷史日期導(dǎo)致 group_id 和 seq 變化。這種情況下建議模型表按全量覆蓋方式刷新或者給原始日志增加過濾條件避免重復(fù)接入。我在實際中試過增量更新連續(xù)模型邏輯非常容易出 bug最簡單的就是每天重刷全量只要數(shù)據(jù)量可控這是最穩(wěn)的。9. 排障速查表遇到連續(xù)計算問題對照查看癥狀可能原因解決辦法最大連續(xù)天數(shù)比實際多很多未按 user_id login_date 去重清洗層加 GROUP BY 或 DISTINCT序號從2開始或中間亂跳分組標(biāo)記沒有正確生成檢查 LAG 是否取到上一日期斷點處序號沒有歸1group_id 沒有累加或用錯分區(qū)字段確保 SUM(標(biāo)記) 的窗口按 user_id 排序跨年數(shù)據(jù)算斷日期字符串參與 datediff 時格式不對全部轉(zhuǎn)成 date 類型再計算同一天多條記錄導(dǎo)致連續(xù)天數(shù)虛高去重不徹底按 user_id、to_date 去重分組結(jié)果全一樣date_sub 差值法與 ROW_NUMBER 聯(lián)合使用時日期未被去重先 GROUP BY 后再執(zhí)行數(shù)據(jù)傾斜、運行極慢個別用戶記錄過多調(diào)大 reducer 或?qū)Υ笥脩魡为毺幚磉B續(xù)天數(shù)與業(yè)務(wù)預(yù)期不符口徑不同自然日 vs 任意X天提前和業(yè)務(wù)確認口徑這張表的每一條我都實際踩過或幫別人排查過建議收藏。它們比任何理論都更能節(jié)省你的時間。10. 最后一個實驗性技巧用數(shù)組函數(shù)實現(xiàn)連續(xù)分組如果你所在的環(huán)境是 SparkSQL 3.0 以上還支持一些高版本的 Hive 函數(shù)比如 collect_list、sort_array??梢韵劝岩粋€用戶的所有登錄日期用 collect_list 收集成一個數(shù)組再遍歷數(shù)組判斷連續(xù)性。但這種方式在 Hive 上寫起代碼非常啰嗦要用 explode 再打散不同版本函數(shù)支持差異很大。我不建議常規(guī)場景用它只在某些特殊場景下比如已經(jīng)有一個用戶數(shù)組字段不希望多次 join 時才考慮。這里點到為止重點還是掌握上一節(jié) SQL 法。我在實際項目中逐步形成了一套自己的模板以后只要遇到“連續(xù) x 天”類需求直接復(fù)制改字段名。核心就是四個關(guān)鍵步驟去重登錄日期用 LAG 標(biāo)記斷點用 SUM 累加生成分組聚合取最大或組內(nèi)排號。這套流程已經(jīng)被我用到用戶活躍、店鋪營業(yè)、事件觸發(fā)連續(xù)性等多個場景每次都很穩(wěn)。如果非要說一點個人體會那就是千萬不要一上來就寫復(fù)雜 SQL先把邏輯用筆畫出幾行樣例手動推一遍分組結(jié)果再寫代碼。很多問題在紙面上想清楚后代碼就是一步到位的翻譯而已。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
国产精品密臀网在线观看| 99热这里只有精品1| 亚洲精品97p| 亚洲精品国产专区在线观看| 好看的久久不射无码影视影院| 蜜臀一区二区三区亚洲最新章节在线观看 - 高清蜜臀一区二区三区亚洲全集播放 | 女人 A一级| 欧美久久毛片基地| 无码人妻一区二区三区色欲aⅴ| 欧美综合区| 91久久精品蜜臀| 欧美综合97www| 97久久超碰日韩精品| 高跟丝袜AV专区国产| 蜜臀久久在线视频| 国模不卡| 国产97色在线 | 亚洲| 亚洲AV免费在线| 91亚洲丝袜熟女| 51一区二区三区| 国产精品suv一区| 亚洲AV无码AV吞精久久久久| 亚洲交换| 天天干天天日天天射黄色| 美女被啪到深处抽搐视频| 亚洲av在线免费观看| 女色综合| 久久噜噜噜精品国产亚洲综合| 人人妻人人狠人人| 欧美色干| 欧美91在线+|+欧美| 91人妻精华帖| 欧美亚洲图片| 中文熟女五十乱码在线| 免费观看欧美日韩操逼视频| 久久免费99精品久久久久久| 97在线视频免费看| 欧美人妻一区二区| 欧美激情总合网| 高清有码一区二区| 亚洲久草AV色图| 麻豆精品久久久久久久| 欧美在线永久天堂| 亚州高清AV| 色色99| 国产97色在线| 男人的天堂日韩| 2019精品国产无码成人| 久久夜夜| 国产精品久久久午夜夜伦鲁鲁| 9l视频自拍9l九色成人| 日本韩高清无砖码22o| 偷拍亚洲高清图片| 亚州精人品大香蕉| 亚洲砖码砖专无区2023| 久久精品店| 干b在线性社区| 大香蕉丝袜一级片| 欧洲亚洲国产综合在线| 外国免费性情大片| 亚码人妻| 久久伊人在线五区| 99热最新| 狠狠色噜噜狠狠狠狠狠色综合久久| 亚洲日韩黑丝| 五月天婷婷欧美三区| 日本人妻最新在线中| 夜夜爽夜夜摸夜夜操免费视频| 国产精品交换一区二区| 凹凸久久人人| 操逼www.| 免费观看国产小粉嫩喷水精品午| 99999久久精| 91激情网| 亚洲怡春院| 日韩三级网址| 精品区9| 日本一区二区三区午夜观看| AV天堂因数| 亚洲天天影视综合网| 色婷婷电影| 亚洲天堂一区二区久久| 亚洲视频中文一区| 0755午夜福利视频| 蜜桃精品一区二区三区ww| 91人妻做a观看视频| 屁股久久久久久久久久| 加勒比综合在线| 精品人妻无码一区二区三区不卡-精品人妻无码一区二区...|精品少妇一区二区三 | 99久久婷婷| 特级特黄一级毛片免费| 日本熟女不卡视频| 国产婷婷综合在线观看| 超碰九7| 国产高清在线自在拍69| 欧美在线55555| 女人天堂AV五区在线| 曰韩无码777| 欧美一级久久久丰满| 东北少妇高潮zzzz| 成人97人人超碰人人| 干B网| 欧美96精品在线| 97免费视频在线| 亚洲高清欧美总合| 精品视频久久| 凹凸视频在线一区二区| 成人无码在线超碰网| 亚洲天天操| 凹凸视频在线一区二区| 亚洲第一页第二页激情| 国产午夜精品理论片一二三区区 | 骚逼自拍99| 嗯嗯啊啊啊啊轻点视频| 国产精品一区二区三区四区五区| 欧美劲爆第一页| 欧美激情内射| 国内毛片欧美香蕉精品| 亚洲成人免费中文字幕| 国产成人免费观看在线视频| 干婷婷综合网| 99性爱视频| 婷婷色综合| 欧美性天天影视| 国产四虎在线| 91中文字幕在线观看| 亚洲第一页综合在线| 免费99精品国产自在在线| 亚洲国产亚洲天堂| 97超碰精品图片| 9色国产精品一区粉嫩| 黄色电影在线播放综合网站| 综合色啪| 欧美有码亚洲中文字幕一区二区三区四区| 九九九九九用不成了| 久久久久久久久久精| 久久久久久中文| 日韩啪啪视频| av日韩手机在线影视| 欧美极度丰满熟妇hd| 欧美|91色综合| 75大香蕉| 国产精品无码成人精品| 亚洲欧洲网站免费观看| 国产精品情侣啪啪| 桑老女人九区| 国产自产自拍| 国产在线76页| 久草久日| 在线日韩日本亚洲国产| 免费强奸av| 欧美成人亚洲精品| 久久成人东京热人妻| 国内偷拍精品一区二区| 在线观看黄色电话| 伊人国产视频| 日本加勒比无码专区| 亚洲av国产av综合av卡| 中文字幕一区日韩精| 男女激情中文字幕| 亚洲av资源| 国产AV色黄看到爽| 婷婷色一区| 亚州春色| 国产综合日韩伦理| 色婷婷基地| 亚洲AV不卡在线观看尤物| 亚洲高清欧美总合| 免费的黄片wwwwww| 在线小视频| 亚洲熟妇一,二,三期| 久久综合18p| 国产精品白丝在线播放| 欧美性五月| 日本潮催一卡操| 日本三级韩三级99久久| 欧美大片天天看| 97超碰中文在线| 26uuu国产日韩综合在线观看| 国产这里只有精品| 人妻少妇精品久久久久久| 成年女人黄网站| 夜夜爽妓女| 久久二| 人妻人人做人人澡人人爽欧美一区| 久久久久久中文字幕中文字幕最新| 国产自产22区| 久久久精品成人国产| 久久爽爽精品| 人妻二区| 又黄又粗又硬又长又大| 精品无码一区二区三区色欲| 色婷婷aV一区二区三区麻豆综合| 火箭成精品视频884必出精品| 国产高潮AA片免费看| 超碰是碰在线观看| 激情接吻视频久久久久久| 欧美日动态视频| 国产精品爱欲| 偷拍片久久| 午夜一区二区三区国产| 大香蕉欧美国产日韩高潮| 啪啪性爱免费视频| 97色涩| 人妻日日干| 啊啊啊啊好疼视频| 丁香九月激情| 中文字幕天堂在线| 伊人久久蜜月| 欧美精品1区2区3区| 另类图片五月天| 色色色99| 日韩成人私密一级精品av| 97超碰色屌| 人妻一区二区三区视频| 日本新免费二区三区| 色狠狠 - 百度| 亚洲诱惑| 人人扣人人操| 色欲天天综合久久久无码网中文| 色哟哟-国产专区| 99re免费视频精品全部| 国产精品久久久久久久免牛肉蒲团| 午夜福利在线合集| 97神马久久| 麻豆国产尤物AV| 国产毛片毛片4p懂色| 精品久久久久黄少妇| 亚洲性爱免费电影| 深夜福利黄片| 黄色片G G G| 色婷视频| 变态乱伦伪娘灌肠一区二区| 国产嫩草精品A88AV| 婷婷丁香五月综合| 日韩高清黄片| 欧美第五页| 天天综合日韩网| 精品成人亚洲午夜电影| 欧美高清色| 久久久婷婷| 亚洲美女自拍偷拍视频| 精品福利| 噜噜噜噜天天狠狠| 婷婷五月天久久精品视频一区二区三区| 中文字幕日韩专区精品系列 | 色情五月综合婷婷| 91久久免费视频互動交流 | 亚洲日韩青青草色月| 精品久久久久久中文| 亚洲资源一区| 夜夜操一区二区| 男人的天堂网免费| 青娱乐国产精品| 精品传媒在线一区| 久久一区二区加油站| 无码91| 日韩精品一区二区三区色欲| 久草网站免费在线观看| 日语五十路和六十路亚洲国产精品| 91国精产品| 亚洲情色五月天 | 欧美高清无码免费视频高清版| 福利天天都操| 狠狠夜色午夜久久综合在线| 日韩在线视频1234| 国产91福利小视频在线观看| 日韩精品一区二区人人人| 久久精品72| 天天影视综合网欧美精品| 操B在线观看| 亚洲不卡三级手机播放| 超碰97伊人| 国产精品久久久久久9999| 日韩久久超碰色| 亚洲 综合 欧美| 国产精品探花视频| 久久久九九网站| 浪人综合网| 囯戸精品高潮呻吟旡码| 操逼A∨| 99999国产| 密臀成人视频久久久| 青草视频人妻在线观看| 伊人网在线视频| 97久久精品国产| 久久综合久久综合人久久夜精品| 亚洲国产欧美日韩精品一区二区三区,国产一区二区三区在线看片,欧美性猛交 XXX | 97久久久久久久久久| 香蕉久久精品| 久久露脸国产老熟女| 亚洲一区二区三区播放在线| 成人性爱av| 熟女乱3伦999| 日本国产亚洲一区在线观看| 囯戸精品高潮呻吟旡码| 国产h小视频在线观看免费| 91精品久久久久久| 欧美AB在线| 国产精品久久久久久久久久久久久久| 懂色Av一区二区三区| 麻豆一区二区AV天美| 亚洲色图8| 欧美日韩久久精品爱爱| 一起草视频在线| 亚洲天天操| 国产主播福利| 天堂а√在线最新版在线| 天天插夜夜操| 99热99色| 精精夜夜| 少妇内射www在线观看视频| 操操操操网黑人| 亚洲熟女乱色一区二区三区久久久| 日日夜夜模| 久男人久久| 在线亚洲欧美| 有码专区最新中文字幕有码| 国产精品美女| 欧美亚洲素人制服精品| 激情综合网五月婷婷| 91熟女熟妇视频网站| 日日日啊啊啊| 韩国嫰模上门援交视频| 91欧美少妇| 国产综合久久久麻桃个| 午夜操逼不卡| www.狠狠操| 曰本精品久久久| 蜜臀99久久精品| 久久久久九九九| 乳欲人妻办公室奶水| 蜜乳av首页| 嗯嗯啊啊用力视频免费| 欧美大色交| 老司机香蕉久久久久| 男啪女色黄无遮挡免费观看| 日韩一级成人毛片免费观看| 伊人97超碰| 激情文学 亚洲图片| 久久香蕉国产线看观看亚洲女人 | 亚洲综合69| 97久久久久| 国产色综合亚洲色综合吹潮| 99re视频在线观看这里只有精品| 一区二区不卡| 国产视频人人网| 精品亚洲国产成人av网站| 天天综合色| 天综合网欧美| 黑人免费福利视频| www.色99| 国产精品电影推荐| 国产午夜在线观看| 91久久国产综合久久| 亚洲国内精品成人不卡| 操逼网站网站| 深爱五月天| 91老熟女91老女人| 日韩熟女乱伦中出| 爱欲AV| 91亚洲欧美激情| 国产Aα| 91女人的网站| 久久久久久久久久9| 无码高清专| 天堂在线一区二区| 国产精品成久久久久午夜午夜| 熟女乱伦二区| 黄站在线免费观看| 伊人女女资源在线观看| 激情五月天校园春色网| 日韩一区二区精彩视频| 嗯嗯,啊啊,国产精品| 99re视频这里只有精品| 日本午夜精品理论片A级APP发布| 久久久免费懂色| 涩涩涩综合| 天天天肏屄欧美| 色激情综合网站| 五月婷婷丁香六月| 亚洲色电影在线| 国产热RE99久久6国产精品首| 九九九九九九免费视频| 在线观看综合精品亚洲| 欧美综合色图片| 人人做人人妻人人夜视频| 国产第11页| 无套内射人妻在线播放| 国产精品久久久久久久久久久久久久久 | 国产 日韩 另类 视频一区爱| 啊好爽受不了无码| av在线观看不卡网站| 日韩人妻无码精品系列| 强奸国产在线| 青青草在线视频播放器| 水澄无码AV| 青草精品视频-日本久久久久网站| 五月天婷婷综合| 久久久一区二区三区四区五区| 亚洲成人碰碰| 亚洲无码精品AV久久久| 欧美曰韩国产精品| 双插性欧美一二三区| 在线五区| 久久99国产综合精品女同| 日韩三级伦理中文字幕| 操逼精品视频| 偷窥自拍A片| 精品传媒在线一区| 国产盗摄美女如厕大神作品在线观看| 无码高清国产AV| 超碰9 7女人| 性吧在线视频| 艹精品| 亚洲熟妇白浆无码AV| 婷婷五月天成人网| 日韩av免费一级电影| 亚洲综合图色在线| 可以看的av| 欧美 精品国产制服第一页| 亚洲欧美精品久| 精品一区二区成人动漫| 色激情综合网站| 天堂射| 久久婷婷五月| 自拍偷拍亚洲熟女妇人精品| 日韩本不卡视频在线观看| 91久久久久久久久久久| 亚一综合久久久久久久久久| sewuyueav| 国产天美传媒精品| 天天干,夜夜爽| 性色av大全| 综合网亚洲在线| 亚洲精品国产精品乱码不卡| 国产精品三级视频网站| www.99色| 亚洲熟女综合网| 伊人色综合欧美| 久热伊人99re| 99ri在线视频| 日韩国产欧美伦理在线| 凹凸精品熟女在线观看| 91激情国产| 中文字幕乱码人妻一区二区三区,99精品| 极品尤物女神在线观看| 亚州熟女乱伦| 丝袜足交视频| 熟妇无码视频三区| 欧美在线 亚洲| 韩国轻伦国内自拍一区| 久久黄黄| 日韩精品99999| 91强热人妻| 人人操人人色人人摸| 91天堂| 日本道日本道中文字幕日本道最新日本道在线观看 | 综合网91| 亚洲久久久久| 亚洲女人91| 98超碰日本| 欧美狠狠鲁| 极品五月天噜噜| 99视频内射三四| 伊人久久大香大香线蕉中文| 丰满人妻一区二区三区四区| 亚洲成人精品在线一区| 中国操逼无码| 欧美性爱精品七区| 国产辣妈在线视频福利| 精品视频一区二区| 97操| 国产一国产一级毛片古装| 色九久| 少妇高潮一区二区三区在线| 美女爽到高潮91| 大干人妻| 亚洲国产97在线精品一区| 在线五区| 四虎免费在线播放| 九热久| 国产乱子伦一区二区三区在线观看| 97综合久第一页| 麻豆区久久久久亚| 色九色久| 欧美78P| 免费视频97| 丰满人妻区一区二区三| 尤物网站91| www久久国产精品| 国产精品久久久无码aV去| 国产精品99精品视频网站| www.99色| 久久久久免费看少妇A片特黄| 9美女超碰在线免费观看| 中文字幕av片| 78超碰| 三男一女不戴套的A片| 丰满美女一级毛片在线播放| 国产AV色黄看到爽| 久久三| 成人短视频在线观看| 91碰碰碰| 日本天堂网| 动漫av中文| 熟妇高潮二区三区| 99re视频这里只有精品| 欧美性爱18观看| 午夜福利免费精品视频| 亚洲无码色| 青青草亚洲一区 | 静品嫩模一区二区| 青青11操操操操操操操操| 97视频在| 日韩成人人妻网站| 欧美视频一| 91社操逼| 9九九九九视频在线观看| 中文字幕加勒比海高清无码免费视频| 97精品97久久| 精品午夜福利导航| 欧美成人一级免费电影| 人妻嗯啊啊在线播放| 乱理日韩中文| 美女爽到高潮91| 100啪啪视频大全| 小情侣高清国产在线视频| 日本亚洲vr欧美不卡高清专区| 欧美色一二三| 欧美极品| 自偷自拍的亚洲视频| wwe 天天干.com| 国内一级精品| 久久黄色性爱视频| 亚洲 欧美 中文 日韩超碰| 欧美精品久久| 日韩性爱啪啪视频| 丁香色色网| 精品一区二区三区四区外站 | 日本在线999| 日韩人妻制服丝袜av| 欧美午夜精品久久久久久3D| 黑人粗大V S日韩女优视频| 东京热男人的天堂| 中文字幕在线免费观看视频| 伊蕉97蜜桃97狠狠综合干| 东京热综合久久一区二区| 双插性欧美一二三区| 久久久9视频| 久久精品操| 中国zzijzzijzzwww精品| 97超碰美国| 久久久啊啊啊| 人人扣人人操| 熟妇女伦乱视频视频| 免费看黄视频亚洲网站| 亚洲美欧999| 色汉综合| 欧美日韩丝袜| 澳门色噜噜色噜噜色噜噜色噜噜色噜噜| 精品少妇人妻av久久免费| GVH-003 母子姦 青木玲-麻豆视频,麻豆视传媒短视频网站入口,麻豆视传媒官网直 | 97视频在线免费观看| 丁香五月天激情网站| 久久少妇人妻| 一牛影视成人片免费| 99亚洲人人| 日本一区二区三区午夜观看| 91在线限制级| 国产强奸AV在线| 日韩99999色| 欧成人精品H无码| 亚洲婷婷五月天| 国产精品丝袜在线| 99热9| 日本道人妻久久久在线不卡色视频| 日韩综合无码色欲vv| 国产一级久久久| 五月天婷婷在线看| 东北女人| 久久精品店| 天天综合站| 国产精品成人无码av无码免费| 青青操视频在线| 黄色性爱网网| 欧美春色| 精品久久久久9999| 日韩99神马视频播放片在线播放| 日韩不卡av一二三| 亚洲欧美综合网| 五月天激情小说| 精品九九九九九九| 亚洲男人的天堂一区二区| 乱操乱伦AV| 欧美在线55555| 综合免费无码中文| 老熟女天天操| 97干com| 久操网无码在线| 日韩综合色网| 久久久蜜桃一区二区三区| 成年无码动漫av片无尽在线| www.AV有限公司一区| 性色av网站| 91中出视频| 99啪啪视频| 久久亚洲AV无码专区国产精品| 中文字幕精品亚洲熟女| 天天摸,夜夜摸| 国产精品蜜臀久久久久无码AV| 97国产伦理| 久久婷婷五月天| PMv在线观看| 亚洲男人天堂视频 | 涩涩涩综合| 少妇熟女视频一区二区三区| 久久久工口| 日韩精品黄片免费观看| 少妇久久久久| 亚洲国产亚洲天堂| 欧美午夜精品久久久久久超碰| 国产一区二区三区白丝| 91老司机精品| 97一本大道亚洲一区| 丁香五月婷婷色| 黄片免费视频2019| 色97干| 一区二区国产视频在线观看| 日本三级久| 综合操逼| 日韩免费在线观看不卡| 清纯唯美亚洲另类| 久久久久久久久久久久久久久久9| 婷婷在线精品| 淫荡少妇免费| 在线午夜成人无码视频| 精品国产乱码久久久影院| 91中文精品日韩欧美在线| 国产亚洲99久久精品| av在线观看不卡网站| 国产精品操| 综合情欲网| 青娱乐手机日韩在线视频| 亚洲天天艹| 啪啪一区| 欧美三级中文字幕hd| 9国产超碰| 97超碰色| 美女久久久久久久久久久| 色五月AV在线| 久草草一二三四区久久| 69精品人人人人| 国产精品白虎| 亚洲男人bt天堂| www狠狠| 多乙久久久久久| 偷拍精品一区二区三区| 亚洲欧美黄| 中文字幕成人| 欧洲精品欧洲精品| 可以免费观看的日韩av毛片| 91N综合在线| 911av网站免费观看| 久久噜| 国岛片视频| 国产丁香精品露脸视频| 丁香五月社区| 久久亚洲AV无码白度| 日韩二级| Blackedraw视频一区二区| 97欧美色| 亚洲免费精品一区| 午夜啪啪片| 正宗无毛一线天嫩逼| 熟妇熟女视频一区二区三区| 青青青国产手线观看视频2| 国产精品色哟哟| 天天日天天干天天整| 亚州综| 妇女视频网站| 2018色综合天天操| 免费精品无码一级毛片牛牛影视| 中 文字幕一区二区三四 五 区日 日 骚| 免费在线黄片视频| 91美| 亚洲揄拍网| 激情综合色| 一个色导综合| AV女资源| 色色色色色色色色综合| 天天操天天插| 日韩欧美成人性爱在线| 亚洲日韩精品一区二区| 9999九九九久久久| 97AV爱| 人人操人人摸人| 精品欧美老熟女一二区| 人妻少妇久久| 九九九九九九成人| 天天看天天综合成人网| 久久精品国产免费观看99| 日语五十路和六十路亚洲国产精品| 成人久久久精品| 精品人妻夜夜草| 天天色播| 久久久久久精品免费看A级| 日韩欧无码一区二区三区免费不卡| 精品无码一区二区人妻久久蜜桃| 九九视品黄色| 啪啪91| 精品黑人一区二区| 日韩黄片视频试看| 天美精品原创av片国产| 色欲天香天天综合网-成年人三级片网站-欧美乱妇狂野-日韩国产专区-久久久久久 | 四虎视频在线观看| 亚洲五月丁香花狠狠干一区二区三区 | 日韩人妻精品| 亚洲熟妇乱女区二区三区| 亚洲成人久久美女| 国产成人手机视频激情| 国产超碰AV在线精品| 九九热九九| 欧洲亚洲人妻无码久久三区四区| 综合av影片| 综合网~91综合网| 天天射网| 欧美第一页性| 日本人体九九九九九九| 五月天激情视频| 操逼网免费无码视频| 国产精品无码av| 台湾成人无码AV| 色婷婷六月丁香七月婷婷| 国产无码成人无码| 日韩无码极品| 校园春色综合网| 国产白丝精品在线观看| 日日骚中文字幕| 久久东京热成人| 久久久久久十| 午夜在线播放| 99热在线播放| 韩国一级做a久久久久| 91综合色| 国产区日韩区在线观看| 伊人一级免费黄片| 久久精品 六十路 熟女 欧美| 国产辣妈在线视频福利| 摸奶性爱视频网站在线免费播放| 亚洲AV麻豆Aⅴ无码电影一| 人妻9117c| 一区操逼| 欧美成人性爱视频免费观看 | 亚洲国产中文字幕| 久操视频在线| 久久黄人人爽视频| 一级毛片电影免费看| 日韩免费三级黄片电影| 欧美性爱第一区| 91天堂色男人的天堂| 色五月综合网| 国产精品对白内射| 成熟熟女国产精品一区二区| 天天影视网色欲色香| 熟人人妻少妇精品久久| 蜜臀久久99精品久久久久| 亚洲电影中字一区二区| 久久亚洲AV无码专区国产精品 | 日日日日做夜夜夜夜做无码97| 天天干夜夜操一区二区| 亚洲久久久| 最新av中文字幕高清| 99久久久久久久久| 玖玖视频在线资源一区二区三区| 第45页一区二区| 97se综合| w w w.久久精品| 久久久久久国产手机AV| 蜜臀久久久久久999| 久干网| 蜜臀网 一区| 天天谢天天干| 99热精品在线| 99热日| 丰满人妻一区二区三区色-百度| 黄色片一区二区三区四区五区| 日本精品一区二区中文字幕| 国产白领连续中出在线观看| 日本不卡免费二区| 秋霞一集毛片观看| 二色av| 老女人碰碰在线碰碰视频| 久操免费观看| 国产色呦呦| 亚州综合电影| 亚洲人久久久久日| 亚洲成人久久一区二区| 日韩中字av一区| 人妻精品一区一区三区蜜桃91| 9久在线视频只有精品| 九九香蕉网| 欧亚成人在线视频| 少妇一级无码精品| 男人天堂一区二区| 日本97久久| 国产亚洲美日韩Aⅴ中文字幕无码成人| 日韩精品一区二区三区四虎影视| 国产欧洲精品亚洲午夜拍精品| 麻豆三极片| 狠狠穞A片一區二區三區| 91少妇通奸网站| 国产美女裸体秘 永久无遮挡| 嗯嗯啊在线视频| 97中文综合| 精品一啪| 亚州熟妇精品| 天天操天天干一区二区 | 大JI巴好深好爽又大又粗视频| 91精品久久综合熟女| 久久综合久色欧美综合狠狠 | 欧美日韩人人精品| 69精品| 资源在线观一 二| 日韩AV噜噜噜一区二区三区四区| 亚洲αv一区二区三区| 男人 天堂 日 亚洲| 欧美成人性爱视频在线播放| 成人五月香网在线| 中文字幕在线免费观看 | 91狠狠狠| 精品少妇一区二区三区在线视频| 精品9999| 久久激情综合| 天天日夜干| 夜夜嗨AV一区天天| 欧美色999| 精品免费1| 精品人妻一区二区三区四区石在线 | 久久久9品一区二区三区| 97Ai亚洲| 日韩熟女精品无码专区一区二区| 97免费视频在线| 成人夜夜爽| 久久97| 久久蜜桃综合网| 天天懆天天日| 日本熟妇精品九九| 欧美日韩中文亚洲v在线综合| 五十路熟女在线不卡观看一区二区| 欧美性爱一级操| 麻豆一区二区AV天美| 首页亚洲国产高跟丝袜诱惑视频| 999久久久九九九九| 天美传媒av 在线| 国产午夜福利专区综合| 极品久久久久久久久久久久久久| 强奸乱伦麻豆| 久久久久99精品成人片蜜臀| 国产馆极品诱惑| 91av一区二区在线观看| 色色青青久久| 大香交伊人网| 操逼逼一区视频| 91黑丝操| 国产欧美日韩女同性恋ww喷水精品| a片在线播放| 欧洲亚洲人人爽爽视频| 狠狠干综合| 五月丁香六月综合缴清无码| 亚洲宗合网| 日本大片日本一区二区免费高清| 偷拍 欧美 日韩| 色香欲天天天天综合色| 丁香六月综合激情| 天天插夜夜操| 大香蕉伊人75| 神马久久啊啊| 蜜臀av一区二区三区免费观看| 一个人免费视频观看在线WWW| 99热大香蕉伊在线| 91亚洲不卡一区| 26uuu国产免费观看| 欧美色狠| 免费男人的天堂| 天天日日本| 91色久| 日韩图区 偷拍| 麻豆视频一区二区| 久久精品中文字幕女同| 青青国产精品在线| 亚乱色| 免费岛国一级片| 深夜激情| 日本九九久久99| 97超级久久强资源| 欧日a| 中文字幕乱码人妻二区三区| 另类欧美色| 蜜臀无码一区二区| 99re在线观看| 丰满人妻一区二区三区免费,| 青草青草久热| 成人av性爱电影在线观看| 激情在线青青操| 热的中文 热的有码 热的国产| 尤物av网站| 男人兔费天堂| 色综合婷婷| 麻花传媒免费网站在线观看| 欧美精品69性爱| 97精品在线视频| 97ai亚洲| 骚日日av| 97超碰这里只有精品| 欧美在线啊啊啊| 91老熟女逼| 91爱综合| 亚洲日韩肥臀视频在线观看| 99综合免费视频| 国产精品一区二区黄片| 国产精品久久久久久久毛片1| 人人操 欧美| 天堂v无码免费视频| 97综合国产| 好爽视频在线观看视频| 91爱剪切久久| 精品免费囯产一区二区三区| 亚洲人精品久久久| 丝袜视频网国产90| 日韩色图 一区二区| 中国的操老妇女| 99热8| 超碰碰小说97| 亚洲欧美啪啪| 骚妻少妇精品性色无码四色A V| 精彩久久中文| 婷婷精品国产欧美精品亚洲人人爽| 久久综合av| 制服丝袜第二页| 国产吹潮女在线观看| 99re在线视频这里只有精品| 四虎影视永久在线观看精品免费网站 | www.色婷婷| 五月丁香啪| 9/A片 | 精品人妻1区| 成人精品一区二区91毛片不卡| av在线观看不卡网站| 操逼www.| 黄片在线免费在线观看| 久久丁香五月天| 无码免费一区二区三区啪啪| 久久久久9久久久久| 99在线观看无大码| 欧洲精品欧洲精品| 免费视频观看60秒| 干少妇视频| 人妻二区| 强奸乱伦大香蕉网| 欧美日韩成人在线| 嗯~啊~快点 死我视频| 熟女欧美日韩综合婷婷| 精品中文一区二区| 九九九999久久久网站| 一区二区中文| 人妻一区视频| 色九九综合| 成人网欧美风情| 国产91专区| 欧美中文字幕精品人妻| 日本性爱欧美性爱| 26uuu国产免费观看| 人妻激情另类| 伦在线97| 久久免费9| 人人看人人爰人人操 | 亚洲国产精品无石码久久| 欧美真人抽搐一进一出gif | 久久9精品网站| 国产日本一区二区三区蜜臀在线观看| 欧美探花网| 五月综合久久| 影音先锋一区二区在线资源| 国产伊人精品在线| 国产黄色视频久久| 五月丁香六月婷综合成人综合| 在线人妻熟女一区二区三区四区五区| 98福利在线视频| 久久久97| 亚洲夜夜欢无码一区二区| 午夜天堂网| 伊色久人大在线| 青椒国产97在线熟女| 亚州伊人色综台| 国产风韵犹存熟妇三区| 女沟厕偷窥piss小便| 精品人妻美妇91job| 亚洲成人精品久久久| 精精品人妻一区二区三区| www.av在线视频| 亚洲国产一区二区三区在线 | 人妻中文在线| 超碰1997| 久久亚洲中文字幕视频| 亚洲激情久久| 亚洲欧美激情小说| 欧美性爱日韩性爱| 用力操死我| 日韩人妻无码不卡网站| 免费在线观看国内色片网站网址| 日本人妻一区二区| 怡红院成人视频| 欧美麻豆成人同性GⅤ在线| 国产乱弄免费在线视频。| 国产精品国产精品国产| 天天插天天操| 999九九九九国产动| 国产一级137片内射麻豆| 九九九综合精品| 干超碰碰熟女| 最新欧洲欧美日本激情网站| 久久99久久99精品天美传媒棢·纸:. | 亚洲精品一区二区精华| 夜色五月天| 熟女91网站| 日本岛国黄色网址| 制服丝袜第二页| 综合五月婷婷亚洲一区| 色婷婷久久综合超碰| 伦激情人妻另类人妻| 青青草黑寡妇男人天堂| 国产无码精品久久久久久| 97精品国产97久久久| 亚洲激情综合另类| 97精品国产97久久久久久| 美女啊啊啊啊啊| 青青网三级视频| 精品免费一区| 蜜臀精品1区2区| 国产在线综合网| 亚州色站 日韩电影| 国产精品久久久久久亚洲色欲| 欧美亚综合色图| 久艾草在线精品视频在线观看| 9超碰免费| 26UUU欧美激情一区二区| a人片中文字幕一区二区| 一区二区影院| 99久在线精品99re8| 国产久久久久久久久一区二区| 91高清欧美| 嗯嗯嗯啊啊啊在线免费观看| 97超碰精品| 色情亚洲日本成人| 精品人妻av在线播放| 天天影视之亚洲综合网| www超碰| 久久久一区二区三区四区五区| 九九九午夜| 欧美偷拍区| 亚洲s色图| www.婷婷| 91精品亚洲内射孕妇| 2017天天透天天通天天擦| 婷婷AV一区二区三区| 人妻精品一区二区| 青青草精品| 国产av美女被艹的乱叫| 亚洲精品人体| 无码视频一区二区| 91丨熟女丨丰满熟女| 国产一区在线看| www.高清无码诱惑一区.com | 日日夜夜干| 一区二区精品日韩欧美在线观看 | 91精品伊人久久久大香线蕉91| 极品少妇久久久| 日本 免费 一区二区三区 久久香蕉 | 色翁荡息又大又硬又粗又爽| 一本久久精品中文字| 99久在线精品99re8| 国产偷拍网站| 超碰在线综合97| 少妇被玩视频二三区| 综合久久六月久久婷婷| 精品久| 超碰视97中文| 国产精品九9| 日韩黄色一区二区三区| 放黄片放3级黄片没穿衣服| 99热日| 久久9精品视频| 欧美日韩性爱视屏免费看了| 96麻豆精品一区二区三区| 无马一区二区| 91美女色视频亚洲| 91大胆欧美| 99精品久久久久久久婷婷| 中日韓欧美高清| 黄色十八禁| 天天弄欧美| 日韩有码一区三区| 国产男女无套视频免费观看| 热思思免费视频| 精品国产99999| 色臀aV| 午夜呻吟欧美| 婷婷五月天伊人| 久久久久九九九| 综合av社区| 亚洲天堂久久久久久粉红视频| 十八禁电影伊人网| 久久精品72| 欧美中文字幕男人天堂久久精品| 久久一区二区三区入口| 国产精品久久久久久亚洲色欲| www亚洲欧美| 成年在线视频日本亚洲在线视频区精品江靖宇公司 | 深夜视频| 狠狠操狠狠燥| 久草毛片电影怡| 青青草日逼视频| 中文高清一区二区的| 无遮挡猛进视频免费无限观看| 欧美黄色大片在线观看| 18禁在线视频| 人妻9117c| 欧美18老人禁| 一级性爱网| 97在线免费视频| 91美女视频| 欧美一区二区男人天堂| 九九九九精品| 亚洲精品久久久久毛片A片拉屎| 美女诱惑久久| 99精品人妻| 亚洲欧美情色| 操东北女人| 久久久久国产精品久久久| 91性感在线| 91青青草| 99久久久无码国产精品性啊聊| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师黑人潮喷一 | 啊啊啊啊啊好舒服视频| 婷婷另类小说| 天天射夜夜| 嫩草 我啊~嗯~在线| 97精品久久久久中文字幕| 久久九精品| 亚欧洲一区二区视频| 国产吹潮女在线观看| 人人妻人人色一区二区三区| 91精品国| 九九热九九| 免费看黄片现成| 亚洲 欧美 偷拍 唯美| 美女操逼福利视频| 日韩在线观看中文字幕视频| 99热精品在线观看|