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

ARTICLE DETAIL

資訊詳情

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

Hive遞歸計(jì)算實(shí)踐:臨時(shí)表+循環(huán)迭代實(shí)現(xiàn)任意層級展開

Hive遞歸計(jì)算實(shí)踐:臨時(shí)表+循環(huán)迭代實(shí)現(xiàn)任意層級展開 Hive SQL 寫遞歸計(jì)算一直是數(shù)倉工程師繞不過去的一道坎。業(yè)務(wù)方一句“我要看全鏈路組織架構(gòu)”或者“把這個(gè) BOM 的末級物料全部展開”落到 Hive SQL 上就是一場噩夢。MySQL 里一條WITH RECURSIVE能搞定的事在 Hive 里就是另一套邏輯。我之前用“寫死 20 層自連接”的方式湊合過一版姑且叫 1.0后來業(yè)務(wù)層級超過 20 層SQL 直接廢掉才認(rèn)真做了這套 2.0 方案。這套 2.0 的核心思路并不復(fù)雜臨時(shí)表 循環(huán)迭代每一輪只掃增量數(shù)據(jù)再用一張總表防環(huán)路、去重復(fù)。實(shí)測下來千萬級節(jié)點(diǎn)、幾十層深度的場景都能穩(wěn)定跑完更重要的是不會因?yàn)槟硞€(gè)環(huán)導(dǎo)致任務(wù)跑到天荒地老。這篇文章就完整記錄一下這套方案的設(shè)計(jì)思路、完整代碼、性能調(diào)優(yōu)和排坑實(shí)錄給還在 Hive 里硬剛遞歸的朋友們一個(gè)可以直接抄的作業(yè)。1. 為什么需要一套 2.0 方案Hive 本質(zhì)上是為分布式批處理設(shè)計(jì)的標(biāo)準(zhǔn)的 SQL 遞歸查詢能力一直不是它的強(qiáng)項(xiàng)。低版本 Hive 根本不支持WITH RECURSIVE新版本雖然借助 Calcite 加了這個(gè)語法但生產(chǎn)環(huán)境里依賴它跑大規(guī)模遞歸任務(wù)的人依然很少后面我會具體講原因。所以大部分?jǐn)?shù)倉團(tuán)隊(duì)實(shí)際上都在用“土辦法”實(shí)現(xiàn)遞歸。1.1 1.0 方案寫死層數(shù)的自連接1.0 版本的思路很直白既然不知道最深多少層那就假設(shè)一個(gè)最大值比如 20 層然后用LEFT JOIN一層層往上拼最后用UNION ALL合并所有層的結(jié)果。這種方案應(yīng)付有限的、明確已知層級的需求確實(shí)沒問題。我最早處理一個(gè)“三二級部門展開”的需求時(shí)就是這么干的。但問題也很明顯深度是寫死的。一旦需求變成“動態(tài)層級”SQL 就廢了。SQL 冗長得可怕。20 層JOIN的 SQL 要寫幾百行維護(hù)起來頭大。性能不穩(wěn)定。每一層JOIN都會對上一步的全量結(jié)果再掃一遍越到后面越慢。1.2 2.0 方案要解決的核心問題2.0 在設(shè)計(jì)之初定了幾個(gè)明確目標(biāo)支持任意深度最多只受集群資源和參數(shù)限制。每一輪迭代只處理新發(fā)現(xiàn)的增量數(shù)據(jù)而不是全量重算。防環(huán)路。不能因?yàn)?A→B→C→A 這種環(huán)導(dǎo)致死循環(huán)。每一輪結(jié)果都帶有層級標(biāo)記方便業(yè)務(wù)側(cè)按“第幾層”做過濾和分析。這套方案從設(shè)計(jì)、編碼到調(diào)優(yōu)大概花了一周落地之后穩(wěn)定跑了很久也經(jīng)歷了多次數(shù)據(jù)量和深度翻倍的考驗(yàn)。下面把方案完整拆開講。2. 遞歸計(jì)算的主流實(shí)現(xiàn)路線對比在做 2.0 之前我把當(dāng)時(shí)業(yè)界常見的幾種 Hive 遞歸方案都捋了一遍這里直接給結(jié)論方便你做技術(shù)選型。2.1 寫死層數(shù)的自連接方案就是 1.0 的做法適用于層級明確且較淺的場景。優(yōu)點(diǎn)是實(shí)現(xiàn)簡單、不依賴任何腳本缺點(diǎn)是靈活性差、性能不可控。-- 示例展開 3 層部門 SELECT t1.dep_id AS root_dep_id, t3.dep_id AS child_dep_id, CASE WHEN t2.dep_id IS NULL THEN 1 WHEN t3.dep_id IS NULL THEN 2 ELSE 3 END AS depth FROM ods_dep_rel t1 LEFT JOIN ods_dep_rel t2 ON t1.dep_id t2.parent_dep_id LEFT JOIN ods_dep_rel t3 ON t2.dep_id t3.parent_dep_id WHERE t1.parent_dep_id IS NULL;層數(shù)少的時(shí)候還能忍層數(shù)多起來這段 SQL 會膨脹到你不想維護(hù)。2.2 原生 WITH RECURSIVE 方案從 Hive 4.0 開始社區(qū)通過 Calcite 引入了原生遞歸 CTE 支持。理論上你可以寫這樣的語句WITH RECURSIVE dep_tree AS ( SELECT dep_id, parent_dep_id, dep_name, 0 AS loop_id FROM ods_dep_rel WHERE parent_dep_id IS NULL UNION ALL SELECT c.dep_id, c.parent_dep_id, c.dep_name, t.loop_id 1 FROM dep_tree t JOIN ods_dep_rel c ON t.dep_id c.parent_dep_id ) SELECT * FROM dep_tree;但在實(shí)際生產(chǎn)環(huán)境中我對這套語法保持謹(jǐn)慎態(tài)度。一方面是因?yàn)楹芏嗥髽I(yè)的 Hive 還是 3.x 版本另一方面是原生遞歸 CTE 在底層執(zhí)行時(shí)容易出現(xiàn)性能抖動資源消耗不太好預(yù)估。小數(shù)據(jù)量驗(yàn)證邏輯沒問題一旦上了十億級節(jié)點(diǎn)還是老老實(shí)實(shí)用迭代方案穩(wěn)妥。2.3 臨時(shí)表 循環(huán)迭代方案這就是 2.0 的核心路線。思路是用一張“結(jié)果總表”保存已經(jīng)找到的所有節(jié)點(diǎn)再用一張“增量表”保存本輪新發(fā)現(xiàn)的節(jié)點(diǎn)每輪迭代從增量表出發(fā)向外擴(kuò)展用總表做去重和防環(huán)。這個(gè)方案的優(yōu)勢很明顯每一輪只掃增量數(shù)據(jù)而不是全量數(shù)據(jù)性能可控深度上限可以人為配置邏輯完全透明每輪跑了多少數(shù)據(jù)一目了然。缺點(diǎn)是需要寫 Shell 腳本來控制循環(huán)對開發(fā)者的工程能力有一定要求。2.4 自定義 UDF / Transform 腳本方案還可以用 Python 腳本配合TRANSFORM語法在腳本內(nèi)部實(shí)現(xiàn)遞歸邏輯。這種方式邏輯自由度最高但受限于單機(jī)內(nèi)存和腳本執(zhí)行模型數(shù)據(jù)量大時(shí)容易成為瓶頸。我一般只在“遞歸內(nèi)部有復(fù)雜業(yè)務(wù)規(guī)則”時(shí)才會考慮它普通展開場景用循環(huán)迭代就夠了。下面用一張表把這幾種路線的特點(diǎn)匯總一下方案深度上限實(shí)現(xiàn)復(fù)雜度性能表現(xiàn)適用場景寫死層數(shù)自連接固定層數(shù)低層數(shù)越多越差淺層級、需求穩(wěn)定原生 WITH RECURSIVE無低受引擎影響大小數(shù)據(jù)量、Hive 4.0臨時(shí)表循環(huán)迭代可配置中可控需調(diào)優(yōu)企業(yè)級大規(guī)模數(shù)據(jù)Python UDF 遞歸受單機(jī)內(nèi)存限制高中低小數(shù)據(jù)量、復(fù)雜規(guī)則我最終選擇的是“臨時(shí)表 循環(huán)迭代”下面詳細(xì)講它的設(shè)計(jì)邏輯。3. 2.0 方案核心設(shè)計(jì)雙表迭代框架3.1 結(jié)果總表 增量表的協(xié)同工作方式整套方案的核心是兩個(gè)表結(jié)果總表TOTAL和增量表INC。每一輪的迭代動作可以做如下拆解從上一輪的增量表中取數(shù)據(jù)去關(guān)聯(lián)子節(jié)點(diǎn)。關(guān)聯(lián)出來的新節(jié)點(diǎn)和結(jié)果總表做LEFT JOIN如果已經(jīng)存在則過濾掉。過濾后的數(shù)據(jù)寫入新的增量表。將新增量合并進(jìn)結(jié)果總表。如果新增量為空或者達(dá)到了設(shè)定的最大迭代次數(shù)循環(huán)終止。這個(gè)流程里最關(guān)鍵的優(yōu)化點(diǎn)在于每輪迭代的輸入是“上一輪的增量”而不是“歷史全量”。這樣一來數(shù)據(jù)增長不是隨層數(shù)線性疊加的整體掃描量小很多這正是 2.0 比 1.0 性能好的根本原因。3.2 環(huán)路檢測與終止條件設(shè)計(jì)防環(huán)路是遞歸計(jì)算里最不能忽略的一環(huán)。環(huán)路指的是數(shù)據(jù)里出現(xiàn)了 A→B→C→A 這種循環(huán)引用。在雙表迭代的設(shè)計(jì)下環(huán)路其實(shí)已經(jīng)天然被結(jié)果總表擋住了任何節(jié)點(diǎn)只要被訪問過再次出現(xiàn)時(shí)會被總表過濾掉。所以迭代不會因?yàn)榄h(huán)路而無限循環(huán)最多遍歷完全部節(jié)點(diǎn)就自然會停下來。不過為了更早地剪枝節(jié)省無謂的 IO還可以在迭代 SQL 里加一個(gè)路徑字段用find_in_set判斷當(dāng)前節(jié)點(diǎn)是否已經(jīng)出現(xiàn)在路徑上。這種做法的代價(jià)是每行都要攜帶一段路徑字符串層級很深時(shí)字符串會很長影響性能。我的經(jīng)驗(yàn)是一般組織架構(gòu)類數(shù)據(jù)層級小于 20 層用路徑檢測沒問題如果是 BOM 展開這種層級可能上百的場景僅靠總表過濾就夠了路徑檢測不做也罷。下面是我在實(shí)際腳本里用的兩個(gè)終止條件本輪增量為空說明已經(jīng)遞歸到底了正常結(jié)束。迭代次數(shù)達(dá)到預(yù)設(shè)的MAX_LOOP說明可能存在異常數(shù)據(jù)比如深層次環(huán)強(qiáng)制退出并告警。3.3 數(shù)據(jù)傾斜與發(fā)散節(jié)點(diǎn)的處理思路遞歸迭代中最容易出性能問題的是“發(fā)散節(jié)點(diǎn)”。舉個(gè)例子某個(gè)根部門下面掛了十萬個(gè)葉子部門那某一輪迭代中這十萬條子節(jié)點(diǎn)記錄會全部由這一個(gè)根部門產(chǎn)生。在 Hive 的分布式計(jì)算模型下這意味著某一個(gè) Reduce 要處理巨大的數(shù)據(jù)量跑得比其它所有 Reduce 都慢也就是典型的數(shù)據(jù)傾斜。處理思路有幾種對關(guān)聯(lián)鍵做加鹽處理把大節(jié)點(diǎn)的數(shù)據(jù)打散到多個(gè) Reduce。拆根并行。如果業(yè)務(wù)允許把不同的根節(jié)點(diǎn)分組拆成多個(gè)獨(dú)立任務(wù)并行跑。如果增量表和關(guān)聯(lián)表都不大比如小于 2GB直接加MAPJOIN提示把關(guān)聯(lián)表加載到內(nèi)存里繞開 Shuffle。另外還有一個(gè)容易忽略的問題臟數(shù)據(jù)導(dǎo)致的“假發(fā)散”。如果源表里存在大量parent_dep_id為空字符串或特殊字符的孤兒節(jié)點(diǎn)它們會在某一輪被同時(shí)關(guān)聯(lián)出來造成一輪迭代的數(shù)據(jù)量暴漲。建表時(shí)對這種情況要有心理準(zhǔn)備清洗數(shù)據(jù)的時(shí)候要一并處理。4. 實(shí)操全流程完整跑通一個(gè)部門樹遞歸展開下面用一個(gè)經(jīng)典場景——部門樹展開——走一遍完整流程。假設(shè)有一張部門關(guān)系表ods_dep_rel我把它簡化成下面這種結(jié)構(gòu)CREATE TABLE IF NOT EXISTS ods_dep_rel ( dep_id STRING COMMENT 部門id, parent_dep_id STRING COMMENT 上級部門id, dep_name STRING COMMENT 部門名稱, project_id STRING COMMENT 業(yè)務(wù)線標(biāo)識 ) COMMENT 部門關(guān)系原始表 PARTITIONED BY (dt STRING COMMENT 數(shù)據(jù)日期) STORED AS ORC;需求非常明確給定業(yè)務(wù)線project_id找出每個(gè)根部門下所有層級的子部門并記錄每個(gè)子部門相對于根部門的層級深度。4.1 初始化 SQL生成第 0 層數(shù)據(jù)第 0 層就是根節(jié)點(diǎn)。實(shí)際業(yè)務(wù)里根節(jié)點(diǎn)的定義可能不同有的是parent_dep_id IS NULL有的是parent_dep_id 還有的是設(shè)置了專門的根標(biāo)識字段這里以最常見的parent_dep_id IS NULL為例。-- init_dep_tree.sql INSERT OVERWRITE TABLE tmp_dep_tree_prev SELECT dep_id AS root_dep_id, dep_id AS dep_id, dep_name AS dep_name, 0 AS loop_id, cast(dep_id AS STRING) AS path_str FROM ods_dep_rel WHERE dt ${hiveconf:dt} AND project_id ${hiveconf:project_id} AND parent_dep_id IS NULL;這輪產(chǎn)出的tmp_dep_tree_prev表既是初始結(jié)果集也是第一輪迭代的增量輸入。-- 創(chuàng)建結(jié)果總表如果不存在 CREATE TABLE IF NOT EXISTS tmp_dep_tree_total ( root_dep_id STRING, dep_id STRING, dep_name STRING, loop_id INT, path_str STRING ) STORED AS ORC;然后把初始數(shù)據(jù)寫入總表INSERT INTO TABLE tmp_dep_tree_total SELECT * FROM tmp_dep_tree_prev;注意這里用的是INSERT INTO因?yàn)榭偙硎侵疠喿芳拥摹?.2 單輪迭代 SQL增量展開的核心邏輯每一輪迭代的核心 SQL 是同一套邏輯只是輸入表不同。落到腳本里我寫成參數(shù)化的 SQL 文件-- expand_once.sql -- 輸入tmp_dep_tree_prev上一輪增量 -- 輸出tmp_dep_tree_cur本輪新增量 INSERT OVERWRITE TABLE tmp_dep_tree_cur SELECT t.root_dep_id AS root_dep_id, c.dep_id AS dep_id, c.dep_name AS dep_name, t.loop_id 1 AS loop_id, concat_ws(,, t.path_str, c.dep_id) AS path_str FROM tmp_dep_tree_prev t JOIN ods_dep_rel c ON t.dep_id c.parent_dep_id LEFT JOIN tmp_dep_tree_total total ON c.dep_id total.dep_id AND t.root_dep_id total.root_dep_id WHERE c.dt ${hiveconf:dt} AND c.project_id ${hiveconf:project_id} AND total.dep_id IS NULL AND NOT find_in_set(c.dep_id, t.path_str) 0;這段 SQL 里最核心的是三個(gè)地方JOIN以上一輪增量表的dep_id去匹配源表的parent_dep_id找到所有直接子節(jié)點(diǎn)。LEFT JOIN ... WHERE total.dep_id IS NULL過濾掉已經(jīng)在結(jié)果總表里出現(xiàn)過的節(jié)點(diǎn)這就是上面說的防環(huán)路、防重復(fù)。find_in_set(c.dep_id, t.path_str)從路徑上再做一次檢查防止環(huán)路在極深路徑下帶來額外的重復(fù)計(jì)算。每個(gè)細(xì)節(jié)都很重要。LEFT JOIN的過濾條件必須同時(shí)帶root_dep_id否則不同根節(jié)點(diǎn)下出現(xiàn)同一個(gè)部門 ID 時(shí)會被錯誤過濾掉導(dǎo)致結(jié)果缺失。4.3 Shell 循環(huán)控制腳本讓迭代自動收斂有了初始化 SQL 和單輪迭代 SQL剩下就是把循環(huán)串起來。我用的是 Bash 腳本 hive -f的方式每一輪迭代完成后檢查增量條數(shù)決定繼續(xù)還是終止。#!/bin/bash # 遞歸計(jì)算 2.0部門樹自動展開 set -e DT2024-01-01 PROJECT_IDP001 MAX_LOOP50 CUR_LOOP0 HIVE_CONF-hiveconf dt${DT} -hiveconf project_id${PROJECT_ID} # 1. 初始化第 0 層 hive ${HIVE_CONF} -f ./init_dep_tree.sql hive ${HIVE_CONF} -e INSERT INTO TABLE tmp_dep_tree_total SELECT * FROM tmp_dep_tree_prev; # 2. 循環(huán)迭代 while [ ${CUR_LOOP} -lt ${MAX_LOOP} ]; do echo Loop: ${CUR_LOOP} # 執(zhí)行單輪擴(kuò)展 hive ${HIVE_CONF} -f ./expand_once.sql # 統(tǒng)計(jì)本輪增量行數(shù) INC_CNT$(hive -S ${HIVE_CONF} -e SELECT count(1) FROM tmp_dep_tree_cur; | tr -d ) echo Increment count: ${INC_CNT} if [ ${INC_CNT} -eq 0 ]; then echo No new increment, recursion finished. break fi # 合并增量到結(jié)果總表 hive ${HIVE_CONF} -e INSERT INTO TABLE tmp_dep_tree_total SELECT * FROM tmp_dep_tree_cur; # 輪轉(zhuǎn)表當(dāng)前增量變?yōu)橄乱惠喌妮斎?hive ${HIVE_CONF} -e INSERT OVERWRITE TABLE tmp_dep_tree_prev SELECT * FROM tmp_dep_tree_cur; CUR_LOOP$((CUR_LOOP 1)) done # 3. 輸出最終結(jié)果 hive ${HIVE_CONF} -e SELECT root_dep_id, dep_id, dep_name, loop_id FROM tmp_dep_tree_total ORDER BY root_dep_id, loop_id; 這段腳本有三個(gè)經(jīng)驗(yàn)點(diǎn)值得分享tr -d 是必要的。hive -S -e輸出的count結(jié)果往往帶一些空白字符不清理直接做數(shù)值比較會出問題。用INSERT OVERWRITE TABLE tmp_dep_tree_prev SELECT * FROM tmp_dep_tree_cur做表切換而不是TRUNCATE后原地插入是為了保持上一輪數(shù)據(jù)直到本輪完全成功。一旦中間某一步失敗舊的增量數(shù)據(jù)還在排查和恢復(fù)都會容易很多。循環(huán)里沒必要用break后再單獨(dú)把結(jié)果導(dǎo)出去直接到最后統(tǒng)一輸出即可。4.4 結(jié)果校驗(yàn)確認(rèn)遞歸沒有算錯遞歸算完了怎么確認(rèn)結(jié)果對不對我的經(jīng)驗(yàn)是至少做兩層校驗(yàn)。第一層總數(shù)校驗(yàn)。用源表跑一個(gè)不依賴遞歸的聚合查詢比如每個(gè)部門的直接子部門數(shù)再和自己算出來的結(jié)果做交叉比對。如果源表本身有“該部門所有后代部門數(shù)”這樣的冗余字段校驗(yàn)會更直接。第二層層級校驗(yàn)。隨機(jī)挑幾個(gè)已知深度的部門對照結(jié)果表里的loop_id確認(rèn)深度是否正確。這一步雖然樸素但能有效發(fā)現(xiàn)初始化時(shí)根節(jié)點(diǎn)定義錯誤導(dǎo)致的全盤偏移。-- 校驗(yàn)示例檢查是否有節(jié)點(diǎn)的 loop_id 與路徑深度不一致 -- 正常情況下 path_str 里逗號的數(shù)量加 1 應(yīng)該等于 loop_id SELECT root_dep_id, dep_id, loop_id, path_str, (LENGTH(path_str) - LENGTH(REPLACE(path_str, ,, )) 1) AS path_depth FROM tmp_dep_tree_total WHERE loop_id ! (LENGTH(path_str) - LENGTH(REPLACE(path_str, ,, )) 1);這個(gè) SQL 利用了逗號計(jì)數(shù)的技巧很直觀。有經(jīng)驗(yàn)的讀者可能已經(jīng)想到這其實(shí)也驗(yàn)證了路徑拼接邏輯是否正確。5. 性能調(diào)優(yōu)與踩坑記錄2.0 方案里踩過的坑一點(diǎn)也不比業(yè)務(wù)邏輯少。選幾個(gè)最有代表性的寫出來。5.1 迭代輪次過多導(dǎo)致的小文件問題每一輪迭代都會生成一批新的 ORC 文件如果最大迭代深度是 30 層結(jié)果總表里會累積很多小文件。時(shí)間久了總表在做LEFT JOIN過濾時(shí)甚至?xí)驗(yàn)樵獢?shù)據(jù)膨脹而變慢。我的處理方式是在腳本結(jié)束后對結(jié)果總表做一次合并壓縮。INSERT OVERWRITE TABLE tmp_dep_tree_total SELECT * FROM tmp_dep_tree_total DISTRIBUTE BY root_dep_id;DISTRIBUTE BY root_dep_id會讓同一個(gè)根節(jié)點(diǎn)的數(shù)據(jù)落到同一個(gè) Reduce不僅合并了小文件還能讓后續(xù)查詢按根節(jié)點(diǎn)過濾時(shí)更快。5.2 大增量 join 時(shí)的任務(wù)卡頓當(dāng)某一輪增量特別大比如某個(gè)中間層節(jié)點(diǎn)數(shù)量暴漲時(shí)JOIN過程容易出現(xiàn)長尾。我踩過最厲害的一次是在第 4 層迭代時(shí)單個(gè) Reduce 跑到 3 小時(shí)沒結(jié)束。排查之后發(fā)現(xiàn)是數(shù)據(jù)傾斜一個(gè)超大父節(jié)點(diǎn)帶了幾十萬條子節(jié)點(diǎn)記錄全部路由到了同一個(gè) Reduce。解決方案是在迭代 SQL 的JOIN關(guān)聯(lián)鍵上做前綴加鹽或者直接把源表按parent_dep_id分桶。分桶后JOIN的 Shuffle 數(shù)據(jù)量會小很多實(shí)測性能提升非常明顯。不過加鹽方案會改變關(guān)聯(lián)邏輯對非傾斜節(jié)點(diǎn)來說反而增加計(jì)算量。我的建議是先通過COUNT按parent_dep_id聚合確認(rèn)傾斜節(jié)點(diǎn)的量級再決定是否加鹽不要盲目優(yōu)化。5.3 分區(qū)參數(shù)穿透導(dǎo)致的串?dāng)?shù)問題這個(gè)坑很隱蔽。在源表ods_dep_rel存在多分區(qū)的情況下如果迭代 SQL 里忘記寫c.dt ${hiveconf:dt}那么JOIN會掃描全分區(qū)。某一次我切換日期參數(shù)后忘了清理老的臨時(shí)表結(jié)果遞歸結(jié)果里混了上一個(gè)日期的歷史數(shù)據(jù)排查了很久。從那以后我養(yǎng)成了一個(gè)習(xí)慣所有迭代 SQL 的WHERE條件里源表分區(qū)條件必須寫全無論哪個(gè)環(huán)境執(zhí)行都能保證只讀當(dāng)天數(shù)據(jù)。5.4 常見報(bào)錯速查表報(bào)錯信息或現(xiàn)象可能原因解決辦法迭代一直不停止達(dá)到 MAX_LOOP存在深層次環(huán)路且總表防環(huán)邏輯有問題檢查LEFT JOIN的關(guān)聯(lián)條件是否帶了root_dep_id檢查源數(shù)據(jù)是否有自關(guān)聯(lián)某一輪增量數(shù)據(jù)暴漲臟數(shù)據(jù)導(dǎo)致發(fā)散節(jié)點(diǎn)或孤兒節(jié)點(diǎn)大量掛載清洗源數(shù)據(jù)剔除parent_dep_id為空的孤兒記錄對關(guān)聯(lián)鍵做分桶結(jié)果總表小文件過多每輪迭代產(chǎn)生新文件未合并結(jié)束后用INSERT OVERWRITE ... DISTRIBUTE BY root_dep_id合并count(1)判斷不準(zhǔn)導(dǎo)致提前退出hive -S -e返回字符串帶空格用tr -d 清理后再做比較不同根節(jié)點(diǎn)下相同部門被過濾LEFT JOIN條件漏掉root_dep_id補(bǔ)上AND t.root_dep_id total.root_dep_id定位不到數(shù)據(jù)問題臨時(shí)表太多搞不清哪張是上一輪數(shù)據(jù)固定使用prev/cur輪轉(zhuǎn)命名不要動態(tài)拼接表名6. 這套方案還能怎么擴(kuò)展如果只是做部門樹展開這套腳本已經(jīng)夠用了。但遞歸計(jì)算的場景遠(yuǎn)不止組織架構(gòu)。這里列幾個(gè)我實(shí)際做過的擴(kuò)展方向。6.1 BOM 物料多級展開BOM 展開和部門樹最大的區(qū)別在于子節(jié)點(diǎn)關(guān)聯(lián)父節(jié)點(diǎn)時(shí)還帶一個(gè)“用量”字段遞歸展開時(shí)要把路徑上的用量做乘積最終得到每一個(gè)末級物料的累計(jì)需求量。實(shí)現(xiàn)時(shí)只需要在迭代 SQL 的SELECT子句里多帶一個(gè)用量字段合并時(shí)做累乘即可。防環(huán)和終止邏輯完全復(fù)用。6.2 關(guān)系圖譜中的多度人脈查找比如“找出某個(gè)用戶 3 度以內(nèi)的所有關(guān)聯(lián)用戶”。這個(gè)場景本質(zhì)上就是限制深度的遞歸查找只需要在循環(huán)控制腳本里把MAX_LOOP設(shè)為 3并且在初始化 SQL 里固定好起始用戶即可。6.3 數(shù)據(jù)血緣追蹤數(shù)據(jù)倉庫的表和字段之間存在“上游依賴”關(guān)系想查某個(gè)指標(biāo)字段的完整血緣鏈路可以用同樣的迭代框架把“父節(jié)點(diǎn)”換成“上游字段”把“子節(jié)點(diǎn)”換成“下游字段”。血緣數(shù)據(jù)的層級往往很深而且環(huán)路的可能性比組織架構(gòu)大不少這時(shí)候雙表防環(huán)機(jī)制的可靠性就顯得格外重要。最后說點(diǎn)實(shí)在的這套 2.0 方案做完之后我再也沒有因?yàn)椤斑f歸查不出來”被業(yè)務(wù)方找過。回看整個(gè)優(yōu)化過程最值得投入精力的其實(shí)不是循環(huán)腳本本身而是對增量驅(qū)動和防環(huán)機(jī)制的理解。很多做數(shù)據(jù)開發(fā)的朋友一聽到 Hive 遞歸就想著去裝插件、換引擎其實(shí)標(biāo)準(zhǔn) Hive 的臨時(shí)表迭代方案處理絕大多數(shù)生產(chǎn)需求都足夠了。如果看完這篇文章你只想記住一個(gè)點(diǎn)那我建議記住這句迭代 增量表 結(jié)果總表過濾是 Hive 里做遞歸的通用范式。這個(gè)范式一旦建立起來不管遇到組織架構(gòu)、BOM 展開還是關(guān)系圖譜都能快速套用最多就是改改表結(jié)構(gòu)、調(diào)調(diào)終止條件而已。下一次再有人跟你說“Hive 做不了遞歸”你可以把這篇文章甩給他。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
91在线精品一区二区三区| 精品人妻一区二区三区蜜桃视频| www.久久制服糖| 中文字幕精品专区搜索结果91| 99久热| 内射小黄片| 96麻豆精品一区二区三区| 伊人991| 天天干天天做| 人、人、摸,人、人、草| 亚洲 无码 偷拍| 91美女视频电影| 亚洲熟久久| 欧插网站| 午夜精品久久久久久久男人的天堂| 天天综合网日韩7799| 久久超碰97| 一二区在线观看视频| 热久久九九热| 欧美日韩大陆黑人少妇99| 中文字幕91综合| 免费观看啪视频| 多乙久久久久久| 亚州免费啪啪视频| 国内自拍 日韩激情 99| www.色婷婷色综合| 久久99国产综合精品女同| 七久久久| 亚洲丰满很很操| 欧美偷偷网| 色五月激情AV在线| 97在线观看免费| 色妇91| 尤物视频一区| 殴美牲| 天天影视综合色| 久久久久久久久久久97| 久久日韩肥臀| 久久久91| 九九碰九九爱97超| 日韩三级在线观看网站| 国产亚洲日韩欧| 91亚洲欧美| 色香欲综合| 欧美精品97| 欧美激情精品| 1769一区| 丰满少妇乱子伦精品无| 狠狠狠狠狠狠| 青青草在线成人视频| 亚洲天堂女优在线| av日韩中文字幕| 日本三级精品| 88xx成人精品视频| 国产一区在线观看无码AV| 在线看片国产精品每日更新| 美女被艹尤物视频| 偷拍 精品另类 凸凹了四区| 极品白嫩福利在线| 1024手机看片欧美日韩| 99超碰网| 97人人夜夜精品视频| 377p欧洲日本亚洲大胆| 丁香六月啪啪| 欧美 日韩 国产传媒| 麻豆精品A片免费观看| 亚洲日产专区婷婷| 人妻天堂三区| 天天干人人干天天日97| 大奶尤物鲍汁淫荡欧美视频粉嫩夜夜骚| 国产一区二区三区,在线观看观看| 天美传媒av一区二区| 0755午夜福利视频| 久操不卡视频| 人人手机欧洲亚洲国产人妻| 天天干夜夜操一区二区| 亚洲一区二区三区春色| 中文字幕91综合| 欧美色图在线视频少妇| 国产白丝av| 亚洲色图日韩精品| 日日干日日操五月天伦理视频| 亚洲欧洲综合| 激情小说五月天| 综合日韩激情另类图片| 亚洲中文字幕一区二区| 嫩草影院在线观看精品| 啊啊啊在线观看免费视频| 亚洲精品久久久久久| 国产精品一区二区手机看片| 激情四射五月天| 97超碰色情| 国模少妇一区二区三区| 黑丝日韩av丝袜av| 欧美人与动性人交a| 操逼日韩无码| 青青草久久在线| 性爱网站一区二区| 欧美熟妇乱码在线一区| 91香蕉国产尤物视频| 国产吞精a级片激情电影| 乱理日韩中文| 亚洲色欧美| 五月丁香啪啪啪| 好爽免费视频,| 国产成人精品必看| 啊啊啊好舒服好爽啊啊啊视频| 夜夜嗨一区二区三区直播内容| 日韩久久.一级黄色片| 97操97色| 91内射| 亚洲日韩肥臀视频在线观看| 天天干18禁| 婷婷久久网| 九久久九九久视频| 久久五月份| 国产视频第二页| 人人扣人人操| 亚洲综合在线91| 黄片无码在线制服| 麻豆色99999| 国产成人无码久久精品| 欧美色蜜桃97| 青青青青草av在线观看| 操亚州| 欧美一区二区一级岛国大片| 中文字幕日韩精品一区二区三区| 视频一区二区三区精品| 97欧美久久久久久久| 男女性感激情网站| 97操97干| 日韩亚洲美州欧洲综三区一品在线| 日韩BBN| 91久久久久久| 97免费在线观看| 久久发布国产伦子伦精品| 人人搞人人插人人操| 欧美日日夜夜| 乱欲一区二区| 久久人妻熟女一区二区| 久久伦理视频久久大香蕉视频| 日韩无码黄色片| 超碰社区97| 婷婷五月天_亚洲小说欧美激情另类_精品久久国产字幕 | 99热免费| 国内毛片热久久思思热| 国产精品乱码久久久、久久| 婷婷伊人綜合中文字幕| 欧亚日韩中文在线| 超碰夫妻97| 91人妻尻屄视频| 97超碰9| 久久超碰、| 乳欲人妻办公室奶水| 在线小说视频一区| 丝袜喷水在线| 熟妇操花| 少妇国产不卡| 国产a级午夜毛片| 女性喷水高潮在线观看| 97在线资源| 大香蕉丝袜一级片| 国产操伦| 神马久久久久久久| 欧美一区二区| 亚洲综合一| 亚洲AV小说| 成人性爱av| 清纯唯美激情| 欧美一区二区三区黄色影视| 熟妇最新先锋一二三区| 亚洲精品中文字幕一区在线视频| 伊人一级免费黄片| 久久高潮妇女视频| 日韩青久久| 欧中日成人免费影视| 日韩中文字幕二区| 国产成人精品日本亚洲语言| 国产高清免费不卡av| 蜜臀99久久精品久久久懂爱| 超碰在线日韩一区| 肉丝中文无码高清| 97超碰超欧美。| 澳门人妻久久| 日本99一区二区| 四虎 精品 WWW| 婷婷91| 岛国视频免费在线观看| 人人贴人人摸| 日本熟女免费視颖| 色吧5亚洲| 91老司机视频| 白嫩少妇| 国产黄片精品在线| 成人小说视频在线精品欧美| 午夜视频好爽啊| 玖玖综合色| 精品网站9999| 91欧美另类| 天堂国产AV| 韩国女主播青草福利视频| 色999人与兽| 激情五月激情综合网| 日本污ww视频网站| 亚洲欧美大| 99热网站| 99re不伦| 91爱做| 日韩精品作爱导航| 亚州九九九精品视频| 亚州欧美综合| 国产青青综合伊人| 东京热,男人的天堂| 高清无码91| 亚洲高清综合网| 后入国产| 欧美老妇曰批的视频| 亚洲中文字幕久久人妻| 午夜影美女日鸡鸡天天视频国产| 极品极品色影院| 国产精品老师| 日本91白丝| 精品一区二区麻豆| 中文字幕国产| 女人综合网| 国产无码三级视频在线观看| 欧美国产精品| 99久久综合网| 无码人妻一区二区一牛影视| 香蕉色网| 91丝袜美女视频| 亚洲小电影免费涩涩成人在线高清| 歐美性天天| AV色五月天| 国产欧美日产一区二区三区 - 国产欧美日 | 乱精品一区字幕二区| 亚洲人成色9999精品久久| 青青青国产| 欧美色图 人妻| 疯操AV| 久久精品熟妇丰满人妻99| 四虎午夜影院| 亚码激情| 国产精品久久久久久9999| 97欧美日韩综合| 国产成人无码a| 另类一区| 亚洲欧美性生活| 丝袜色综合| 久久内射| 无码精品人妻一区二区三区妖精| 蜜臀久久99精品久久久久久久久| 夜草欧美| 91精品国产91久久青草| 天天草天天干天天日| 91AV老熟女视频| 亚洲人精品午夜不卡| 久久久久久九九九九| 欧美黄色手机在线观看| 久久久激情| 久久久不卡区一区二区三区久久久| 日本精品一区二区三| 欧美一级黄色免费专区| 久久久久久久一级黄色打同平台| 一二区在线观看视频| 日韩黄片影院| 男人天堂欧美| 国产精品大香蕉| 久久综合久色欧美综合狠狠 | 日韩A优精品在线观看| 成年女人一区| 蜜臀99久久精品久久久久久| 操逼操网| 91/欧美| 中文字幕丰满子伦无码专区在线视频最新| 五月婷婷AV| 金典av| 99亚洲精品| 91oumei| 破处bbq| 国产精品自拍xxxx| 精品亚州18| 99久久国产精品免费高潮| 99热66| 加勒比色99999| 国精精品无码一二三区水多多| 国产精品网站免费| 国产美女mm131爽爽爽爽| 超碰这里只有精品| 在线无码网站| 欧美在线 亚洲| 午夜无遮挡男女啪啪视频| 中日无幕一二三四区| 91第一页| 欧美激情片一区二区| 香蕉国产精品麻豆亚洲欧美日韩| 亚洲官网在线| 青娱乐国产精品| 天天舔天天日天天射| 可能人人看人人摸| 亚洲欧美91√| 国产成人+综合亚洲+天堂| 情色大香蕉| 另类在线| 国产强奸乱伦xd| 欧日韩在线观看| 精品偷拍13p欧美dodk视频| 久久6热精品99视频| 另类小色呦| 日韩久射综合| 午夜久久一区二区无码中出| 麻豆国产视频精品观看| 天天操熟妇| 男人的天堂不卡一区二区 | 亚洲精品 大香蕉| 亚洲欧美另类激情小说| 中出789在线视频| 欧美性爱日韩性爱| 992视频一区| 91久久国产综合久久| 狠狠操,使劲操| 蘋果手機免費看成人Av| 成人五月香网在线| 超碰人人操97碰| 蜜桃午夜视频一区二区 | 丝袜足交视频| 99999这里都精品| 五月丁香婷婷色| 色欲天天综合久久久无码网中文| 人妻五十路在线| 久久久A∨| 欧美高清无码免费视频高清版| 午夜福利区| 丁香五月天堂| 夜间福利片1000无码| 日韩91网站| 91爱欧美| 丝袜综合色图| 97久久视频| 亚洲啪AⅤ永久无码| 中出20p| 99自拍B亚洲| WWW黄片COM| 欧美日韩大香蕉| 97久操| 骚熟女吞| 精品人妻夜夜草| 簧片免费看视频| 无码 黑人一区二区三区| 91岛国动作片| 欧美黑人熟妇精品91| 98福利在线视频| 欧美 传媒 麻豆 日韩 偷拍| 久久国产99精品72福利| 久久综合五月天| 日韩一区二区高清在线观看的| 天天爱天天操| 亚洲情色 欧美| 超碰日韩美妻| 久久草视频污视频| 超碰日韩美妻| 欧美大片一区二区三区| 内射卯月麻衣| 色网综合网| 色诱avtt| 麻豆AV96熟妇人妻| 97爱爱爱综合| A V少妇特黄三级| 国产一区二区在线电影| 色五天伊人| 久久精品人人做人人看| 免费观看日本操逼视频| 农村女一级毛卡片| 黑人猛交| 一级毛片电影免费看| 久久精品店| 麻豆亚洲AV成人无码久久精品| 亚欧美综合| 噜噜瑟| 女人18精品一区二区三区| 经典丝袜一区| 少妇高潮喷水无套久久久久久| 亚洲精品一卡二卡三卡福利视频网站 | 啊啊啊不要好爽日韩无码一区| 九九九午夜| 欧美最婬乱婬爆婬性视频 | 丰满人妻一区二区三区在线| 久久久艹艹艹| 久久亚洲天天做| 亚洲限制级| 天天摸天天舔天天操| 欧美亚洲AN| 亚洲天天影视色综合| 制服丝袜第二页| 东京男人天堂| 99热| 国产AV激情无码久久无码 | 欧美成人亚洲精品| 99黄页网站| 九九久精品| 久操免费观看| 女人与公拘交酡2020视频| 国产av激情无码久久天堂| 国产性久久久| 97 亚洲 日韩 欧美 在线| 9 9无尺码天堂网| 台湾佬中文娱乐网久久久久久久久久com | 狠狠操综合| www.狠狠| 亚洲男人的天堂一区二区| 国产农村妇女精品一| 欧美97视频| 干美女人妻| 日韩一级二级三级在线不卡观看完整| 亚洲97成人在线观看| 色欲无码人妻日韩欧美精品| 立川理惠加勒比无码| 伊人激情| 久久99999| 久久9久久| 国产高清吃奶免费视频网站| 黄色av一区二区在线| 大香樵伊人网| 精品一区二区三区四区外站| 91国模| 一区二区三区探花在线观看| 人妻熟女一区在| 精品国产国产AV| 九九九精品美女| 日逼逼免费看| 观看免费区二区三区二| 91欧美经典| 懂色av色欲av蜜臀av| 玖玖97综合 | 国产无码精品无码| 在免费jIzzjIzz在线视频| 亚洲综合色男人网| 日本亚欧爱爱| 国产女人高潮嗷嗷嗷叫小说| 久久久久13| 免费国产| 日韩欧美中文日韩欧美色| 蜜桃精品一区二区三区ww| 男人的天堂kva| 国内毛片无遮挡国产| 大奶啊啊好爽| 久久久久久久唑| 久久久九九网站| 91艹| 日本操逼二区| 国内97干免费看| 韩国一级做a久久久久| 大香网伊人久久综合| 欧美高清在线| 欧美顶级黄色大片免费| 亚洲资源网| 久久久久久久久久久免费精品| 天天爽爽爽爽| 国产精品一区二区密臀| 欧美十八禁在线看| 亚洲天天自拍| 99久久九九| 人妻激情视频| 五月天激情小说| 久久亚洲一区女同性恋中文字幕| 亚洲高清无码AAA久久久精品| 神马久久69| 国产免a费看黄片在线| 亚洲吊色| 近亲乱伦一区二区| yazhouzaixian| 国产精品秘 福利姬在线观看| 免看60秒涩涩视频| 中文字幕一区日韩精| 天天干1区2区在线| 国产激情在线观看| 综合色区偷拍| 欧洲综合视频| 九色精品视频导航1| 无码人妻精品一区二区三区九九| 日本色色色视频| 亚洲女人毛茸茸91| 色综合色| 国产精品白领在线观看 | 97在线视频网站| 中亚av| 亚洲欧美日韩制服另类| 欧美激情一区二区| 99re8免费高清在线| 91丨豆花丨熟女| 精品中文一区二区| 99精品九九九九九九| 亚洲素人综合| 操婷婷逼| 国产精品国产亚洲区艳妇糸列| 操人妻丝袜高跟| 免费一级性爱久久| 国产9熟妇视频网站| 蜜臀久久久久久999| 91丨九色丨国产丨人妻在线| 亚洲精品97p| 97网址www| 啪啪视频亚洲第一| 欧美性色欧美| 嗯嗯啊啊好疼| 97人人干| 日本三级一区二区 在线| 狠狠97| 观看免费区二区三区二| 夜嗨影院| 欧美性爱第一页久久| 欧美大色交| 久久熟女人| 人人操人人操草草| 亚洲自拍偷拍视频在线| 亚洲熟女乱综合一区二区在线-...亚洲国产日韩欧美一区二区三区,久久久久久精 | 五月天激情国产综合婷婷婷| 黄色av网站在线播放| 久久亚洲一区女同性恋中文字幕| 91暧暧| 日本黄 R色 成 人网站| 婷婷丁香九月| 男女一进一出视频久久| 亚洲熟女一区二区| 欧美日动态视频| 国模限制级电影| 黄色性爱网网| 999精品国产高清一区二区| 欧美丝袜91| 亚洲熟久久| 成人AV素股で擦久久| 深田咏美亚洲精品福利社| 免费国产电影一区二区| 天天综合欧美| 日本二三四区| 少妇色欲综合网2| 大屁股国产在线视频| 婷婷五月天久久精品视频一区二区三区| 色情五月丁香| 国产女人成人精品视频| 中文字幕亚洲热播人妻 | 久久久婷| 97高清啪啪| 亚洲欧美九九| 欧洲综合视频| 亚洲人精品久久久喷水| 99re视频在线观看这里只有精品| 一区三区啪啪| 日操粉逼逼| 国产日韩欧美中文在线播放| 性爱视频免费网址| 国产精品麻豆免费视频| 中文字幕日韩精品久久| 无码高清操逼网址| 亚洲伊人a线观看视频| 婷婷av在线中文字幕| 大香蕉一级黄色片久久| 亚洲欧美电影| 欧美亚洲自拍另类人妻| www.色吧5.com| 久久久成人国产精品无码| 久久久久久亚洲Av无码| 日本三级久| 色色99| 99久久网站| 久久五月丁香| 青青11操操操操操操操操| 色色色色色色色色色色色色色色综合| 99亚亚热| 欧美亚综合色图| 日韩激情视频| 天天躁夜夜躁狠狠躁AV| 婷婷10月天青娱乐| 婷婷久月| 人人操人人操人人人操| 黄色网址在线免费观看| 国产精品无码AV网站| www…国产操逼| 国产刺激视频| 亚洲色香| 91美女精品| 欧差乱伦二三| 国产高清在线观看欧美| 啪啪啪综合网| 欧美色66| 中 文字幕一区二区三四 五 区日 日 骚| 在线 制服丝袜中出 人妻| 久久99操天天日| 一区二区三区日韩欧美 | 性欧美| 97国产超碰| 精品人妻1区| 久久人人爽人人爽人人片Ⅴ| 欧美熟妇视频| 超碰视97中文| 91香蕉国产尤物视频| 亚洲欧美自拍偷拍| 啊啊啊啊嗯嗯嗯用力好爽 | www.99热在线只有精品| 久9爱精品| 强奸乱伦AV一天堂网| 亚洲成人福利电影免费| 91亚州日韩高清| www.男人天堂| 精品视频在线观看| 婷婷深爱五月| 91高跟美女在线播放| 72av视频| 国产午夜无码片在线观看影视| 蜜臀少妇一区二区| 极品色电影院| 青青操网| 熟妇熟女视频一区二区三区| 91亚洲丝袜| av毛片aaaaa免费看| 婷婷丁香五月激情啪啪| 情色五月天网| 欧美十八禁视频| 插入综合网| 天美久久久久| 天天天天天天天天天天干美女| 91黑丝少妇| 超碰在线91| 熟女突然公开看18禁影片| 欧美在线55555| 成 人 A V免费视频在线观看| 人妻人人操| 屁股久久久久久久久| 内射老妇BBWX0C0CK| 91亚·色| 欧美少妇色图| 超碰人人妻| 美女好片色日本| 两性综合网| 激情四射婷婷六月天| 无码逼| 欧美日韩青操| 亚洲第一精品在线视频| 久草男人天堂| 亚洲va有码在线天堂| 久久久久久中文版| 91东京热男人的天堂| 96AV久久久| 亚洲欧美日韩制服另类| 国产白领连续中出在线观看| 欧美欧美啪啪视频| 日本天天人人狠狠在线日美女 | 婷婷九月色| 欧美激情内射| 日日日日日| 欧美色女人| 日本天堂网| 九九精品无码专区免费| 成人热久久精品| 26uuu性| 天天综合网亚洲综合网| 日本午夜福利影院| 久久香蕉国产线看观看亚洲女人| 五月丁香啪啪| 精品一区二区三区免费古装毛片香港三级日本三级人妇 | 高清成年美女黄网站免费大全 | 久久久久亚洲| 97超碰色屌| 精品中文字幕第一页| 欧美亚洲国产日本在线,久久精品国产| 性影在线视频| 国产深喉| 91人妻超碰| 欧美黄色大片在线观看 | 国语av最新自产拍在线观看| 中文字幕欧洲有码| 口爆综合网| 成人av在线播放| 欧美中字不卡| 一区二区你上我| 午夜男女爽爽爽影院视频| 欧洲精品一二三在线| 国产无套粉嫩白浆在| 老妇女91| 热热热热日日漂亮永久永久国产日| 黄色AAAAA欧美| 青草伊人网| 欧美日韩理论一区| 美国日韩黄色片| 热99这里有精品综合久久 | 99丝袜福利在线播放| 黑人白女精品一区| 男人天堂2019| 97超碰免费人人性爱| 亚洲久热| 久久美女国产| 日本成人在线不卡一区二区三区| 欧美日韩天堂| 精品熟女一区=区三区| 无码人妻丰满热妇又大又粗| yiqicaoav| 欧美色吧综合| 99黄页网站| 中文字幕老熟妇黄色视频| 韩国成人精品久久久免费看| 国产精品国产精品国产| 亚州欧美综合| 麻豆性爱视频在线播放| 激情五月激情综合网| 日韩亚洲精品一区二区| 天堂无码| 久久精品28| 精品中文一区二区| 国产欧美日韩臀| 女同在线视频一区| 色婷网| 岛国视频一二三区| 麻豆国产97在线| 日本加勒比无码专区| 999九九九九国产动| 亚洲男人天堂2016| 亚洲国产剧情少妇激情| 天天摸,夜夜摸| 97婷婷色| 欧美性色综合网| 日韩精品区二区三区不卡| 精品久久人妻成人网| 在线免费观看日韩一区| 澳门黄片一香蕉视频| 狠狠爱综合网| 五月天亚洲色图| 粉嫩av一区二区三区天美传媒| 十八禁一区二区无码观看| 国产精品网站免费| 久久最新视频免费观看| 有码免费观看| 青青操97| 超碰 另类 欧美| 亚洲国产综合久久天堂| 无码99| 日本天天人人狠狠在线日美女 | 禁十八久久| 国产一区二区三区不卡手机在线| 少妇免费视频| 强奸少妇AV导航网| 伊人97色天使| 少妇与黑人高潮在线| 中文字幕在在线观看网站| 欧美亚男人的天堂| 日韩精品高清资源在线| 青青草视频爽一爽| 少妇人妻无码| 日本熟妇精品九九| 亚洲女人毛茸茸91| 插插综合网天天影视网| 91欧美网| 久久精品人妻一区| 成人26uuu| 亚一综合久久久久久久久久| 久久久久久国产精品免费网站 | 粉嫩AV一区二区夜夜| 狠狠爱夜夜| 极品国产内射| 国产一区二区三区白丝| 色噜噜精品一区二区三| 欧美视频在线视频免费va| www.婷婷| 草久久久| 日韩欧美天堂| 亚洲丝袜诱惑| 第四色奇米影视777| 日本人人操人人操| 国产av尤物| 日本999精品视频| 91九九九吃| 精品国产乱码久久久| 超碰在线人人射| 亚洲蜜乳av| 在线播放中文字幕| 国产农村妇女精品一| 九九九精品色乱九九九| 伦理第一页| 国产日韩手机视频在线| 四虎影院成年人片| 啊嗯好大视频在线观看| 欧美性五月| 欧美成人一级麻豆| 大色综合网| 清清一区二区三区四区不卡视频| 亚洲精品一区二区免费在线观看| 91熟女丨老女人| 黄色av网站在线播放| www久| 亚洲色91C| 超碰欧美97| 婷婷丁香五月天综合东京热| 日韩AV电影网站| 加勒比综合a∨| 男女一进一出视频久久| 亚洲精品人妻吞精av| 午夜福利久久久噜久噜久久综合| 九九九九九九免费视频| 96久久久久久久| 日韩精品人妻一| 国产a级精品| 夜夜欧美| 美女被艹尤物视频| 另类图片亚洲加勒比另类图片亚洲加勒比另类图片亚洲加勒比 | 日本一级二级三级网站| 欧美日韩免费专区在线| 91 天天综合| 久草精品一区| 久久午夜色播影院免费高清| 日韩av在线播放不卡| 国产精品suv一区| 少妇熟女一区二区三区| 91n免费处女| 国产剧情在线| 欧美黄色片AAAAA| 超碰久超碰久| 亚洲天堂AV在线播放| 日韩专区数据列表-第3230页-精品国产一区二区三区香蕉 久久99熟女人妻中文字 | 久久一二区四| 久热热| 无遮挡猛进视频免费无限观看| 欧洲与亚洲欧美精品中文字幕| 欧美组图日韩亚洲中文字幕| 99热在线播放| 亚洲黄色电影| 狠狠综合| 78精品| www.99热| 久久超碰com| 九九av| 亚洲高清综合网| 五月婷婷五月天| 少妇无码999| 国产精品色| 久久久久国产一区二| 男人的天堂2018.| 欧美日韩欧美| 日本三级日本三级99| 久久少妇人妻| 久久 国产 无码| 9久久9综合| 12一15性XXXX粉嫩国产| 人妻天天爽夜夜爽爽| aa片毛片| 国产天天骚| 黄色成人网久久久久久| 成人女人国产| 国产一区二区三区白丝| 日本最新免费韩国1区2区视频播放| 人人操人人色网| 久久久久骚| 一区二区三区视频| 人人污日韩一区二区| 日韩免费簧片| 久久婷婷亚洲欧| 51一区二区三区| 亚洲影视第一页| 久久久久久人妻| 中文字幕三四区| 99国产精品久久久久久久成人热| 7777奇米影视久久| 九九九九一级| 久久97| 国产精品熟女一区二区三区| 69AV女优男人的天堂| 少妇一级婬片免费放一级a性色.| 亚洲综合一| 色欲天天综合网| 国产精品999aaa| 天天色怡春院| 激情久久久| 久久综合婷婷| 亚洲精品一二牛牛| 91网站在线播放| 五月综合久久| se吧提供91精品国产91久久久久久| 乱久久久| 狠狠五月天| 强奸乱伦AV网址| av2014 日韩在线中文字幕| 日韩无码嘿咻黑热久| 久久九九国产精品| 91精品久久久久久久久久| 国产伦精品一区二区三区在线观| 少妇综合网| 一区二区三区精品黑丝白丝酒店对鸡| 亚洲欧美激情小说| 在线人妻熟女一区二区三区四区五区| 国产91啪| 97干97色| 校园春色家庭伦理欧美激情| 美女尤物福利视频| 久草视频在线视频在线视频在线观看 | 97亚洲国产| 日本青青草在线| 精品国产片亚洲一区| 国产无码久久高清| 好涩综合| 999九九精品| 国产精品对白内射| 自偷自拍的亚洲视频| 在线播放免费av福利片| 美欧色综合| 操老熟女AV| 国产亚卅97| 嗯嗯啊中文字幕| 国人欧美精品一区二区| 精品无码一区二区三区| 美女性91| 中出在线视频| 超碰中文字幕人妻草一区| 成人综合色网| 大屁股xxxxx| 日韩精品黄片免费观看| 偷拍三区| 国产精品一二三区18| 亚洲熟女综合网| JuliaAnnXXX888| 超碰97资源网亚洲| 日韩一级二级三级免费看完整版国语版 | 日韩精品在线放| 偷拍亚洲| 91欧美综合| 亚洲欧洲综合成人av一区| 人人看人人插| 亚洲色宗合| 国产区在线| 淫穴高潮色图| 欧美青青草视频| 亚洲成人妻日韩在线| 久久天天躁日日躁狠狠躁 | 亚洲欧美日韩电影网站一区 | 97免费视频在线观看| 性高潮久久久| 日日玩天天干| 超碰97 线线 在现| 中文字幕人妻丝袜乱一区三区| 九九热精品视频六| 成人精品视频一区二区| 淫穴高潮色图| 男人的天堂在线2| 乱伦色图网址是多少| 日韩AV一区二区三区四四| 亚洲日韩美女丝袜美腿人妻视频| 久草成人影片| 中文在线视频| 亚洲精品一卡二卡三卡福利视频网站 | 91亚洲色人| 国产无码三级视频在线观看| 亚洲动态色图| 久久精品| 国产高清吃奶免费视频网站| 老司机天天操| 国产精品麻豆视频网站| 成人八戒网站| 精品成人av一区二区三区在线| 亚洲综合中文字幕有码| 久久女婷| 懂色综合久久久| 一牛影视久久久一区二区三区| 久久女人视频| 97在线欧洲| 操91| 凌辱美少妇久久aV| 97超碰人人操人人操| 老司机深夜18禁污污网站| 日韩美女操b| 国产大学生高潮在线播放| 久久香蕉网| 人妻在线臀日韩| 夜夜综合| 精人妻一区二区三区| 火箭成精品视频884必出精品| 思思热国产高清| 久久国产免费激情视频| 午夜福利视频在线一区| 色999五月色| 日韩人妻操B| ai欧美亚洲小说| 免费视频观看60秒| 91看黄片| 欧美精品自慰系列寂寞少妇| 亚 欧 美 综合| 人妻人人澡人人爽人人| 天天综合,91入口| 国产一区二区二区按摩精品啪视频| 亚洲欧美色图小说| 欧美网站免费| 亚洲不卡av在线| 大香蕉日韩欧美| 91精品无码久久久久久久| 人妻中文字幕日韩电影| 99热免费| 久久九九久精品国产尤物|国产精品爽黄69天堂A片潘金莲,国产亚洲精品第一综合 | 欧美熟女少妇| 天天色踪合| 搡老女人老熟女91| 影音先锋中文字幕日本好一区二区| 人妻激情另类| 久久精品男人的天堂| 久久性爱视频免费看| 国产精品岛国片在线观看| 亚洲 中文 女同| 青青草华人在线欧美在线| 欧洲在线性爱视频| 亚洲av无码成人精品国产| 午夜精品久久久久久久99热影院| 99re99在线视频| 亚洲精品一二区| 嗯嗯嗯啊啊啊在线免费观看| 天美麻豆黄色录像| 99久久精品欧美国产| 99热这里| 夜夜骑日日| 99精品欧美一区二区三区桃色| 色妹子A V| 久夜操| 人人操人人大香蕉| 国产乱码精品久久久久久| av影片在线观看不卡| 五月天激情四射| 9ⅰ久久久天天| 国产成人欧美一区二区三区的国产| 日韩情色视频| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区 | 蜜臀精品1区2区| 午夜福利激情在线视频| 按摩中文字幕| 蜜臀一区二区三区亚洲最新章节在线观看 - 高清蜜臀一区二区三区亚洲全集播放 | 亚洲色图欧美一区二区不卡| 国产激情综合| 综合色久欲| 久久精品国产亚洲AV片多多| 久久精品免视看国产成人﹣蜜臀av一区. 久久精品免视看国产成人,蜜臀av一区 | 老熟女搡BBBB搡BBBB视频| 日韩亚洲美女一区久久| 999久久久国产精品| 婷婷五月天影院| 久久婷婷一区| 亚洲欧洲综合视频在线| 夜夜国自区| 日本 欧美 国产一区| chaopen97久久| 色婷婷五月综合激情中文字幕| 97视频在线观看网站| wwwcaobibi| 久久九九久精品国产尤物|国产精品爽黄69天堂A片潘金莲,国产亚洲精品第一综合 | 神马久久久久久久久久久久| 91被操| 麻豆一区二区三区精品| 国产精品视频麻豆入口| 超碰午夜| 97最新在线播放视频| 揉揉揉夜夜| 婷婷五月天_亚洲小说欧美激情另类_精品久久国产字幕 | 黄色成品网站| 人人操,人人插| 吉川爱美亚洲二区在线 | 啊啊啊啊啊啊啊在线| 人人操人人摸人| 精品国产乱码久久久久久久| 狠狠狠狠狠狠| 国产又粗又大硬免费色网视频| 国产人伦精品一区二区三区 | 91久久18禁| 久久久无码av精| 久草色在线观看| 欧美午夜精品久久久久久3D| 日本精品一级二级三级| 操亚州| 亚洲一区中文字幕一区| 免费国产视频| 超碰 av 女人天堂| 人人干人人搞人人摸| 国产精品乱码久久| 亚洲综合影片| 97国产高清视频在线观看| 伊人性在线视频| 啊啊啊啊啊啊啊国| 一本精品日本在线视频精品| 欧美女同在线| 九九视品黄色| 操逼逼中文字幕| 欧色网址| 色 亚洲 91| 狠狠操狠狠插| A级毛片在线看免费| 超碰偷拍| 日本九九久久99播| 无码乱人伦中文视频| 极品另类| 99re在线视频这里只有精品| 天天插天天舔舔天天干| 自拍偷拍 日韩无码| 国产精品国产精品国产| 精品美女久久一二三| 六九九九| 国精精品无码一二三区水多多| 加勒比综合88| 91N综合网在线| 黄色成品网站| 日本天天色| 亚洲暴力强奸AV| 翔田千里A片一区二区| 性欧美| 男人的天堂在线| 精品久久99| 婷婷五月av| 99精品久久久久久久婷婷| 香港澳门日本三级网站| 视频二区美腿制服人妻欧美| 97公开久久| 啊啊啊啊啊在线观看网址 | 亚洲精品 欧美97色色| 久久日本熟女精品一区| 亚洲天堂性爱| 婷婷丁香久久| 亚洲精品第一| 美国精品国产精品| 性夜影院爽黄A爽免费动漫| 精品人妻久久久| 午夜精品人妻二区三区| 国产精品久久久777| 狼人综合婷婷激情四射 | 在线性黄高清免费视频| 欧亚性爱在线视频| 乱伦熟女论坛| 亚洲国产成人精品女人久久久| 欧美色爱综合| 国产精品97超碰| 91久久久久久久| 一本久久精品中文字| 国产丰满少妇久久久精品影院| 啊啊啊啊啊啊啊国| 色综合美国| 美女诱惑爱爱| 国产11页| 男人的天堂2019AV| 午夜天堂精品久久久久91| 97人人射| 婷婷色在线| 99爱精品| 伊人影院中文字幕| 精品少妇后入一区二区三区四区人妻巨乳| 超碰97亚洲区| 天天干天天插| 色综合色欲色综合色综合色综合| 日韩Va亚洲va欧美Ⅴa久久| 中国一级操逼视频| 在线观看免费视频国产| 日韩激情啪啪啪| 天天操天天干一区二区| 亚洲91在线播放影院| 免费一级a毛片久久久久久鸭绿欲| 天天射天天| 久久久久久久伊人精品| 欧美 日韩 亚洲 春色| 激情无码日韩| 国产一级黄色片在线观看 | 亚洲的天堂网| 日韩av电影网站|