日韩精品一区二区三区在线视频放-无码中文字幕V?一区二区-成年片免费观看视频-国内少妇人妻丰满av-国产精品中文字幕免费观看-亚洲成人久久一区二区三区-国内少妇偷人精品视频无缓冲-一区二区国产精品日本一区二区三区在线网

ARTICLE DETAIL

資訊詳情

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

Python實(shí)現(xiàn)SQL表級(jí)血緣解析:從sqlparse到血緣樹(shù)構(gòu)建詳解

Python實(shí)現(xiàn)SQL表級(jí)血緣解析:從sqlparse到血緣樹(shù)構(gòu)建詳解 做數(shù)據(jù)治理或者數(shù)倉(cāng)開(kāi)發(fā)的朋友應(yīng)該都經(jīng)歷過(guò)這么一段至暗時(shí)刻半夜收到告警說(shuō)某張核心報(bào)表的數(shù)據(jù)對(duì)不上了你需要立刻判斷這張表被誰(shuí)影響、影響到誰(shuí)。如果公司腳本管理全靠人工那這就是一次災(zāi)難。后來(lái)我實(shí)在受不了帶著團(tuán)隊(duì)把SQL血緣解析這件事徹底做了個(gè)遍沉淀出了一套內(nèi)部工具代號(hào)就叫ZGLanguage核心功能就是“從SQL里面把表級(jí)血緣樹(shù)挖出來(lái)”。這篇文章不講虛的直接把用Python解析SQL、提取表級(jí)血緣樹(shù)信息的完整思路、代碼實(shí)現(xiàn)、踩坑記錄全部放出來(lái)希望對(duì)正在做數(shù)據(jù)地圖、資產(chǎn)盤(pán)點(diǎn)、變更影響分析的朋友有幫助。這個(gè)方案解決的核心問(wèn)題很明確讓機(jī)器自動(dòng)從一段段SQL腳本中識(shí)別出“哪些表是輸入、哪張表是輸出”并基于這些依賴(lài)關(guān)系遞歸構(gòu)建出一棵血緣樹(shù)。適合數(shù)倉(cāng)開(kāi)發(fā)、數(shù)據(jù)平臺(tái)工程師、數(shù)據(jù)治理同學(xué)參考。你不需要懂編譯原理只需要會(huì)用Python有基本的SQL閱讀能力就能照著做出一套能用的表級(jí)血緣解析器。1. 表級(jí)血緣到底在解決什么問(wèn)題1.1 血緣信息最常用的三個(gè)場(chǎng)景先說(shuō)一個(gè)必須承認(rèn)的事實(shí)絕大多數(shù)公司的數(shù)據(jù)倉(cāng)庫(kù)SQL腳本數(shù)量是遠(yuǎn)遠(yuǎn)超過(guò)文檔維護(hù)速度的。你讓開(kāi)發(fā)改完一張表記一次數(shù)據(jù)字典基本不可能業(yè)務(wù)邏輯一天變八次文檔能跟上才怪。表級(jí)血緣的價(jià)值就是在沒(méi)有任何人為維護(hù)的情況下自動(dòng)告訴你表與表之間的依賴(lài)鏈路。最典型的場(chǎng)景是變更影響評(píng)估。比如想改某個(gè)中間層表的字段類(lèi)型如果不知道哪些下游表引用它你根本不敢動(dòng)。有了血緣樹(shù)從該表出發(fā)往下游遞歸所有受影響的表全部列出來(lái)變更前就能做出完整評(píng)估。第二個(gè)場(chǎng)景是數(shù)據(jù)質(zhì)量歸因數(shù)據(jù)出錯(cuò)了需要找到源頭往上追血緣是最快的路徑。第三個(gè)場(chǎng)景是數(shù)據(jù)資產(chǎn)盤(pán)點(diǎn)公司有幾百?gòu)埍砟膹埵呛诵谋怼⒛膹埵枪聧u表從血緣圖里一眼就能看出來(lái)。1.2 表級(jí)血緣和字段級(jí)血緣的邊界這里需要先給表級(jí)血緣劃清邊界因?yàn)楹芏嗳艘簧蟻?lái)就想做字段級(jí)最后把自己坑慘了。字段級(jí)血緣要精確到某個(gè)字段從哪張表的哪個(gè)字段來(lái)這需要完整的語(yǔ)法分析樹(shù)對(duì)SQL方言的兼容性要求極高成本完全不是一個(gè)量級(jí)。表級(jí)血緣只關(guān)注“表”這一層一條SQL語(yǔ)句讀入了哪些表寫(xiě)入了哪張表。這個(gè)粒度雖然粗但已經(jīng)能覆蓋大部分?jǐn)?shù)據(jù)治理訴求而且實(shí)現(xiàn)難度適中純Python就能搞定。字段級(jí)血緣可以作為后續(xù)升級(jí)方向先把表級(jí)血緣跑通底層的解析框架不變后面接上更重量級(jí)的解析器即可。2. 解析方案選型為什么用Python和sqlparse2.1 主流的解析路線(xiàn)對(duì)比我最初調(diào)研過(guò)四條路線(xiàn)純正則匹配、sqlparse庫(kù)、ANTLR生成解析器、商業(yè)級(jí)數(shù)據(jù)治理工具。每條路線(xiàn)的代價(jià)和效果差別很大直接看對(duì)比表。方案實(shí)現(xiàn)成本方言兼容性解析準(zhǔn)確率適用階段正則匹配極低差低很容易誤判臨時(shí)腳本sqlparse低中等高可處理大部分復(fù)雜SQL生產(chǎn)可用ANTLR語(yǔ)法樹(shù)高強(qiáng)可定制極高字段級(jí)血緣商業(yè)工具高錢(qián)取決于產(chǎn)品高全公司治理平臺(tái)正則方案我直接放棄了。SQL語(yǔ)法太靈活關(guān)鍵字可能出現(xiàn)在字符串里、注釋里子查詢(xún)嵌套七八層正則根本Hold不住。sqlparse是純Python的SQL解析庫(kù)雖然它不構(gòu)建完整的語(yǔ)法樹(shù)但對(duì)SQL做詞法分析和基礎(chǔ)的結(jié)構(gòu)切分已經(jīng)做得相當(dāng)成熟關(guān)鍵是它能夠識(shí)別出FROM、JOIN、INSERT等關(guān)鍵位置這就夠了。ANTLR的路線(xiàn)我也試過(guò)如果要支持Hive SQL、Spark SQL、PostgreSQL等多種方言每個(gè)方言都要維護(hù)一套語(yǔ)法文件工作量太大了。sqlparse作為起步兩天能出成果后面如果真要上字段級(jí)血緣再引入ANTLR也不遲。所以最終方案定為sqlparse做SQL結(jié)構(gòu)解析自定義遞歸算法做血緣樹(shù)構(gòu)建。2.2 ZGLanguage的定位與整體解析鏈路ZGLanguage不是一個(gè)大而全的框架它的定位就是“SQL血緣解析的標(biāo)準(zhǔn)化處理層”。在ZGLanguage內(nèi)部表級(jí)血緣解析一共分成五個(gè)階段SQL預(yù)處理清理注釋處理分號(hào)分隔的多條SQL去掉空語(yǔ)句。結(jié)構(gòu)切分用sqlparse把單條SQL切分為token序列定位出寫(xiě)表關(guān)鍵字如INSERT、CREATE TABLE AS和讀表關(guān)鍵字FROM、JOIN、UPDATE。依賴(lài)提取從token序列中抽取輸入表列表和輸出表完成一條SQL的依賴(lài)解析。血緣樹(shù)構(gòu)建將全量SQL的依賴(lài)關(guān)系合并成一張映射表再?gòu)闹付繕?biāo)表出發(fā)用遞歸的方式向上游遍歷生成血緣樹(shù)。標(biāo)準(zhǔn)化輸出將內(nèi)存中的血緣樹(shù)序列化為JSON、Graphviz DOT、或者直接輸出成樹(shù)狀文本。這里有個(gè)很重要的設(shè)計(jì)取舍血緣樹(shù)構(gòu)建依賴(lài)的是一個(gè)“全量SQL清單”也就是你要把整個(gè)數(shù)倉(cāng)或者某個(gè)項(xiàng)目下的所有SQL腳本都解析一遍生成依賴(lài)關(guān)系映射后續(xù)才能查詢(xún)每一張表的上下游。單條SQL只能告訴你“這張表用了另外幾張表”無(wú)法構(gòu)建出完整的樹(shù)。3. Python實(shí)現(xiàn)與核心代碼走讀3.1 環(huán)境準(zhǔn)備與依賴(lài)安裝這個(gè)項(xiàng)目的外部依賴(lài)非常少核心就兩個(gè)sqlparse用于SQL解析networkx可選用于后續(xù)的復(fù)雜圖操作。如果只是為了構(gòu)建血緣樹(shù)networkx可以先用不上純字典遞歸就能實(shí)現(xiàn)。pip install sqlparsePython版本建議3.8以上我沒(méi)有用到特別新的語(yǔ)法特性但3.8是底線(xiàn)。整個(gè)項(xiàng)目的入口設(shè)計(jì)很輕量核心類(lèi)就一個(gè)LineageParser輸入是SQL文本列表或者單個(gè)SQL文件路徑輸出是標(biāo)準(zhǔn)化的血緣樹(shù)對(duì)象。3.2 SQL依賴(lài)提取的代碼實(shí)現(xiàn)一條SQL的依賴(lài)提取是整個(gè)項(xiàng)目的地基。先看一個(gè)簡(jiǎn)化版的實(shí)現(xiàn)這個(gè)函數(shù)做的事情就是輸入一條SQL語(yǔ)句輸出一個(gè)dict包含input_tables列表和output_table。import sqlparse from sqlparse.sql import IdentifierList, Identifier from sqlparse.tokens import Keyword, DML, Name def extract_table_dependency(sql): 從單條SQL中提取表級(jí)依賴(lài)關(guān)系。 返回: {input_tables: [...], output_table: ...} 或 None parsed sqlparse.parse(sql)[0] input_tables [] output_table None in_from False in_join False # 標(biāo)記是否正在處理 CTE 名稱(chēng) cte_names set() # 先粗掃一遍把 WITH 后面緊跟的 CTE 名稱(chēng)收集起來(lái) tokens list(parsed.flatten()) for i, token in enumerate(tokens): if token.ttype in (Keyword, DML) and token.value.upper() WITH: for nxt in tokens[i1:]: if nxt.ttype in (Name,): cte_names.add(nxt.value.lower()) break break for token in parsed.tokens: # INSERT INTO table_name if token.ttype is DML and token.value.upper() INSERT: # 下一個(gè)有效 token 是 INTO, 再下一個(gè)是表名 continue if token.ttype is Keyword and token.value.upper() INTO: nxt token # 找到下一個(gè)非空白的 Identifier 作為輸出表 for identifier in token.parent.tokens: if isinstance(identifier, Identifier): output_table identifier.get_real_name() or identifier.get_name() break # CREATE TABLE AS if token.ttype is Keyword and token.value.upper() CREATE: for identifier in token.parent.tokens: if isinstance(identifier, Identifier): output_table identifier.get_real_name() or identifier.get_name() break # FROM 和 JOIN 后面的表名 if token.ttype is Keyword and token.value.upper() in (FROM, JOIN): nxt token for nxt_token in token.parent.tokens: if isinstance(nxt_token, Identifier) and nxt_token not in (token,): table_name nxt_token.get_real_name() or nxt_token.get_name() if table_name and table_name.lower() not in cte_names: input_tables.append(table_name) break continue if not input_tables and not output_table: return None return { input_tables: list(set(input_tables)), output_table: output_table }這段代碼有幾點(diǎn)細(xì)節(jié)需要展開(kāi)說(shuō)明。第一為什么不用簡(jiǎn)單的字符串split找FROM因?yàn)镾QL里面FROM可能會(huì)出現(xiàn)在嵌套子查詢(xún)里直接split會(huì)拿到內(nèi)層子查詢(xún)的表名造成血緣斷裂。sqlparse的tokenization會(huì)把子查詢(xún)當(dāng)做一個(gè)獨(dú)立結(jié)構(gòu)遍歷頂層token的時(shí)候不會(huì)誤入子查詢(xún)內(nèi)部這一點(diǎn)非常關(guān)鍵。第二CTE名稱(chēng)必須提前排除。一個(gè)常見(jiàn)的錯(cuò)誤寫(xiě)法是WITH tmp AS ( SELECT * FROM orders ) SELECT * FROM tmp JOIN customers ON tmp.user_id customers.id如果不過(guò)濾CTE名稱(chēng)解析結(jié)果會(huì)把tmp也當(dāng)成一張物理表血緣樹(shù)里就多出一個(gè)不存在的表。上面代碼中先遍歷一遍token收集WITH后的名字再在提取階段排除掉就能解決這個(gè)問(wèn)題。3.3 血緣樹(shù)遞歸構(gòu)建單條SQL的依賴(lài)信息拿到以后接下來(lái)的核心工作是把所有SQL的依賴(lài)關(guān)系組織成一棵血緣樹(shù)。從某張表出發(fā)向上游遞歸查誰(shuí)生成了它整棵樹(shù)的葉子節(jié)點(diǎn)就是原始數(shù)據(jù)表。class LineageTreeBuilder: def __init__(self, dependency_map): dependency_map: {target_table: [source_table1, source_table2]} self.dep_map dependency_map def build_tree(self, target_table, seenNone): 從目標(biāo)表出發(fā)向上游遞歸構(gòu)建血緣樹(shù)。 返回嵌套dict結(jié)構(gòu)。 if seen is None: seen set() # 防止循環(huán)依賴(lài)導(dǎo)致死循環(huán) if target_table in seen: return {name: target_table, cycle: True, children: []} seen seen | {target_table} sources self.dep_map.get(target_table, []) node { name: target_table, children: [] } for src in sources: child self.build_tree(src, seen) node[children].append(child) return node這里最關(guān)鍵的是seen集合的用法。真實(shí)生產(chǎn)環(huán)境里表的依賴(lài)關(guān)系很可能出現(xiàn)循環(huán)比如表A通過(guò)臨時(shí)表B又寫(xiě)回了A如果不加防循環(huán)邏輯遞歸會(huì)直接爆棧。用seen記錄已訪(fǎng)問(wèn)節(jié)點(diǎn)遇到循環(huán)就標(biāo)記cycle并截?cái)噙@能保證血緣樹(shù)在異常情況下依然可以構(gòu)建出來(lái)。還有一個(gè)小細(xì)節(jié)dependency_map的key和value都應(yīng)該統(tǒng)一成小寫(xiě)。因?yàn)椴煌_(kāi)發(fā)寫(xiě)的SQL里表名的大小寫(xiě)習(xí)慣完全不同同一個(gè)表一會(huì)兒寫(xiě)成orders一會(huì)兒寫(xiě)成ORDERS如果不對(duì)key做歸一化血緣樹(shù)會(huì)分裂成兩張表。我在實(shí)際項(xiàng)目里是在解析完成后統(tǒng)一做一次.lower()。4. 完整實(shí)操?gòu)亩喽蜸QL到血緣樹(shù)的可視化結(jié)果4.1 準(zhǔn)備測(cè)試SQL樣例為了讓過(guò)程更直觀我準(zhǔn)備了一個(gè)四段SQL的樣例模擬一個(gè)簡(jiǎn)化的數(shù)倉(cāng)加工鏈路原始訂單表、用戶(hù)表經(jīng)過(guò)清洗和匯總最終生成報(bào)表表。-- 步驟1: 原始訂單表 - 訂單明細(xì)寬表 CREATE TABLE dwd_order_detail AS SELECT o.order_id, o.user_id, o.amount, u.user_name FROM ods_orders o JOIN ods_users u ON o.user_id u.user_id; -- 步驟2: 訂單明細(xì)寬表 - 用戶(hù)訂單匯總表 CREATE TABLE dws_user_order_summary AS SELECT user_id, COUNT(*) AS order_cnt, SUM(amount) AS total_amount FROM dwd_order_detail GROUP BY user_id; -- 步驟3: 匯總表 - 大屏報(bào)表 CREATE TABLE ads_order_report AS SELECT user_id, order_cnt, total_amount FROM dws_user_order_summary WHERE total_amount 100; -- 步驟4: 全量刷新歷史表 INSERT INTO ads_order_report_history SELECT * FROM ads_order_report;這段SQL覆蓋了兩種常見(jiàn)的寫(xiě)表語(yǔ)法CREATE TABLE AS和INSERT INTO也包含了JOIN和CTE未涉及但同樣典型的場(chǎng)景。目標(biāo)是從ads_order_report_history這張最終表出發(fā)向上游把整條鏈路遞歸出來(lái)。4.2 運(yùn)行結(jié)果與血緣樹(shù)JSON將四段SQL逐一經(jīng)過(guò)extract_table_dependency提取再寫(xiě)入LineageTreeBuilder最后用json.dumps輸出。核心調(diào)用代碼和結(jié)果如下。import json sqls [sql1, sql2, sql3, sql4] # 上面四段SQL dep_map {} for sql in sqls: dep extract_table_dependency(sql) if dep and dep[output_table]: dep_map[dep[output_table].lower()] [ t.lower() for t in dep[input_tables] ] builder LineageTreeBuilder(dep_map) tree builder.build_tree(ads_order_report_history) print(json.dumps(tree, indent2, ensure_asciiFalse))輸出結(jié)果{ name: ads_order_report_history, children: [ { name: ads_order_report, children: [ { name: dws_user_order_summary, children: [ { name: dwd_order_detail, children: [ {name: ods_orders, children: []}, {name: ods_users, children: []} ] } ] } ] } ] }這棵JSON樹(shù)就很清晰了最終報(bào)表的歷史表依賴(lài)報(bào)表實(shí)時(shí)表報(bào)表實(shí)時(shí)表依賴(lài)用戶(hù)匯總表匯總表依賴(lài)訂單明細(xì)表訂單明細(xì)表又依賴(lài)兩張?jiān)急?。整個(gè)加工鏈路通過(guò)血緣樹(shù)完整地呈現(xiàn)了出來(lái)。4.3 如何把血緣樹(shù)渲染成圖血緣樹(shù)構(gòu)建出來(lái)之后開(kāi)發(fā)和業(yè)務(wù)更希望看到的是圖。有兩個(gè)輕量級(jí)方案一是生成Graphviz的DOT文件二是轉(zhuǎn)化成前端el-tree或者zTree可用的數(shù)據(jù)格式。Graphviz方案非常簡(jiǎn)單把上面的JSON樹(shù)轉(zhuǎn)換成DOT格式就完事。def tree_to_dot(node): lines [] def walk(n, parentNone): node_id n[name].replace(-, _) if parent: lines.append(f {parent} - {node_id};) for child in n.get(children, []): walk(child, n[name]) walk(node) return digraph G {\n \n.join(lines) \n} dot tree_to_dot(tree) with open(lineage.dot, w) as f: f.write(dot)拿到DOT文件后用graphviz命令就能轉(zhuǎn)出PNG或者SVG。這個(gè)方案的好處是無(wú)前端依賴(lài)適合在命令行環(huán)境快速出圖。如果公司有可視化平臺(tái)生成JSON以后可以直接對(duì)接讓血緣圖嵌入到數(shù)據(jù)資產(chǎn)頁(yè)面里這才是最終形態(tài)。5. 實(shí)戰(zhàn)中高頻踩坑與排查思路5.1 建表和查詢(xún)混在一起導(dǎo)致輸出表漏提這是一個(gè)非常隱蔽的坑。很多SQL腳本會(huì)先DROP TABLE IF EXISTS再CREATE TABLE AS。DROP語(yǔ)句本身不涉及血緣但如果解析器沒(méi)有跳過(guò)DDL語(yǔ)句的類(lèi)型判斷可能會(huì)把DROP后面的表名誤當(dāng)成輸出表。我的處理方式是在extract_table_dependency的入口處先用sqlparse把語(yǔ)句類(lèi)型識(shí)別出來(lái)只有包含DML的INSERT/UPDATE或包含CREATE TABLE的語(yǔ)句才繼續(xù)解析其他語(yǔ)句直接返回None。這樣既加快了處理速度也避免了誤判。5.2 CTE與真實(shí)表重名導(dǎo)致血緣斷裂CTE名稱(chēng)和真實(shí)物理表同名的情況我在生產(chǎn)上遇到過(guò)好幾次。比如某段SQL里先定義了一個(gè)WITH orders AS但物理表里確實(shí)也有一張叫做orders的表。解析器到底應(yīng)該把orders當(dāng)成CTE還是物理表嚴(yán)格來(lái)說(shuō)SQL的作用域規(guī)則決定了CTE內(nèi)部的引用優(yōu)先于物理表。我目前的處理策略是只要WITH里出現(xiàn)了同名CTE這個(gè)會(huì)話(huà)內(nèi)所有對(duì)該名稱(chēng)的引用都視為CTE。這個(gè)策略雖然不完美但能覆蓋絕大多數(shù)場(chǎng)景因?yàn)樗祥_(kāi)發(fā)人員的直覺(jué)。解決方式是維護(hù)一個(gè)作用域棧在解析FROM/JOIN之前先看當(dāng)前token是否在某個(gè)CTE的作用域內(nèi)。如果CTE名稱(chēng)出現(xiàn)嵌套覆蓋取最近的匹配。這個(gè)實(shí)現(xiàn)比上面的代碼稍復(fù)雜但邏輯是清晰的。建議在解析器里加入作用域上下文類(lèi)。5.3 大小寫(xiě)不一致導(dǎo)致血緣樹(shù)分裂這個(gè)問(wèn)題在4.3里的代碼中已經(jīng)內(nèi)置了預(yù)處理但我想強(qiáng)調(diào)一下它的普遍性。不同開(kāi)發(fā)人員寫(xiě)表名的風(fēng)格差異大得驚人同一個(gè)人寫(xiě)的不同腳本也可能一會(huì)兒大寫(xiě)一會(huì)兒小寫(xiě)。我在項(xiàng)目里做了三層歸一化第一層在extract_table_dependency返回前把表名統(tǒng)一轉(zhuǎn)小寫(xiě)第二層在構(gòu)建dep_map時(shí)對(duì)key和value都做strip處理第三層在build_tree的入口也做一次小寫(xiě)轉(zhuǎn)換。三層保險(xiǎn)下來(lái)基本不會(huì)因?yàn)榇笮?xiě)出現(xiàn)血緣斷裂了。5.4 解析性能與遞歸深度問(wèn)題當(dāng)SQL腳本量達(dá)到幾千條時(shí)解析性能是必須考慮的。我實(shí)測(cè)過(guò)sqlparse對(duì)一條中等復(fù)雜度的SQL包含三四個(gè)JOIN、一層子查詢(xún)的解析耗時(shí)大約在20到50毫秒。如果公司有2萬(wàn)條SQL單線(xiàn)程解析需要10到20分鐘這個(gè)速度在一次性初始化場(chǎng)景下可以接受但如果是天天全量跑就太慢了。提升手段有兩個(gè)一是用多線(xiàn)程并行解析SQL語(yǔ)句之間天然沒(méi)有依賴(lài)適合用concurrent.futures跑線(xiàn)程池二是在解析前先對(duì)SQL文本做哈希去重同一段SQL在多個(gè)調(diào)度任務(wù)中重復(fù)出現(xiàn)時(shí)只解析一次直接復(fù)用結(jié)果。這兩個(gè)手段合起來(lái)20000條SQL的解析時(shí)間能壓縮到3分鐘以?xún)?nèi)。還有遞歸深度的問(wèn)題。血緣樹(shù)理論上可能是鏈?zhǔn)降谋热?0層。Python默認(rèn)的遞歸深度是1000看起來(lái)是夠的但如果表格數(shù)量特別多或者依賴(lài)關(guān)系非常復(fù)雜建議在build_tree函數(shù)里顯式設(shè)置sys.setrecursionlimit。6. 后續(xù)擴(kuò)展從表級(jí)血緣走向字段級(jí)表級(jí)血緣解析上線(xiàn)之后整個(gè)數(shù)據(jù)團(tuán)隊(duì)對(duì)數(shù)據(jù)資產(chǎn)的認(rèn)知水平立刻上了一個(gè)臺(tái)階。但很快你就發(fā)現(xiàn)業(yè)務(wù)方更關(guān)心的是“這個(gè)字段為什么變了”這就推動(dòng)血緣解析往字段級(jí)延伸。字段級(jí)血緣的核心挑戰(zhàn)在于必須完整解析SELECT列表中的表達(dá)式、別名、聚合函數(shù)并跟蹤每一個(gè)表達(dá)式與源表字段的映射關(guān)系。sqlparse做詞法級(jí)解析能部分滿(mǎn)足需求但要精確處理嵌套子查詢(xún)和窗口函數(shù)建議引入ANTLR或研究專(zhuān)門(mén)的SQL解析器比如基于antlr4的Hive SQL語(yǔ)法文件。從我的實(shí)踐來(lái)看更穩(wěn)妥的路徑是表級(jí)血緣模塊保持獨(dú)立字段級(jí)血緣作為插件接入。兩者共用一套“SQL預(yù)處理”和“作用域分析”的基礎(chǔ)設(shè)施只在表級(jí)解析器迭代到字段級(jí)解析器時(shí)做替換。這樣即使字段級(jí)解析器出錯(cuò)也不會(huì)影響表級(jí)血緣的穩(wěn)定性。還有一個(gè)容易忽略的價(jià)值點(diǎn)把血緣解析結(jié)果與調(diào)度日志打通。當(dāng)某張表的產(chǎn)出任務(wù)失敗時(shí)調(diào)度平臺(tái)記錄的表名可以和血緣樹(shù)關(guān)聯(lián)起來(lái)自動(dòng)推送下游影響范圍到告警系統(tǒng)。這一步做成了血緣系統(tǒng)就不再是“資產(chǎn)盤(pán)點(diǎn)工具”而是真正融入了日常運(yùn)維的鏈路。最后說(shuō)一點(diǎn)個(gè)人體會(huì)。做血緣解析最忌諱一上來(lái)就求大求全我建議手里有幾十條SQL的時(shí)候就先把表級(jí)血緣樹(shù)跑通哪怕只是幾個(gè)測(cè)試SQL。因?yàn)槲锢肀淼拿?guī)范、SQL的編寫(xiě)習(xí)慣在各家公司完全不同算法本身可以抽象但適配層一定要結(jié)合自己的數(shù)據(jù)倉(cāng)庫(kù)現(xiàn)狀來(lái)調(diào)。先把表級(jí)做扎實(shí)后面擴(kuò)展字段級(jí)才有底子。這套ZGLanguage的方案我從零到生產(chǎn)可用大概用了兩周時(shí)間其中一半時(shí)間都花在適配方言和處理異常SQL上。你們要是自己動(dòng)手做記得給異常SQL留好日志這將是后面優(yōu)化最重要的依據(jù)。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
九九综合九九综合| 97超碰色五月| 台湾佬大香蕉| 在线强奷到舒服的无码视频 | 欧美日韩第一页| 日本欧美韩国国产在线| 激情五月婷婷综合| 色情婷婷久久五月天| 九九操久久国产免费视频| 草莓精品视频| 午夜毛片高清免费不卡| 牛牛AV人人夜夜澡人人爽| 国产精品久久久鸭无码的功能| 日韩在线女优天天干| 日韩黄色小说| 国产精品黄色三级av| 久久一区,青青青青草视频在线播放| 超碰97综合网| 成人美女av| 欧美色图成人网一区二区| 欧洲视频在线| 91九色精品熟女内射| 久久超碰98| 天天干天天燥| 91高跟美女在线播放| 久久久久久久九九九九| 欧美日不卡| 男人综合网| 国产精品老师| 99999精品| 美女刺激久久国产欧美| 黑人性暴力毛片| 手机在线人成免费视频| 素颜老阿姨乱情色| 91在线视频观看国产| 97精品一二区| 思思热在线视频免费| 亚洲欧洲综合视频在线| 农村少妇久久久久久久| 丁香五月综合| 思思热一热婷婷热一热| 中文字幕乱碼在线| 欧美一区二区三区四区综合| 亚洲中文字幕乱码无码一区二区| 免费日韩黄片| 欧美亚洲美少妇一区二区| 国产精品爱欲| 青青青草伊人精品| 992这里有精品| 蜜臀在线视频| 中文字幕高清20页视频| 国产精品久久妻无码网站| 丝袜综合| 激情小说成人日本无码一| 91网站18在线| 亚洲人妻av| 久久久亚洲精品中文字幕人妻| 亚洲伊人a线观看视频| 日韩丝袜高跟制服在线观看| 五月丁香色综合| 日日夜夜精品视频| 91老熟女91老女人| 激情丁香五月婷婷| 素人一区二区三区日韩| 97综合国产| 夜夜嗷嗷一区二区| 五月天婷婷色| 国产乱色国产精品免费视| 嗯嗯啊好大| 天天操天天舔| 午夜视频久久久久一区| 18禁久久| 精品中文一区二区| 蜜臀国产AV中文字幕| 国产色图乱伦| 天天情欲宗合网| 激情色播| 丝袜剧情| 91人妻最真实刺激绿帽| 97色伦97色伦国产欧美| 懂色av中文字幕| 蜜臀AV成人精品蜜臀AV久久| 睡产熟女乱伦| 国产日韩欧美亚洲精品95 | 91麻豆天美国产欧美| 日韩操啪| 老妇女91| 国产AV线| 激情黄色五月天| 九九碰九九爱97超碰| 美国黄片aaa| 久久久无码精品人妻二区| 亚洲色天堂日韩中| 丰满人妻av一区二区三区| 超碰美女97| 91久久伊人婷婷青青草| 情色av电影| 狠狠穞A片一區二區三區| 肏逼福利网站| 欧美色性情| 亚洲情色在线| 91熟女熟妇视频网站| 综合免费无码中文| 欧美一区二区三区互相| 岛国1区2区3区在线观看| 无码二级三级| 精品人妻15区| 亚洲脚交| 91精品操美女| 精品然女一区二区| 亚洲综合113页| 婷色五月天| 强奸乱伦AV网站| 国产在线综合福利网站| 国产在线综合网| 97在线播放 | 天天精品| 欧美一级黄色18片免费看| 狠狠操官网| 色欲Av人妻精品一区二| 尤物网站91| 夜夜躁狠狠躁日日躁av| 91大胆欧美| 白丝AV网站| 97天天弄| 91AV入口| 五月天久久综合网| 亚洲 小说 欧美 激情 另类| 精品国产Av无码久久久伦古装| 黄色片,com| 手机在线大香蕉| 97资源久久| 欧美色图欧美| 国产一线二线三线av| 国产午夜福利合集| 蜜臀久久99精品久久久久久成人小说 | 欧亚揄拍偷拍精品视频| 久超碰这里只有精品| 操老熟女AV| 九九九热精品| 超碰97久久| 狠狠婷婷亚洲中文综合久久| 波多野42部激情无码喷潮| 九九九精品| 日韩视频中文字幕| 操www| 十八禁的黄污污免费网站| 婷婷干黄色| 日韩成人精品视频自拍| 97任你吞精| 天天干天天插| 久久精品老司| 亚洲素人综合| 大香蕉综合网| 女人被男人桶爽视频网站| 狠狠操狠狠插| 久久这里只精品免费福利| 亚洲第一狼人丝袜美女另类| 91 国产丝袜在线播放-百度| 凹凸久久人人| 最新9久久久9免费视频| 男人的天堂日韩| 97丝袜亚洲在线播放| 日韩欧美天天爽爽爽天天爽爽| 一本一首道人妻少妇免费久久| 国产中文福利| 久久久久久免费电影| 啊啊啊啊在线播放| 亚洲se91| 美女视频尤物网在线看| 秋霞影音一区二区三区| 91在线页| 97国产精品在线观看| 久久黄黄黄| 综合 亚洲 欧美| 亚洲影视综合| 日韩欧美成人综合在线| 91成人精品在线播放| www五月| 男女打扑克高清网站| 男女91| 学生妹天天看| 欧美97色| 在线综合色| 天天看,天天做| 亚洲男人的天堂亚洲| 男人干美女| 久草精品一区 | 国产蜜臀精品一区免费尤物| 亚洲无码太久| 国模无码一区二区三区在线| 日本91白丝| 啊啊啊不要啊啊受不了了视频在线| 欧洲亚洲综合| 亚洲一区日韩精品中文字幕 | 久久女婷| 国产免费一区| 麻豆国产97在线| 性爱乱伦网址| 亚洲精品欧洲精品| 久久久久久久久一区二区三区| 嫩草美女久久| 嫖老熟女A片一二三区| 99精品视频在线观看| 超碰97色色| 欧美热图99| 强奸国产在线| 亚洲综合五月天婷婷丁香| 丰满少妇高潮无码| 97天天| 日韩国产成人自拍视频| 老女人日韩美91| 日韩丨制服丨中文|在线| 久久精品| 久久激情五月| 激情五月天校园春色网| 最新亚洲黄色免费电影 | www色婷婷| baiduhicn.com。| 男人综合网| 国产精品探花视频| 嗯嗯啊啊好大好爽| 国产东北女人在线视频| 艳美熟妇先锋一二三区| 精品福利| 国产高清吃奶免费视频网站| 蜜乳中文字幕a在线| 久久熟女久| 亚洲综合码| 国产91 丝袜在线播放| 乱伦AVxx| 加勒比五月天| 欧美亚洲色图另类国产| 麻豆婷婷成人一二三| 另类欧美色| 国产精品久久久三级无码| 99九九久久| 69精品| 99精品久久| 久久久熟女一区| 精品人妻一区二区视频| 日本999精品| 日韩成人午夜精品久久高潮| 美女黄网| 69人妻人人揉人人躁人人精品| 大粗鳼巴久久久久| 天天射,天天操,天天爽-国内精品一区二区三区-成人AV | 97超碰中文在线| 久久精品性| 蜜臀网址在线| 色哟哟的毛片| 国产又粗又大硬免费色网视频| 屌色在线97视频| 天天综合91入口| 999国产精品999| 爱丝福利| 天美传媒国产原创中文字幕亚洲欧美另类 | 久久乐| 精品一区二区三区18| 天天看,天天做| 91欧洲入口| 国产真实野战在线视频| 欧美综合亚洲| 超碰久久性爱| 欧美日韩电影成人在线| 麻豆区久久久久亚| 99综合视频| 中文字幕精品码亚洲| 狠狠综合网| 清纯唯美亚洲综合| 日本日日色视频| 高潮毛片无遮挡高清免费| 精品人妻一区春色| 亚洲无线码一区国产欧美国| 综合性视频99| 人人色97| 18禁网站在线播放| 中国少妇啪啪视频| 超碰av人人人| 性色av大全| 久偷拍欧美日韩三区| 国内毛片国产专区二| 蜜臀中文无码午夜| 国产精品一区二区三区在线密挑| 亚洲无码精品AV久久久| 加勒比伊人影院| 国产乱伦性爱AV| 嗯嗯啊啊啊好爽| 久久人妻四季| 美国一区二区免费视频| 97国产精品| 97免费免费视频网| 五月天啪啪| 日欧操屄| AV色五月天| 人妻丝袜无 码视频专区| 欧洲亚洲国产综合在线| 亚洲综合嫩| 打av高清| 色99在线| 亚洲综合贴图91 | 精品欧美А∨无码黑人大荫蒂| 2019午夜福利视频| 插入综合网| AAAAAAAAA黄片| 天堂性色| 丰满少妇高潮无码| 色色色999| 日韩簧片免费看| 91老妇女| 久久日本熟女精品一区| 920日本午夜免费| 欧美性爱1080p| 欧美东京热青青草| 中文字幕一区二区三区蜜臀| 久久这里只精品99re66图| 91精品人| 美女9118禁| 涩涩久久精品| 九九夜精品九九在线| 亚洲aV性爱| 18啪啪手机免费性爱| 99999国产| 美女91在线观看| 性吧在线视频| 婷婷综合五月天| 日韩一性一交一A片俄罗斯| 农村女一级毛卡片| 中文字幕国产在线天堂| 四虎av在线| 色网综合网| 麻豆区99999| 亚洲精品丝袜-不卡成人免费……| 国产福利在线视频网站| 粉嫩av平台| 国产99热| 久久久91| 91久久国产精品| 欧美日韩97在线| 亚洲 欧美 小说| 久久精品亚洲婷婷| 正在播放:深夜激情大战,自带黑丝袜全力输出骚穴| 91人妻中文| 人人摸.人人色| 亚洲97在线观看| 99热精品在线观看| 东京男人天堂| 久肏视频字幕| 69久久| 欧美日韩国产精品久久色婷婷| 亚洲黄色网址| 91劲爆| 日本黄色XXX| 亚洲精品一卡二卡三卡福利视频网站| 97 超碰 人人做 人人爱| 91蜜臀熟女| 久久久一区二区三区四曲免费听 | 久久人妻熟女一区二区| 亚洲91网。| 欧美v日韩v亚洲v最新在线| 91青青在线视频| 久久偷偷色综合蜜桃| 亚洲自拍一区夜夜操| 久草婷婷| 久久久久亚洲一区女同性恋中文字幕| 大香蕉国产中文自拍| 91麻豆天美国产| 精品人妻一区二区三区-国产精品 一个人在线看的黄色电影网站 | 少妇久久久久久| 超碰99re| 91综合网| 午夜男女爽爽爽影院视频| 亚洲美女AV无码| 啪啪综合网| 国产精品不卡av免费在线观看| 日韩情色一区二区| 亚洲综合影院| 日本日逼高清| 黄色一级视| 黄aaaaaaaaaaaaaaaaaa色网站| 婷婷视频网| 嗯嗯啊在线视频| 先锋精品av色鲁| 成人片在线播放| 亚州国产精品乱| 欧美 中文字幕 一区| 成人日韩中文字幕| 美女黑人91神马| 亚欧美综合| 97中文字幕一区| 亚洲精品97久久| 欧美色www亚洲国产阿娇要播| 九九AV| 亚洲另类小说卡通动漫| 国语av最新自产拍在线观看| 国产11页| 国产美女口爆吞精| 亚洲久久天堂| 中日韩免费看男女操逼大全| AV无码久久久精品| 国产乱码久久| 四虎884a| 日韩欧美女求操每天更新| 亚洲激情片| 九月丁香婷婷色| 五月婷婷激情网| 强奸少妇AV导航网| 亚洲AO在线| 粉嫩久久久久| 欧美97爱| 囯戸精品高潮呻吟旡码| 国产精品久久久久av| 精品大久久| 加勒比少妇AV婷婷六月天超碰超碰| 黄色成年| 国内精品a| 91精品大奶人妻| 宗合情欲网| 超碰在线1234区| 亚洲高清视频在线免费观看| 最新中文字幕在线亚洲| 91美腿丝袜在线观看| 欧美色图成人网一区二区 | 欧美色图 人妻| 亚洲欧洲偷拍一区| 激情文学 国产一二三aV| 久久精品男人的天堂| 这里都是精品在线观看| 中文字幕丝袜美腿| 色婷亚洲五月在线观看| 超碰久久性爱| 激情文学亚洲| 亚洲精品一区二区精品| 人妻熟女字幕一区二区| 岛国999| 男人的天堂2019| 午夜超爽| 九九英色视频| 狠狠爱大香蕉| 五月激情视频| 国产熟女自拍| 欧美一区二区三区入口| 好看的91视频| 麻豆国产97在线| 超碰99在线观看| 亚州久久9| 精品999999| 国产精品国产拍高清AV| 精久久久| 亚码激情| 后入式免费视频| 自拍偷拍草一草| 一本久道久久综合狠狠爱| 亚热日本熟女| 免费精品无码一级毛片牛牛影视 | 91av熟女人妻| 超碰97精品在线| 国产激情在线| 国产精品一区二区黄片| 亚洲中文字幕久久无码精品| 91性高潮久久久久久久久| 欧美青青草视频| 在线a v| 囯产精品强| 欧美αv.com| 精品亚洲俞拍视频一区| 夜夜天天噜狠狠爱2021| 97在线无精品| 免费αⅴ在线观看| 淫穴高潮色图| 精品性爱无码在线播放| 青青草在线视频播放器| 人人摸人人添人人操| 日韩丨制服丨中文|在线| 操逼1区| 热热色色综合| 色区久久| 天美传媒AV在线| 日韩精品99999| 成人一二| 人妻少妇色综合| 可以免费观看的日韩av毛片| 精品人妻一区二区蜜桃视频| 精品一区二区三区蜜桃臀赵总 | 亚洲天堂人妻熟妇视频| 丝袜狂射91| 久久婷婷亚洲| 九热久| 嗯嗯啊啊用力视频免费| 在线播放一级无码视频| 加勒比av官网在线| 大香蕉伊人久久| 91亚洲网| 校园春色中文字幕AV| 亚洲αv一区二区三区| 九九九九九九九| 96AV精品| 中文字幕国产| 久久成人东京热人妻| 爽爽歪在线视频| 97干色| 美女97超碰| 乱伦图一区| 色综合天天爱去电影网| 色婷婷蜜臀av| 日本高清一区二区在线| 视频国产欧美在线播放| 熟女高潮合集-永久久久-成人AV | 欧美亚洲今日在线| 白丝AV网站| 亚洲五码一区二区三区| 秋霞怕怕片| 人妻内射一区二区在线视频| 狠狠综合| 一级性爱视频免费观看| 天天综合站| 四月丁香婷婷| 97任你吞精| 中文久久| 男人天堂无码| 蘋果手機免費看成人Av| 亚洲高潮少妇| 男女激情黄色网址| 日本一道在线播放高清| 国产精品伦理| 日韩操呦呦影院在线观看| 操人无码| 爱av免费| se吧提供国产乱老熟视频胖女人| 91蜜桃传媒精品久久久一区二区| 日本精品性生活久久久| 另类小说五月天| 国产精品亚洲天堂网址| 日韩熟女三十乱伦| 性欧美999| 天美欧美国产| 9999伦理视频| 六月婷婷激情| 久久香蕉国产线看观看猫咪av| 中文字幕日韩精品久久| 97亚洲在线| 九99久久| 蜜乳av一区二区三区| 少妇六月天| 日本三级黄页| 激情综合五月婷婷| 日韩少妇一区二区三区| 欧美亚洲激情| 97天天摸天天爽| 少好三P| 丰满少妇一区二区三区四区观看| 日韩人妻少妇 一区二区三区| 91久久精品中文字幕| 男女无套 免费网站| 欧美性色欧美| 色欧美色交综合| 亚洲极品| 97超级色碰碰| 亚洲九九爱| jiujiujiujingpin| 加勒比AV网| 97超碰69| AV天天综合| 久久久久免费少妇| 激情自拍 校园春色| 五月丁香| 久久久久久久人妻| 超踫中文字幕| 98一区二区精品| 亚洲1区| 口爆综合网| 男人的天堂2019AV| 欧美日韩性爱视屏免费看了| 亚洲国产欧美中日韩成人综合视频| 亚洲色色探花| 日韩乱伦AⅤ| 一个国产在线综合网站| 亚洲欧美色图小说| 日韩中文字幕精品一区在线| 天天躁夜夜躁狠狠躁AV| 熟女高潮合集-永久久久-成人AV| 操逼精品视频| 另类av综合久久| 97精品久久久久中文字幕| 日日干男人的天堂| 久久久久久久六六| 丝袜视频网国产90| 亚洲精品乱码久久久久久蜜桃麻豆| 2003天天干夜夜操| 欧美 亚洲 在线| 精品熟女呻吟久久91| 97超碰人妻| 人妻一区二区三区视频| 国产精品一区午夜福利| 91久久免费视频互動交流 | 97超碰9| 亚洲国产综合图区中文字幕 | 国产性久久久| 国产偷拍自拍在线视频| 日本视频在线观看污污污| 日韩人妻一区二区精品| 99色在线| 久草精品国产蜜臀| 97视频在线视频| 美女天天干| 日日骚AV| 亚洲精品一二区| 亚洲精品aa久久伊人| 91色综| 色狠人在线99| 亚洲97网站| 久久久久久久久久9| 操屄日韩| 91麻豆va国产精品| 国产黄a三级三级三级av在线看| 欧美日本久久精品一区 | 久久精精区一区二区一蜜桃一区二区| 大香蕉 222| 9 9无尺码天堂网| 91亚洲欧洲| 亚洲 自拍偷拍 欧美| 五月天精品| 99青青草国产视频| 欧美草草高清日韩视频| 樱花蜜乳av| 超碰99在线观看| 亚洲欧洲精品成人| 精品久久97观看在线视频| 色综合V| 日本女人操逼| 日本少妇va7777| 97超碰色中文字幕| 激情天天视频| 99色综合| 97精品国产精品免费观看| 国产精品操| 久草免费福利在线播放| JULIA人妻风俗店中出电影| 日产123区精品免费观看| 91国模| 久久久精品成人国产| 嗯嗯啊啊用力视频免费| 久肏视频字幕| 国产熟女免费观看久久| 一牛影视久久久一区二区三区| 狠狠躁久久躁| 天天操天天射天天日| 婷婷香蕉欧美在线一区二区三区| 国产丝袜高跟美女av免费观看| 无码一区免费在线不卡| 精品伊人久久久大香线蕉小说| 精品国产91久久久久久一区黄无| 黑人性欧美| 成人午夜小视频手机在线看| 欧美狠狠弄| 久久αⅴ| 日日干日日| 亚洲人人夜夜澡人人爽| 手机在线A片| 超碰国产情侣自拍网| 色亚洲欧美| 强免费黄色网址| #NAME?| 成全在线观看免费观看| 人妻精品综合中文字幕在线 | 色爱综合网| 操曰本熟女| 国内毛片国产欧美拍| 伊人青青一区成人视频在线观看区| 热99这里只有精品| 秋霞一级A片黄色视频| 蜜臀亚洲中文| 蜜乳av首页| 99久久久久久亚洲精品不卡| 日韩欧美~中文字| 蜜臀久久99精品久久久久| 国产高清成人免费视频| 免费强奸av| 97精品国产97久久久| 天天舔九色婷婷| 美欧色综合| 国产女同视频在线播放| 91强热人妻| 中国女人内射6XXXXX| 欧美劲爆视频一区二区| 国产欧美亚洲精品a第2页| 国产精品一区二区密臀| 国产女人视频三四五区| 久久一区二区三区四区五区| 欧洲一区二区| 青青草啪啪网| 麻豆国产原创AV色哟哟 | 黑人免费福利视频| 又摸又舔在线观看网站| 久久透逼视频| 亚洲精品一区二区免费在线观看| 一二三区操逼国产91| 9久9久9久9久视频网站| 欧美亚洲在线| 嗯嗯嗯啊啊在线观看| 91美女国产在线| 蜜臀99久久精品久久久久久| 天天操天天谢| 国产精品久久久久绯色| 开心六月色| 无码久| 美女爽爽爽刺痛洞洞| q2午夜理论片夜色av| 91亚洲狠狠色| 啊啊啊啊好爽好舒服一区二区易域| 亚洲欧美洲综合| AⅤ片水多多| 国内精品a| 日本色色色视频| 成人精品在线观看| ,国产乱人伦精品一区二区三区| 91在线丝袜视频| 久久精品成人一区二区三区蜜臀 | 小泽玛利亚一二三| 六月婷婷激情| 亚洲熟女偷拍在线观看| 久久风骚城市| 精品一区二区三区国产| av在线免费一区二区| 狠狠色色| 日日摸日日碰| 日韩色香| 高清无码在线播放网站| 色色激情| 亚州综合色图| 高清国产精品福利网站| 日本午夜精品理论片A级APP发布| 又黄又爽在线观看视频| 青青草乱入乱欲视频在线观看| 天天性射网| 日韩精品人妻一| 中文高清一区二区的| 久欲AV| 18禁无码永久免费无限制| 国产精品一区人妻精品阁在线| 中文字幕女同在线| 91综合在线| 97色碰| 日韩成人人妻网站| 亚欧无码在线| 国产丝袜美腿美女麻豆| 天天肏视频| 亚洲男人天堂Av| 97国产精品在线观看| 久久精品亚洲成a人天堂| 97资源欧美| 国产狂喷潮在线精品| 欧美黑人猛交春色影视大全| 91热热色| 国产精品动态一区二区三区四四| 欧美亚洲第1页| 大香蕉123| 小日子操bb在线看| 男人天堂东京热| 超碰超碰超碰超碰的大鸡吧操黑丝袜 | 国产无码三级视频在线观看| 亚洲第2页| 九九九久千久久激情蜜桃在线看| 激情五月综合开心五月| 日韩AV一区二区三区三州三州| 久九九九| 亚洲精品一区中文字幕乱码| 性色av蜜臀av色欲aV| 国产精品无码av在线| 天天综合日韩网| 99国产在线 精品 视频| 夫妻四区五区六区| 中国熟妇| 99在线观看| 欧洲中文字幕| 色淫网站优优视频| 在线观看黄色电话| 99国产精品自在自在| 思思热在线视频免费| 国产女s强制榨精视频| 国产无套粉嫩白浆在| 久久久精品国产亚洲AV无码| 91亚洲不卡一区| 久久久精精精| 免费9 1久久| 欧美成人四级在线播放| 日本免费一区二区不卡| 日韩人妻资源在线看| 韩日色费| 久久精品国产97欧美精品亚洲| AA丁香综合激情| 亚洲精品国产专区在线观看| 久久九九热| 欧美激情综合| 日韩精品人妻一| 屁股久久久久久久久久| 十八禁电影伊人网| 中文字幕 一区二区 亚洲无码| 亚洲AV无码成人精品久久| 蜜臀99久久精品久久久久| 日本三级韩国三级美三级91| 97资源超碰| 大地资源在线观看中文第二页| 亚洲乱码精品一区二区| 蜜臀久久99精品久久久久久成人小说 | 91综合网在线| 老熟妇一区二区三区啪啪| 亚洲色欲一区二区三区| 成视频在线观看免费看| 亚洲少妇综合在线播放| 天天上日日上日韩精品| 亚洲天天操| 9九九国产| 97精品视频在线| 美女AV一区二区| 热久久九九热| 性色中出| 日韩99神马视频片| 日韩AV一区二区三区三州三州| 九九热精品在线| 久久婷婷色| 久99热| 天天日天天色| 欧亚综合一卡二卡中文字幕| 欧美网站免费| 国产又黄又爽又刺激久久久久久| 人人弄人人摸| 成人精品久久久午夜福利| 五月天久久综合网| 色就色综合| av无码精品久久久久| 综合久久六月久久婷婷| 欧美性爱www免费版| 人人操人人uiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii | 99精品视频在线观看免费| 综合网91| 成人精品在线免费视频| 日本乱人伦片中文三区| 人妻少妇被猛烈进入中| 国产AV色黄看到爽| 国产综合永久精品日韩鬼片| 手机在线人成免费视频| 国产蜜臀在线| 国产又粗又长的视频| 日韩中文字幕二区| 欧亚韩国999| 久久国产乱子伦精品免费女人| 91精品电影18| 婷婷伊人五月| 撸撸成人在线视频| 乱操乱伦AV| 日韩一级片在线看| 天天日天天操VV| 久久超碰网| 亚洲精品国产精品乱码不99| 五月天伊人| 欧美色图小说综合| 激情抓乳插进去啪啪啪日韩 | 91久久18禁| 天天操天天射青青草| 国产欧美日产一区二区三区 - 国产欧美日 | 久久伊人最新网址视频| 操死我了嗯嗯嗯| 色9999日韩国产| 中文字幕精品人妻丝袜| 欧美大战久久久伊人| av激情亚洲五月天| 国产第25页在线观看| 麻豆 欧美 日韩| 小电影欧美91| 欧美黄色大片在线观看 | 在线岛国新天堂8| 丰满人妻大屁一区二区| 干B| 欧美色999| 95人妻爽爽人人做人人澡| 亚洲精品国产av天美传媒| 12一15性XXXX粉嫩国产| 99久久久| 日本大香蕉综合网红本杳社区| 欧美大香蕉同搞| 日本99一区二区| 中文字幕精品免费一区二区| 精品久久久久,69国产成人精| 国产热av| 亚洲AV成人无码久久精品播放| 91精品人妻一区二区-全集完整版免费正片国语-B02AV | 国产精品不卡av免费在线观看| 91热爆在线| 亚洲偷91色| 久久久久国产一区二| 伊人伊人LD| 九九久久一区二区伦理| 欧美超碰人妻97| 中文字幕久热视频在线| 嗯嗯嗯啊啊啊操的我好爽 | 亚洲Av无码成人精品国产| 美女骚尻视频| 男人的天堂一区三区| 欧美专区17页| 国产自偷自拍一区| 成人国产二区三区在线,男女精品。| 大地资源在线观看中文第二页| 国产乱码久久久| 中文字幕 人妻不满 在线视频| 精品国产乱码久久久久久网站入口| 日韩欧美视频青青| 无码精品久久| 超碰到97情色| 2020视频1区2区3区| 玖玖爱在线视频免费观看| 久久动漫精品视频这里只有精品| 日韩性爱毛片操骚逼| 日本布卡一区二三区| 熟妇在线视频一区二区| ji熟女.com| 亚洲色综网| 五月天综合网| 色色色色网站| 欧美性爱精品七区| 性爱AV天堂| 啊啊啊啊嗯嗯嗯用力好爽| 四虎国产精品永久地址入口| 五月天AV资源| 亚洲欧洲色情高清| 五月丁香大香蕉| 国产精品区在线12p| 婷婷8月天青娱乐| 欧美夜夜骑视频| 四虎AV在线观看| 色一色综合网| 国产精品第一区第一页| 激情综合二| 一区二区三区黄色片a| 唐山老熟妇露脸啪啪叫| 日本黄色精品专区网站| 91丨九色丨国产丨人妻在线| 亚洲无码?第一页| 五月丁香婷婷综合| 欧美色66| 亚洲图片视频小说| 成人综合网 欧美| 无码91| 欧美日韩夜夜| 富二代亚洲精品99| 97视频观看| 成人看片网站| 婷婷性爱| 精品性爱无码在线播放| 国产AV久久久蜜爱影集| 黄色AAAAA欧美| 人人艹亚洲| 免费一二区| 欧美色91| 人人妻人人爱人人玩| 巨乳特殊服务按摩| 天美一二三在线观看Av| 国内三级自拍小视频在线观看| 天美麻花大全视频| 激情网色| 这里只有精品视频在线观看麻豆| 友优传媒精品在线一区二区| 大香蕉伊在线久草麻豆天堂故事| 午夜人妻精品综合在线| 久久久久久久久成人av解说| 91狠狠综| 啊啊啊啊好爽好舒服一区二区易域| 伊人991| 欧美亚洲日韩人妻在线观看| 91被操| 午夜啊啊| 四虎免费在线播放| 精品无码一区二区| 国产亚洲日本精品在线| 综合国产影视三级| 91人妻最真实刺激绿帽| 欧美色院| 国产久久久久影院老熟女| 亚洲美女30b| 久久9视频| 久久九九国产精品| 色播五月丁香| 国产av高清版| 蜜桃臀久久| 久久久久久久97| AAAAAAAAA黄片| 玖玖婷婷五月天| 青娱乐蜜桃臀AV色婷| 久久久涩| 超碰日韩人妻| 九九久久精品| 精品人妻一区二区免费蜜桃| 性欧美| 久久天堂| 五月综合久久| 精品女同一区| 天天做天天爱夜夜爽毛片试看| 丰满人妻大屁一区二区| 久久久啊啊| 久久内射| 午夜福利无毒不卡| 97精彩视频网站| 91人妻熟女| 成人性爱全视频观看| 欧美亚洲日韩16色| 色牛aV| 天天色悠悠激情| 欧美激情1区| 国产综合操逼高清| 少妇人妻在线| 成人aⅴ一区二区三区| 麻豆国产成人精品| 操www| 啊啊好多水| 人妻另类 专区 欧美 制服| 天天操夜夜操| 久操电影| 日本伦理一区二区| 97天堂| 亚洲综合码| 日韩性爱长视频免费| 高凊专区人人操| 天天激情综合站| 97 超碰 人人做 人人爱| 婷婷超| 操人妻逼91| 精品一区二区人妖| 校园春色美腿丝袜 | 亚洲欧洲日韩天堂av| 久草资源欧美在线视频| 美女极品一区二区三区| 啊啊啊啊操死我了| 国产热RE99久久6国产精品首 | 欧洲Au麻豆| 天天看精品动漫视频一区| 情侣操 逼视频99| 在线无码操| 理论久久婷婷网8| 九九玖玖精品| 亚洲精品一区二区精品| 中文字幕色AV| 五月天黄色av| 欧美性爱日韩性爱| 青青草原av| 91麻豆天美传媒HD| 久久久久久久亚洲Av无码| 亚州欧美另类| 国产suv精品一区二区四区999 | 99热在线播放| 夜精品久无码| 久久久久久欧美精品se一二三四| 日本成人免费一区二区三区| 试看60秒| 日产狠狠干| 色综合av男人天堂| 美女啊啊啊啊啊| 伊人午夜福利视频| 有码人妻系列| 深田咏美亚洲精品福利社| 1769一区| 99re在线| 丝袜高跟澳门91视频| 99999精品视频| 黄网在线播放| 日本欧美亚洲高清在线看| 国产成人亚洲精品无码最新在线| 青青草中日韩在线| 91超碰碰在线| 色网综合网| 青青草日本中文字幕| 天天综合麻豆视频| 少妇人妻在线| 中文字幕在线免费观看2| 日韩免费高清大片在线| 青娱乐国产剧情av一区| 搞中出久久| 黑人精品成人一区二区三区| 综合欧美日韩在线观看| 91婷婷伊人狠人| 98超碰日本| 青娱乐手机日韩在线视频| 欧美日韩人人精品| 亚欧美天堂在线| 18精品一区| 精品一区二区麻豆| 加勒比东京热五月天天堂网| 美女91在线观看| 97人人爱人人做人人乐| 久久久久无码一妻区| 天天综合欧美综合| 学生妹天天看| 精品v1区| 欧美日本天堂| 国产日韩中文字幕欧美| 欧美 亚洲 91| 91美女国产在线| 97超碰免费人人性爱| 日影院久久婷婷夜夜网| 精品人妻久久久| 久久人妻无码毛片A片麻豆| 日韩三四五区| 国产日韩精品一区二区三区| 色眯眯射| 美女骚尻视频| 99久久99久久免费精品蜜臀| 白嫩少妇| 友优传媒精品在线一区二区| 91在线一起| 91熟女视频网| 欧美日韩精品久久久久东北老熟妇| 久草线上视频免费看| 天天操天天谢| 中文字幕综合人妻| 操逼网免费无码视频| 久久性爱城| 五月婷婷综合网| 黄网在线播放| 国产h小视频在线观看免费| 熟女熟妇一区二区三区视频| 欧美色图私拍91| 超碰精品| 欧美天天影院| 久久久成人免费av电影| 欧美亚洲清纯| 日本黄色XXX| 97超级久久| 99色婷婷中文字幕乱色| 亚洲精品一卡二卡三卡福利视频网站 | 欧洲黄色网| 亚洲一区二区中文字幕| 一色网男人的天堂| 久久是精品| 成人小说另类在线| 国产亚洲精品A在线观看下载| 久干9操| 精品.99999| 蜜桃色院一区久久| 日躁天天爽爽| 欧美很很操视频| 啊啊啊好疼| 自拍内地三级在线观看| 蜜臀av一区二区三区免费观看| 啊啊啊啊啊舒服| 亚洲无无码αⅴ每日更新| 骚货| 色妺妺AⅤ| 国产精品午夜高潮呻吟久久av| 人妻在线大香蕉| 综合伊人网12色| 丝袜美腿诱惑亚洲欧美视频在线观看| 久热久| 国产成人自拍视频视频| 国产九月婷婷| 91天天综合日韩欧美| 婷婷久久五月| 热久久无毒不卡| 国产无马av| 欧美桃色网| 久久曰曰| 久久久久女教师免费一区|