精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Apache Flink 漫談系列(10) - JOIN LATERAL

開發 開發工具
上一篇《Apache Flink 漫談系列 - JOIN算子》我們對最常見的JOIN做了詳盡的分析,本篇介紹一個特殊的JOIN,那就是JOIN LATERAL。

一、聊什么

上一篇《Apache Flink 漫談系列 - JOIN算子》我們對最常見的JOIN做了詳盡的分析,本篇介紹一個特殊的JOIN,那就是JOIN LATERAL。JOIN LATERAL為什么特殊呢,直觀說因為JOIN的右邊不是一個實際的物理表,而是一個VIEW或者Table-valued Funciton。本篇會先介紹傳統數據庫對LATERAL JOIN的支持,然后介紹Apache Flink目前對LATERAL JOIN的支持情況。

二、實際問題

假設我們有兩張表,一張是Customers表(消費者id, 所在城市), 一張是Orders表(訂單id,消費者id),兩張表的DDL(SQL Server)如下:

  • Customers
  1. CREATE TABLE Customers ( 
  2. customerid char(5) NOT NULL, 
  3. city varchar (10) NOT NULL 
  4.  
  5. insert into Customers values('C001','Beijing'); 
  6. insert into Customers values('C002','Beijing'); 
  7. insert into Customers values('C003','Beijing'); 
  8. insert into Customers values('C004','HangZhou'); 

查看數據:

  • Orders
  1. CREATE TABLE Orders( 
  2. orderid char(5) NOT NULL, 
  3. customerid char(5) NULL 
  4.  
  5. insert into Orders values('O001','C001'); 
  6. insert into Orders values('O002','C001'); 
  7. insert into Orders values('O003','C003'); 
  8. insert into Orders values('O004','C001'); 

查看數據:

1. 問題示例

假設我們想查詢所有Customers的客戶ID,地點和訂單信息,我們想得到的信息是:

(1) 用INNER JOIN解決

如果大家查閱了《Apache Flink 漫談系列 - JOIN算子》,我想看到這樣的查詢需求會想到INNER JOIN來解決,SQL如下:

  1. SELECT 
  2. c.customerid, c.city, o.orderid 
  3. FROM Customers c JOIN Orders o 
  4.     ON o.customerid = c.customerid 

查詢結果如下:

但如果我們真的用上面的方式來解決,就不會有本篇要介紹的內容了,所以我們換一種寫法。

2. 用 Correlated subquery解決

Correlated subquery 是在subquery中使用關聯表的字段,subquery可以在FROM Clause中也可以在WHERE Clause中。

  • WHERE Clause

用WHERE Clause實現上面的查詢需求,SQL如下:

  1. SELECT 
  2. c.customerid, c.city 
  3. FROM Customers c WHERE c.customerid IN ( 
  4. SELECT 
  5. o.customerid, o.orderid 
  6. FROM Orders o 
  7. WHERE o.customerid = c.customerid 

執行情況:

上面的問題是用在WHERE Clause里面subquery的查詢列必須和需要比較的列對應,否則我們無法對o.orderid進行投影, 上面查詢我為什么要加一個o.orderid呢,因為查詢需求是需要o.orderid的,去掉o.orderid查詢能成功,但是拿到的結果并不是我們想要的,如下:

  1. SELECT 
  2. c.customerid, c.city 
  3. FROM Customers c WHERE c.customerid IN ( 
  4. SELECT 
  5. o.customerid 
  6. FROM Orders o 
  7. WHERE o.customerid = c.customerid 

查詢結果:

可見上面查詢結果缺少了o.orderid,不能滿足我們的查詢需求。

  • FROM Clause

用WHERE Clause實現上面的查詢需求,SQL如下:

  1. SELECT 
  2. c.customerid, c.city, o.orderid 
  3. FROM Customers c, ( 
  4. SELECT 
  5. o.orderid, o.customerid 
  6. FROM Orders o 
  7. WHERE o.customerid = c.customerid 
  8. ) as o 

我們會得到如下錯誤:

錯誤信息提示我們無法識別c.customerid。在ANSI-SQL里面FROM Clause里面的subquery是無法引用左邊表信息的,所以簡單的用FROM Clause里面的subquery,也無法解決上面的問題,

那么上面的查詢需求除了INNER JOIN 我們還可以如何解決呢?

三、JOIN LATERAL

我們分析上面的需求,本質上是根據左表Customers的customerid,去查詢右表的Orders信息,就像一個For循環一樣,外層是遍歷左表Customers所有數據,內層是根據左表Customers的每一個Customerid去右表Orders中進行遍歷查詢,然后再將符合條件的左右表數據進行JOIN,這種根據左表逐條數據動態生成右表進行JOIN的語義,SQL標準里面提出了LATERAL關鍵字,也叫做 lateral drive table。

1. CROSS APPLY和LATERAL

上面的示例我們用的是SQL Server進行測試的,這里在多提一下在SQL Server里面是如何支持 LATERAL 的呢?SQL Server是用自己的方言 CROSS APPLY 來支持的。那么為啥不用ANSI-SQL的LATERAL而用CROSS APPLY呢? 可能的原因是當時SQL Server為了解決TVF問題而引入的,同時LATERAL是SQL2003引入的,而CROSS APPLY是SQL Server 2005就支持了,SQL Server 2005的開發是在2000年就進行了,這個可能也有個時間差,等LATERAL出來的時候,CROSS APPLY在SQL Server里面已經開發完成了。所以種種原因SQL Server里面就采用了CROSS APPLY,但CROSS APPLY的語義與LATERAL卻完全一致,同時后續支持LATERAL的Oracle12和PostgreSQL94同時支持了LATERAL和CROSS APPLY。

2. 問題解決

那么我們回到上面的問題,我們用SQL Server的CROSS APPLY來解決上面問題,SQL如下:

上面得到的結果完全滿足查詢需求。

四、JOIN LATERAL 與 INNER JOIN 關系

上面的查詢需求并沒有體現JOIN LATERAL和INNER JOIN的區別,我們還是以SQL Server中兩個查詢執行Plan來觀察一下:

上面我們發現經過SQL Server優化器優化之后的兩個執行plan完全一致,那么為啥還要再造一個LATERAL 出來呢?

1. 性能方面

我們將上面的查詢需求稍微改變一下,我們查詢所有Customer和Customers的***份訂單信息。

  • LATERAL 的寫法
  1. SELECT 
  2. c.customerid, c.city, o.orderid 
  3. FROM Customers c CROSS APPLY ( 
  4. SELECT 
  5. ***) o.orderid, o.customerid 
  6. FROM Orders o 
  7. WHERE o.customerid = c.customerid 
  8.     ORDER BY o.customerid, o.orderid 
  9. ) as o 

查詢結果:

我們發現雖然C001的Customer有三筆訂單,但是我們查詢的***信息。

  • JOIN 寫法
  1. SELECT c.customerid, c.city, o.orderid 
  2. FROM Customers c 
  3. JOIN ( 
  4. SELECT 
  5. o2.*, 
  6.      ROW_NUMBER() OVER ( 
  7.         PARTITION BY customerid 
  8.         ORDER BY orderid 
  9.      ) AS rn 
  10. FROM Orders o2 
  11. ) o 
  12. ON c.customerid = o.customerid AND o.rn = 1 

查詢結果:

如上我們都完成了查詢需求,我們在來看一下執行Plan,如下:

我們直觀發現完成相同功能,使用CROSS APPLY進行查詢,執行Plan簡單許多。

2. 功能方面

在功能方面INNER JOIN本身在ANSI-SQL中是不允許 JOIN 一個Function的,這也是SQL Server當時引入CROSS APPLY的根本原因。我們以一個SQL Server中DMV(相當于TVF)查詢為例:

  1. SELECT 
  2. name, log_backup_time 
  3. FROM sys.databases AS s 
  4. CROSS APPLY sys.dm_db_log_stats(s.database_id); 

查詢結果:

五、Apache Flink對 LATERAL的支持

前面我花費了大量的章節來向大家介紹ANSI-SQL和傳統數據庫以SQL Server為例如何支持LATERAL的,接下來我們看看Apache Flink對LATERAL的支持情況。

1. Calcite

Apache Flink 利用 Calcite進行SQL的解析和優化,目前Calcite完全支持LATERAL語法,示例如下:

  1. SELECT 
  2. e.NAME, e.DEPTNO, d.NAME 
  3. FROM EMPS e, LATERAL ( 
  4. SELECT 
  5. FORM DEPTS d 
  6. WHERE e.DEPTNO=d.DEPTNO 
  7. ) as d; 

查詢結果:

我使用的是Calcite官方自帶測試數據。

2. Flink

截止到Flink-1.6.2,Apache Flink 中有兩種場景使用LATERAL,如下:

  • UDTF(TVF) - User-defined Table Funciton
  • Temporal Table - 涉及內容會在后續篇章單獨介紹。

本篇我們以在TVF(UDTF)為例說明 Apache Fink中如何支持LATERAL。

(1) UDTF

UDTF- User-defined Table Function是Apache Flink中三大用戶自定義函數(UDF,UDTF,UDAGG)之一。 自定義接口如下:

  • 基類
  1. /** 
  2. * Base class for all user-defined functions such as scalar functions, table functions, 
  3. * or aggregation functions. 
  4. */ 
  5. abstract class UserDefinedFunction extends Serializable { 
  6. // 關鍵是FunctionContext中提供了若干高級屬性(在UDX篇會詳細介紹) 
  7. def open(context: FunctionContext): Unit = {} 
  8. def close(): Unit = {} 
  • TableFunction
  1. /** 
  2. * Base class for a user-defined table function (UDTF). A user-defined table functions works on 
  3. * zero, one, or multiple scalar values as input and returns multiple rows as output. 
  4. * The behavior of a [[TableFunction]] can be defined by implementing a custom evaluation 
  5. * method. An evaluation method must be declared publicly, not static and named "eval". 
  6. * Evaluation methods can also be overloaded by implementing multiple methods named "eval". 
  7. * User-defined functions must have a default constructor and must be instantiable during runtime. 
  8. * By default the result type of an evaluation method is determined by Flink's type extraction 
  9. * facilities. This is sufficient for basic types or simple POJOs but might be wrong for more 
  10. * complex, custom, or composite types. In these cases [[TypeInformation]] of the result type 
  11. * can be manually defined by overriding [[getResultType()]]. 
  12. */ 
  13. abstract class TableFunction[T] extends UserDefinedFunction { 
  14.  
  15. // 對于泛型T,如果是基礎類型那么Flink框架可以自動識別, 
  16. // 對于用戶自定義的復雜對象,需要用戶overwrite這個實現。 
  17. def getResultType: TypeInformation[T] = null 

上面定義的核心是要求用戶實現eval方法,我們寫一個具體示例。

  • 示例
  1. // 定義一個簡單的UDTF返回類型,對應接口上的 T 
  2. case class SimpleUser(name: String, age: Int) 
  3. // 繼承TableFunction,并實現evale方法 
  4. // 核心功能是解析以#分割的字符串 
  5. class SplitTVF extends TableFunction[SimpleUser] { 
  6. // make sure input element's format is "<string>#<int>
  7. def eval(user: String): Unit = { 
  8. if (user.contains("#")) { 
  9. val splits = user.split("#") 
  10. collect(SimpleUser(splits(0), splits(1).toInt)) 
  11. }} 

(2) 示例(完整的ITCase):

  • 測試數據

我們構造一個只包含一個data字段的用戶表,用戶表數據如下:

  • 查詢需求

查詢的需求是將data字段flatten成為name和age兩個字段的表,期望得到:

  • 查詢示例

我們以ITCase方式完成如上查詢需求,完整代碼如下:

  1. @Test 
  2. def testLateralTVF(): Unit = { 
  3. val env = StreamExecutionEnvironment.getExecutionEnvironment 
  4. val tEnv = TableEnvironment.getTableEnvironment(env) 
  5. env.setStateBackend(getStateBackend) 
  6. StreamITCase.clear 
  7.  
  8. val userData = new mutable.MutableList[(String)] 
  9. userData.+=(("Sunny#8")) 
  10. userData.+=(("Kevin#36")) 
  11. userData.+=(("Panpan#36")) 
  12.  
  13. val SQLQuery = "SELECT data, name, age FROM userTab, LATERAL TABLE(splitTVF(data)) AS T(name, age)" 
  14.  
  15. val users = env.fromCollection(userData).toTable(tEnv, 'data) 
  16.  
  17. val tvf = new SplitTVF() 
  18. tEnv.registerTable("userTab", users) 
  19. tEnv.registerFunction("splitTVF", tvf) 
  20.  
  21. val result = tEnv.SQLQuery(SQLQuery).toAppendStream[Row] 
  22. result.addSink(new StreamITCase.StringSink[Row]) 
  23. env.execute() 
  24. StreamITCase.testResults.foreach(println(_)) 

運行結果:

上面的核心語句是:

  1. val SQLQuery = "SELECT data, name, age FROM userTab, LATERAL TABLE(splitTVF(data)) AS T(name, age)" 

如果大家想運行上面的示例,請查閱《Apache Flink 漫談系列 - SQL概覽》中 源碼方式 搭建測試環境。

六、小結

本篇重點向大家介紹了一種新的JOIN類型 - JOIN LATERAL。并向大家介紹了SQL Server中對LATERAL的支持方式,詳細分析了JOIN LATERAL和INNER JOIN的區別與聯系,***切入到Apache Flink中,以UDTF示例說明了Apache Flink中對JOIN LATERAL的支持,后續篇章會介紹Apache Flink中另一種使用LATERAL的場景,就是Temporal JION,Temporal JION也是一種新的JOIN類型,我們下一篇再見!

關于點贊和評論

本系列文章難免有很多缺陷和不足,真誠希望讀者對有收獲的篇章給予點贊鼓勵,對有不足的篇章給予反饋和建議,先行感謝大家!

作者:孫金城,花名 金竹,目前就職于阿里巴巴,自2015年以來一直投入于基于Apache Flink的阿里巴巴計算平臺Blink的設計研發工作。

【本文為51CTO專欄作者“金竹”原創稿件,轉載請聯系原作者】

戳這里,看該作者更多好文

責任編輯:趙寧寧 來源: 51CTO專欄
相關推薦

2022-07-13 12:53:59

數據存儲

2018-11-20 07:59:43

Apache Flin JOIN算子代碼

2018-12-11 17:28:22

Apache FlinJOIN代碼

2022-06-10 17:26:07

數據集計算

2018-12-29 08:16:32

Apache FlinJOIN代碼

2018-09-26 08:44:22

Apache Flin流計算計算模式

2018-09-26 07:50:52

Apache Flin流計算計算模式

2018-10-16 08:54:35

Apache Flin流計算State

2018-10-09 10:55:52

Apache FlinWatermark流計算

2018-11-14 09:01:23

Apache FlinSQL代碼

2018-10-22 21:43:39

Apache Flin流計算Fault Toler

2019-01-03 10:17:53

Apache FlinTable API代碼

2022-07-13 13:03:29

流計算亂序

2022-07-12 10:38:25

分布式框架

2018-11-07 08:48:31

Apache Flin持續查詢流計算

2019-01-15 08:50:12

Apache FlinKafka分布式

2018-10-30 14:08:45

Apache Flin流表對偶duality

2020-04-09 11:08:30

PyFlinkJAR依賴

2022-06-20 05:52:27

FlinkTTL流查詢

2018-10-30 11:10:05

Flink數據集計算
點贊
收藏

51CTO技術棧公眾號

欧美不卡一二三| 国产三级精品视频| 欧美激情久久久久久| 久久福利小视频| 涩涩视频网站在线观看| 国产精品久久久久aaaa| 国产伦精品一区二区三区视频黑人 | 国偷自产视频一区二区久| 亚洲国产精品久久一线不卡| 欧美二区在线| 国产乱色精品成人免费视频| 在线不卡欧美| 日韩在线观看视频免费| 无码国产精品一区二区免费式直播| 婷婷综合六月| 亚洲一区二区偷拍精品| 色涩成人影视在线播放| 性欧美一区二区三区| 免费在线成人| 久久久人成影片一区二区三区| 天天操天天干天天操天天干| 成人av地址| 欧美精品日韩精品| 欧美韩国日本在线| 午夜小视频在线观看| 国产日产欧产精品推荐色 | 国产美女免费看| 久久一区国产| 97在线视频免费观看| 杨钰莹一级淫片aaaaaa播放| 久久93精品国产91久久综合| 精品欧美一区二区三区精品久久| 三级在线视频观看| 人人草在线视频| 亚洲国产成人精品视频| 秋霞在线一区二区| av中文资源在线| 91蝌蚪国产九色| 高清国产在线一区| 99热这里只有精品66| 久草中文综合在线| 国产精品极品在线| 无码人妻精品一区二区三区不卡| 伊人久久成人| 国内精品久久久久影院 日本资源| 91麻豆精品成人一区二区| 欧美日韩一二| 在线视频日本亚洲性| japanese中文字幕| 神马影视一区二区| 亚洲欧洲国产伦综合| 不卡一区二区在线观看| 亚洲黄页在线观看| 亚洲欧美另类在线观看| 亚洲一级中文字幕| 国产在线日韩精品| 亚洲性夜色噜噜噜7777| 欧美黄色激情视频| 国产一区二区三区网| 亚洲欧美精品中文字幕在线| 国产精品无码久久久久一区二区| 欧美做受69| 亚洲欧美成人网| 白白色免费视频| 日韩电影二区| 超碰97人人做人人爱少妇| 丰满少妇高潮久久三区| 午夜亚洲福利| 97免费中文视频在线观看| 国产一级做a爱片久久毛片a| 久久久久网站| 国产欧美 在线欧美| jlzzjlzz亚洲女人18| 丁香天五香天堂综合| 久久久久久99| 肥臀熟女一区二区三区| 91碰在线视频| 性刺激综合网| 超碰电影在线播放| 天天操天天综合网| www日韩在线观看| 国产亚洲亚洲国产一二区| 精品国产欧美一区二区| 精品久久久久久中文字幕人妻最新| 欧美欧美黄在线二区| 色偷偷噜噜噜亚洲男人| 久久激情免费视频| 亚洲欧美激情诱惑| 成人福利视频网| 丁香六月天婷婷| 欧美激情一区二区三区| 青青草综合视频| 天堂中文在线播放| 欧美精品在线观看播放| 亚洲精品激情视频| 欧美中文字幕一区二区| 欧美黄色成人网| 91porny九色| 国产精品一区二区果冻传媒| 久久偷看各类wc女厕嘘嘘偷窃| av福利精品| 亚洲大片一区二区三区| 99sesese| 欧美日韩一区二区三区在线电影| 日韩在线观看免费网站| 亚州国产精品视频| 精品一区二区日韩| 欧美高清视频一区| av网站免费在线观看| 欧美在线小视频| 中国一级特黄录像播放| 国产精品成人a在线观看| 91国内免费在线视频| 一区二区三区免费观看视频| 26uuu亚洲综合色欧美| 国产一级黄色录像片| 日本国产欧美| 日韩不卡在线观看| 国产a免费视频| 免费观看在线色综合| 久久久久se| av在线加勒比| 欧美变态口味重另类| 超碰人人人人人人人| 久久综合九色综合欧美狠狠| 国产精品一区二区av| 国产高清一区二区三区视频| 欧美最新大片在线看| 国产精品九九九九九| av成人毛片| 国产日韩在线一区二区三区| 性国产高清在线观看| 欧美一区三区四区| 天堂а√在线中文在线鲁大师| 久久久久久久尹人综合网亚洲| 国产精品夜夜夜一区二区三区尤| 成人影欧美片| 欧美老年两性高潮| 日韩欧美视频免费观看| 免费成人性网站| 手机看片福利永久国产日韩| 日韩天堂在线| 一本大道久久加勒比香蕉 | 91精品国产综合久久福利| 日本人亚洲人jjzzjjz| 爽好久久久欧美精品| 欧美一区二区视频17c| 偷拍精品精品一区二区三区| 亚洲天堂男人的天堂| 国产第一页在线观看| 国产三级三级三级精品8ⅰ区| 亚洲一二三区av| 欧美性感美女一区二区| 国产精品露脸av在线| av影片在线看| 欧美日韩成人在线| 色偷偷www8888| 国产在线播放一区二区三区| 国产香蕉一区二区三区| 6080成人| 97久久久久久| av资源网在线观看| 91精品视频网| 日本网站在线免费观看| 91丨porny丨国产| 国产aaaaa毛片| 久久久久电影| 国产日韩二区| 欧亚一区二区| 久久综合伊人77777蜜臀| 亚洲男女视频在线观看| 色悠久久久久综合欧美99| 九九九视频在线观看| 国产乱码一区二区三区| 97视频久久久| 欧美综合在线视频观看| 91系列在线播放| 多野结衣av一区| 伊人久久久久久久久久久| 国产毛片毛片毛片毛片| 精品国产乱码久久久久久天美| 熟妇高潮精品一区二区三区| 男人的天堂久久精品| 秋霞在线一区二区| 日韩高清三区| 成人午夜在线观看| 欧美三级网站| 久久精品91久久久久久再现| 国产 欧美 自拍| 欧美调教femdomvk| 黄色一级免费视频| 国产无遮挡一区二区三区毛片日本| 97人人爽人人| 欧美亚洲一区二区三区| 中文字幕欧美日韩一区二区| 欧美日韩导航| 亚洲va欧美va国产综合剧情| 欧美在线极品| 欧美日韩国产成人| av资源种子在线观看| 亚洲精品久久久久久久久久久久久 | 国产ts在线播放| 国产乱码一区二区三区| 熟女人妇 成熟妇女系列视频| 影音先锋日韩在线| 日本在线观看一区| jizz18欧美18| 91精品久久久久久久久青青| 涩涩视频在线免费看| 免费av在线一区| 最新电影电视剧在线观看免费观看| 亚洲精品xxx| 国产高清免费av| 欧美无乱码久久久免费午夜一区| 成人毛片18女人毛片| 亚洲免费在线观看视频| 久久久精品成人| 97精品电影院| 久久精品无码专区| 国产一区在线看| 在线视频日韩一区 | 911av视频| 日日夜夜精品视频免费| 欧美三级在线观看视频| 欧美三级免费| 99热一区二区三区| 日韩精品一区二区三区免费观影| 九色91在线视频| 粉嫩av一区二区| 成人一区二区在线| 欧洲一区在线| 亚洲自拍高清视频网站| 成人影院网站ww555久久精品| 国产成人精品免高潮费视频| 午夜影院在线播放| 午夜欧美大片免费观看| 成人超碰在线| 久久久久久久久中文字幕| 污污视频在线| 欧美激情国产精品| 日本无删减在线| 久久久久久久爱| 岛国毛片av在线| 久久免费精品视频| 福利小视频在线| 97精品在线视频| 电影一区二区三区| 日本精品一区二区三区在线播放视频| 色资源二区在线视频| 欧美中文字幕视频| 成人影院入口| 国产男女猛烈无遮挡91| 国产精品久久久久久久久久久久久久久 | 91免费观看视频| av黄色免费网站| 亚洲国产精品激情在线观看 | 一区二区三区视频在线观看| 老妇女50岁三级| 亚洲成人精品一区| 亚洲黄色小说图片| 在线看国产一区| 中文字幕在线观看高清| 91精品欧美一区二区三区综合在| 国内毛片毛片毛片毛片| 精品久久久久久久久久久久久久久| 黄频网站在线观看| 亚洲视频在线观看视频| 日韩子在线观看| 欧美国产中文字幕| 婷婷电影在线观看| 国产日产欧美a一级在线| 国产激情一区| 九九九九九九精品| 成人综合久久| 青青在线视频免费观看| 国产日韩精品视频一区二区三区 | 成人18视频在线观看| 亚洲aⅴ日韩av电影在线观看 | 国产激情精品久久久第一区二区 | 波多野结衣的一区二区三区| 在线观看日韩片| 影音先锋久久资源网| 日本成人在线免费视频| 激情成人综合网| 亚洲图片综合网| 国产精品无人区| 久久高清免费视频| 欧美在线短视频| 亚洲精品一区二区三区不卡| 国产亚洲视频中文字幕视频| av网址在线播放| 国产精品1234| 91综合精品国产丝袜长腿久久| 日本福利一区二区三区| 欧美婷婷在线| 亚洲污视频在线观看| 成人天堂资源www在线| 亚洲一级理论片| 亚州成人在线电影| 国产露脸国语对白在线| 国产丝袜视频一区| 色爱综合区网| 国产精品夜间视频香蕉| 欧美韩一区二区| 红桃一区二区三区| 三级不卡在线观看| 蜜臀av粉嫩av懂色av| 国产精品家庭影院| 国产伦精品一区二区三区视频我| 日韩三级中文字幕| 中文字幕在线观看日本| 55夜色66夜色国产精品视频| 日韩欧美另类中文字幕| 亚洲欧洲在线一区| 欧美专区在线| 日本一卡二卡在线| 一区二区三区四区视频精品免费| 国产天堂第一区| 日韩黄色高清视频| bl在线肉h视频大尺度| 亚洲伊人成综合成人网| 日韩成人精品一区| 韩国一区二区av| 91丨九色porny丨蝌蚪| 日韩av电影网| 精品少妇一区二区三区在线播放| 日本中文在线| 国产美女精品免费电影| 精品成人影院| 大香煮伊手机一区| 91免费看`日韩一区二区| 日本一二三区视频| 精品国产一区二区亚洲人成毛片 | 色天天综合久久久久综合片| 天天综合永久入口| 久久久女女女女999久久| 亚洲精品一区国产| 国产传媒久久久| 国产精品资源在线| 国产高清在线免费观看| 91精品黄色片免费大全| 黄色免费在线观看| 成人精品视频99在线观看免费| 99tv成人| 91视频福利网| 曰韩精品一区二区| 午夜精品久久久久久久99| 欧美日本啪啪无遮挡网站| 日韩中文字幕在线一区| 黄色网在线视频| 成人免费黄色在线| 日韩免费视频一区二区视频在线观看| 亚洲国产精品成人av| 蜜桃视频在线观看播放| 欧美精品久久| 青草av.久久免费一区| 午夜黄色福利视频| 91精品国产日韩91久久久久久| bt在线麻豆视频| 国产精品入口免费| 国产情侣一区| 国产在线综合视频| 7777精品伊人久久久大香线蕉| 在线观看av免费| 精品欧美一区二区精品久久| 美女日韩在线中文字幕| 国产传媒在线看| 88在线观看91蜜桃国自产| 性直播体位视频在线观看| 国产美女精品久久久| 巨乳诱惑日韩免费av| 懂色av粉嫩av蜜臀av一区二区三区| 欧美一级免费观看| 高端美女服务在线视频播放| 欧美日韩精品中文字幕一区二区| 麻豆精品久久精品色综合| 中文字幕在线有码| 精品五月天久久| 91成人短视频在线观看| 欧美亚洲色图视频| 国产午夜精品理论片a级大结局| 97人妻精品一区二区三区动漫| 欧美国产日韩在线| 国产一区二区三区四区大秀| 亚洲综合激情视频| 欧美日韩国产精品一区二区三区四区| 国产在线三区| 波多野结衣精品久久| 丝袜亚洲另类丝袜在线| 久久久久久久久久久久久女过产乱| 亚洲精品电影在线| 日韩电影精品| 欧美日韩激情视频在线观看| 国产精品久久久久久久浪潮网站| 免费国产黄色片| 国产精品一区二区3区| 日韩一级网站| 日本天堂中文字幕| 一道本无吗dⅴd在线播放一区| 国产精品毛片av|