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

Flink SQL 知其所以然之流 join 很難嘛???(上)

開發(fā) 架構
在實時數倉中,regular join 以及 interval join,以及兩種 join 的結合使用是最常使用的。所以本文主要介紹這兩種(太長的篇幅大家可能也不想看,所以之后的文章就以簡潔,短為目標)。

[[437040]]

1.序篇

進入正文。

下面即是文章目錄,也對應到本文的結論,小伙伴可以先看結論快速了解本文能給你帶來什么幫助:

  • 背景及應用場景介紹:join 作為離線數倉中最常見的場景,在實時數倉中也必然不可能缺少它,flink sql 提供的豐富的 join 方式(總結 6 種:regular join,維表 join,temporal join,interval join,array 拍平,table function 函數)對我們滿足需求提供了強大的后盾
  • 先來一個實戰(zhàn)案例:以一個曝光日志 left join 點擊日志為案例展開,介紹 flink sql join 的解決方案
  • flink sql join 的解決方案以及存在問題的介紹:主要介紹 regular join 的在上述案例的運行結果及分析源碼機制,它雖然簡單,但是 left join,right join,full join 會存在著 retract 的問題,所以在使用前,你應該充分了解其運行機制,避免出現數據發(fā)重,發(fā)多的問題。
  • 本文主要介紹 regular join retract 的問題,下節(jié)介紹怎么使用 interval join 來避免這種 retract 問題,并滿足第 2 點的實戰(zhàn)案例需求。

2.背景及應用場景介紹

在我們的日常場景中,應用最廣的一種操作必然有 join 的一席之地,例如

計算曝光數據和點擊數據的 CTR,需要通過唯一 id 進行 join 關聯

事實數據關聯維度數據獲取維度,進而計算維度指標

上述場景,在離線數倉應用之廣就不多說了。

那么,實時流之間的關聯要怎么操作呢?

flink sql 為我們提供了四種強大的關聯方式,幫助我們在流式場景中達到流關聯的目的。如下圖官網截圖所示:

join

  • regular join:即 left join,right join,full join,inner join
  • 維表 lookup join:維表關聯
  • temporal join:快照表 join
  • interval join:兩條流在一段時間區(qū)間之內的 join
  • array 炸開:列轉行
  • table function join:通過 table function 自定義函數實現 join(類似于列轉行的效果,或者說類似于維表 join 的效果)

在實時數倉中,regular join 以及 interval join,以及兩種 join 的結合使用是最常使用的。所以本文主要介紹這兩種(太長的篇幅大家可能也不想看,所以之后的文章就以簡潔,短為目標)。

3.先來一個實戰(zhàn)案例

先來一個實際案例來看看在具體輸入值的場景下,輸出值應該長啥樣。

場景:即常見的曝光日志流(show_log)通過 log_id 關聯點擊日志流(click_log),將數據的關聯結果進行下發(fā)。

來一波輸入數據:

曝光數據:

log_id timestamp show_params
1 2021-11-01 00:01:03 show_params
2 2021-11-01 00:03:00 show_params2
3 2021-11-01 00:05:00 show_params3

點擊數據:

log_id timestamp click_params
1 2021-11-01 00:01:53 click_params
2 2021-11-01 00:02:01 click_params2

預期輸出數據如下:

log_id timestamp show_params click_params
1 2021-11-01 00:01:00 show_params click_params
2 2021-11-01 00:01:00 show_params2 click_params2
3 2021-11-01 00:02:00 show_params3 null

熟悉離線 hive sql 的同學可能 10s 就寫完上面這個 sql 了,如下 hive sql

  1. INSERT INTO sink_table 
  2. SELECT 
  3.     show_log.log_id as log_id, 
  4.     show_log.timestamp as timestamp
  5.     show_log.show_params as show_params, 
  6.     click_log.click_params as click_params 
  7. FROM show_log 
  8. LEFT JOIN click_log ON show_log.log_id = click_log.log_id; 

那么我們看看上述需求如果要以 flink sql 實現需要怎么做呢?

雖然不 flink sql 提供了 left join 的能力,但是在實際使用時,可能會出現預期之外的問題。下節(jié)詳述。

4.flink sql join

4.1.flink sql

還是上面的案例,我們先實際跑一遍看看結果:

  1. INSERT INTO sink_table 
  2. SELECT 
  3.     show_log.log_id as log_id, 
  4.     show_log.timestamp as timestamp
  5.     show_log.show_params as show_params, 
  6.     click_log.click_params as click_params 
  7. FROM show_log 
  8. LEFT JOIN click_log ON show_log.log_id = click_log.log_id; 

flink web ui 算子圖如下:

flink web ui

結果如下:

  1. +[1 | 2021-11-01 00:01:03 | show_params | null
  2.  
  3. -[1 | 2021-11-01 00:01:03 | show_params | null
  4.  
  5. +[1 | 2021-11-01 00:01:03 | show_params | click_params] 
  6.  
  7. +[2 | 2021-11-01 00:03:00 | show_params | click_params] 
  8.  
  9. +[3 | 2021-11-01 00:05:00 | show_params | null

從結果上看,其輸出數據有 +,-,代表其輸出的數據是一個 retract 流的數據。分析原因發(fā)現是,由于第一條 show_log 先于 click_log 到達, 所以就先直接發(fā)出 +[1 | 2021-11-01 00:01:03 | show_params | null],后面 click_log 到達之后,將上一次未關聯到的 show_log 撤回, 然后將關聯到的 +[1 | 2021-11-01 00:01:03 | show_params | click_params] 下發(fā)。

但是 retract 流會導致寫入到 kafka 的數據變多,這是不可被接受的。我們期望的結果應該是一個 append 數據流。

為什么 left join 會出現這種問題呢?那就要從 left join 的原理說起了。

來定位到具體的實現源碼。先看一下 transformations。

transformations

可以看到 left join 的具體 operator 是 org.apache.flink.table.runtime.operators.join.stream.StreamingJoinOperator。

其核心邏輯就集中在 processElement 方法上面。并且源碼對于 processElement 的處理邏輯有詳細的注釋說明,如下圖所示。

StreamingJoinOperator#processElement

注釋看起來邏輯比較復雜。我們這里按照 left join,inner join,right join,full join 分類給大家解釋一下。

4.2.left join

首先是 left join,以上面的 show_log(左表) left join click_log(右表) 為例:

  • 首先如果 join xxx on 中的條件是等式則代表 join 是在相同 key 下進行的,join 的 key 即 show_log.log_id,click_log.log_id,相同 key 的數據會被發(fā)送到一個并發(fā)中進行處理。如果 join xxx on 中的條件是不等式,則兩個流的 source 算子向 join 算子下發(fā)數據是按照 global 的 partition 策略進行下發(fā)的,并且 join 算子并發(fā)會被設置為 1,所有的數據會被發(fā)送到這一個并發(fā)中處理。
  • 相同 key 下,當 show_log 來一條數據,如果 click_log 有數據:則 show_log 與 click_log 中的所有數據進行遍歷關聯一遍輸出[+(show_log,click_log)]數據,并且把 show_log 保存到左表的狀態(tài)中(以供后續(xù) join 使用)。
  • 相同 key 下,當 show_log 來一條數據,如果 click_log 中沒有數據:則 show_log 不會等待,直接輸出[+(show_log,null)]數據,并且把 show_log 保存到左表的狀態(tài)中(以供后續(xù) join 使用)。
  • 相同 key 下,當 click_log 來一條數據,如果 show_log 有數據:則 click_log 對 show_log 中所有的數據進行遍歷關聯一遍。在輸出數據前,會判斷,如果被關聯的這條 show_log 之前沒有關聯到過 click_log(即往下發(fā)過[+(show_log,null)]),則先發(fā)一條[-(show_log,null)],后發(fā)一條[+(show_log,click_log)] ,代表把之前的那條沒有關聯到 click_log 數據的 show_log 中間結果給撤回,把當前關聯到的最新結果進行下發(fā),并把 click_log 保存到右表的狀態(tài)中(以供后續(xù)左表進行關聯)。這也就解釋了為什么輸出流是一個 retract 流。
  • 相同 key 下,當 click_log 來一條數據,如果 show_log 沒有數據:把 click_log 保存到右表的狀態(tài)中(以供后續(xù)左表進行關聯)。

4.3.inner join

以上面的 show_log(左表) inner join click_log(右表) 為例:

首先如果 join xxx on 中的條件是等式則代表 join 是在相同 key 下進行的,join 的 key 即 show_log.log_id,click_log.log_id,相同 key 的數據會被發(fā)送到一個并發(fā)中進行處理。如果 join xxx on 中的條件是不等式,則兩個流的 source 算子向 join 算子下發(fā)數據是按照 global 的 partition 策略進行下發(fā)的,并且 join 算子并發(fā)會被設置為 1,所有的數據會被發(fā)送到這一個并發(fā)中處理。

相同 key 下,當 show_log 來一條數據,如果 click_log 有數據:則 show_log 與 click_log 中的所有數據進行遍歷關聯一遍輸出[+(show_log,click_log)]數據,并且把 show_log 保存到左表的狀態(tài)中(以供后續(xù) join 使用)。

相同 key 下,當 show_log 來一條數據,如果 click_log 中沒有數據:則 show_log 不會輸出數據,會把 show_log 保存到左表的狀態(tài)中(以供后續(xù) join 使用)。

相同 key 下,當 click_log 來一條數據,如果 show_log 有數據:則 click_log 與 show_log 中的所有數據進行遍歷關聯一遍輸出[+(show_log,click_log)]數據,并且把 click_log 保存到右表的狀態(tài)中(以供后續(xù) join 使用)。

相同 key 下,當 click_log 來一條數據,如果 show_log 沒有數據:則 click_log 不會輸出數據,會把 click_log 保存到右表的狀態(tài)中(以供后續(xù) join 使用)。

4.4.right join

right join 和 left join 一樣,只不過順序反了,這里不再贅述。

4.5.full join

以上面的 show_log(左表) full join click_log(右表) 為例:

  • 首先如果 join xxx on 中的條件是等式則代表 join 是在相同 key 下進行的,join 的 key 即 show_log.log_id,click_log.log_id,相同 key 的數據會被發(fā)送到一個并發(fā)中進行處理。如果 join xxx on 中的條件是不等式,則兩個流的 source 算子向 join 算子下發(fā)數據是按照 global 的 partition 策略進行下發(fā)的,并且 join 算子并發(fā)會被設置為 1,所有的數據會被發(fā)送到這一個并發(fā)中處理。
  • 相同 key 下,當 show_log 來一條數據,如果 click_log 有數據:則 show_log 對 click_log 中所有的數據進行遍歷關聯一遍。在輸出數據前,會判斷,如果被關聯的這條 click_log 之前沒有關聯到過 show_log(即往下發(fā)過[+(null,click_log)]),則先發(fā)一條[-(null,click_log)],后發(fā)一條[+(show_log,click_log)] ,代表把之前的那條沒有關聯到 show_log 數據的 click_log 中間結果給撤回,把當前關聯到的最新結果進行下發(fā),并把 show_log 保存到左表的狀態(tài)中(以供后續(xù) join 使用)
  • 相同 key 下,當 show_log 來一條數據,如果 click_log 中沒有數據:則 show_log 不會等待,直接輸出[+(show_log,null)]數據,并且把 show_log 保存到左表的狀態(tài)中(以供后續(xù) join 使用)。
  • 相同 key 下,當 click_log 來一條數據,如果 show_log 有數據:則 click_log 對 show_log 中所有的數據進行遍歷關聯一遍。在輸出數據前,會判斷,如果被關聯的這條 show_log 之前沒有關聯到過 click_log(即往下發(fā)過[+(show_log,null)]),則先發(fā)一條[-(show_log,null)],后發(fā)一條[+(show_log,click_log)] ,代表把之前的那條沒有關聯到 click_log 數據的 show_log 中間結果給撤回,把當前關聯到的最新結果進行下發(fā),并把 click_log 保存到右表的狀態(tài)中(以供后續(xù) join 使用)
  • 相同 key 下,當 click_log 來一條數據,如果 show_log 中沒有數據:則 click_log 不會等待,直接輸出[+(null,click_log)]數據,并且把 click_log 保存到右表的狀態(tài)中(以供后續(xù) join 使用)。

4.6.regular join 的總結

總的來說上述四種 join 可以按照以下這么劃分。

inner join 會互相等,直到有數據才下發(fā)。

left join,right join,full join 不會互相等,只要來了數據,會嘗試關聯,能關聯到則下發(fā)的字段是全的,關聯不到則另一邊的字段為 null。后續(xù)數據來了之后,發(fā)現之前下發(fā)過為沒有關聯到的數據時,就會做回撤,把關聯到的結果進行下發(fā)

4.7.怎樣才能解決 retract 導致數據重復下發(fā)到 kafka 這個問題呢?

既然 flink sql 在 left join、right join、full join 實現上的原理就是以這種 retract 的方式去實現的,就不能通過這種方式來滿足業(yè)務了。

我們來轉變一下思路,上述 join 的特點就是不會相互等,那有沒有一種 join 是可以相互等待的呢。以 left join 的思路為例,左表在關聯不到右表的時候,可以選擇等待一段時間,如果超過這段時間還等不到再下發(fā) (show_log,null),如果等到了就下發(fā)(show_log,click_log)。

interval join 閃亮登場。關于 interval join 是如何實現上述場景,及其原理實現,本篇的(下)會詳細介紹,敬請期待。

5.總結與展望

源碼公眾號后臺回復1.13.2 sql join 的奇妙解析之路獲取。

本文主要介紹了 flink sql regular 的在滿足 join 場景時存在的問題,并通過解析其實現說明了運行原理,主要包含下面兩部分:

 

  • 背景及應用場景介紹:join 作為離線數倉中最常見的場景,在實時數倉中也必然不可能缺少它,flink sql 提供的豐富的 join 方式(總結 4 種:regular join,維表 join,temporal join,interval join)對我們滿足需求提供了強大的后盾
  • 先來一個實戰(zhàn)案例:以一個曝光日志 left join 點擊日志為案例展開,介紹 flink sql join 的解決方案
  • flink sql join 的解決方案以及存在問題的介紹:主要介紹 regular join 的在上述案例的運行結果及分析源碼機制,它雖然簡單,但是 left join,right join,full join 會存在著 retract 的問題,所以在使用前,你應該充分了解其運行機制,避免出現數據發(fā)重,發(fā)多的問題。
  • 本文主要介紹 regular join retract 的問題,下節(jié)介紹怎么使用 interval join 來避免這種 retract 問題,并滿足第 2 點的實戰(zhàn)案例需求。

 

責任編輯:武曉燕 來源: 大數據羊說
相關推薦

2021-11-28 11:36:08

SQL Flink Join

2022-05-22 10:02:32

CREATESQL 查詢SQL DDL

2022-07-05 09:03:05

Flink SQLTopN

2022-06-10 09:01:04

OverFlinkSQL

2022-06-06 09:27:23

FlinkSQLGroup

2022-05-18 09:02:28

Flink SQLSQL字符串

2022-06-18 09:26:00

Flink SQLJoin 操作

2022-05-15 09:57:59

Flink SQL時間語義

2022-06-29 09:01:38

FlinkSQL時間屬性

2021-12-09 06:59:24

FlinkSQL 開發(fā)

2022-05-27 09:02:58

SQLHive語義

2022-05-12 09:02:47

Flink SQL數據類型

2022-08-10 10:05:29

FlinkSQL

2021-11-30 23:30:45

sql 性能異步

2021-09-12 07:01:07

Flink SQL ETL datastream

2021-12-17 07:54:16

Flink SQLTable DataStream

2021-12-06 07:15:47

開發(fā)Flink SQL

2021-12-05 08:28:39

Flink SQLbatch lookuSQL

2022-05-09 09:03:04

SQL數據流數據

2021-11-24 08:17:21

Flink SQLCumulate WiSQL
點贊
收藏

51CTO技術棧公眾號

亚洲码国产岛国毛片在线| 九一久久久久久| 国产亚洲xxx| 亚洲a级黄色片| 欧美videos另类精品| 91色九色蝌蚪| 91色琪琪电影亚洲精品久久| 国产一级片免费看| 北条麻妃国产九九九精品小说| 91麻豆精品国产91久久久使用方法 | 国产精品专区一| 999精品视频在线观看播放| 国产免费av国片精品草莓男男| 亚洲成人你懂的| 亚洲精品国产精品国自产| 亚洲国产精品欧美久久| 日韩高清中文字幕一区| 久久久久久69| 糖心vlog免费在线观看| 午夜欧洲一区| 日韩一级完整毛片| 免费男同深夜夜行网站| 欧洲性视频在线播放| 欧美激情一区二区三区全黄| 国产富婆一区二区三区| 亚洲一区二区三区网站| 午夜影院日韩| 欧美激情在线观看| 秋霞欧美一区二区三区视频免费 | 日韩片电影在线免费观看| 精品国产999久久久免费| 日韩精品视频网| 97超碰蝌蚪网人人做人人爽| 丁香花五月激情| 成人羞羞网站入口免费| 亚洲另类欧美自拍| 国产二级一片内射视频播放| 精品久久久久久久久久岛国gif| 在线免费观看视频一区| 亚洲中文字幕无码专区| 2019中文字幕在线电影免费| 亚洲视频免费观看| 亚洲激情啪啪| √天堂资源地址在线官网| 92国产精品观看| 精品国产免费人成电影在线观...| 国产日韩欧美中文字幕| 久久99精品久久只有精品| 国产精品678| 中文字幕 国产精品| 免费日韩一区二区| 日本中文字幕不卡免费| 亚洲黄色三级视频| 亚洲经典三级| 91精品国产91久久久| 日韩精品一区二区三| 国产在线成人| 91国产视频在线| 国产视频91在线| 国产精品视频| 97超级碰碰碰| 久久精品视频2| 久久久噜噜噜久久狠狠50岁| 国产成人精品日本亚洲专区61| 亚洲欧美日韩激情| 蜜桃视频第一区免费观看| 国产精品久久一| 亚洲资源在线播放| 国产精一品亚洲二区在线视频| 亚洲自拍欧美另类| 亚洲乱码在线观看| 成人白浆超碰人人人人| 久久久7777| 成年人视频网站在线| 国产精品久久久久影院| 激情图片qvod| 美女搞黄视频在线观看| 色婷婷亚洲精品| 免费看国产黄色片| 久久天堂久久| 日韩精品在线第一页| 日本少妇高潮喷水xxxxxxx| 色天天久久综合婷婷女18| 久久成人国产精品| 欧美一级视频免费观看| 三级亚洲高清视频| 91精品久久久久久久久久入口| 国产又粗又长视频| 成年人国产精品| 亚洲黄色一区二区三区| 欧美1—12sexvideos| 日韩欧美国产一区二区| 亚洲怡红院在线| 丝袜美腿一区二区三区动态图| 亚洲日本中文字幕| wwwav国产| 久久综合九色| 91黄在线观看| www免费网站在线观看| 一区二区三区免费观看| 国产男女在线观看| 99精品女人在线观看免费视频| 亚洲成人av片在线观看| 久久久精品成人| 伊人久久久大香线蕉综合直播| 日韩美女在线观看| 亚洲成熟女性毛茸茸| 久久久三级国产网站| 日本成人在线不卡| 成人在线视频播放| 精品国产污网站| 99久久精品久久亚洲精品| 9色精品在线| 99久久精品无码一区二区毛片| 国产一级在线| 精品国产91久久久久久| 四虎1515hh.com| 欧美亚洲国产精品久久| 57pao精品| 成人免费一级视频| 亚洲图片你懂的| 男女啪啪网站视频| 欧美自拍视频| 国内精品久久影院| 国产av无码专区亚洲av麻豆| 中文字幕成人在线观看| 国产精品欧美激情在线观看| 动漫av一区| 久久亚洲欧美日韩精品专区| 亚洲国产无线乱码在线观看 | 久久精品日韩| av成人影院在线| 日韩女优视频免费观看| 999精品在线视频| 免费av网站大全久久| 另类视频在线观看+1080p| zzzwww在线看片免费| 日韩美女主播在线视频一区二区三区| 人与动物性xxxx| 全国精品久久少妇| 日韩欧美精品久久| 制服诱惑亚洲| 一本一本久久a久久精品牛牛影视| 日韩三级视频在线播放| 成a人片亚洲日本久久| 久久福利一区二区| 视频一区在线| 久久久久久久一区二区| 人妻一区二区三区四区| 午夜精品视频一区| 中文字幕乱码在线| 亚洲在线免费| 欧美日韩喷水| 国产精品毛片久久久久久久久久99999999| 精品在线小视频| 波多野结衣 久久| 国产亚洲欧美在线| 天天插天天操天天射| 成人直播大秀| 成人黄色大片在线免费观看| 黄色片网站在线观看| 欧美一区二区三区喷汁尤物| 人妻少妇精品一区二区三区| 成人黄色大片在线观看 | 无码视频在线观看| 国产欧美一区二区精品婷婷 | 中文字幕日本精品| 国产精品久久久久久在线| 亚洲久草在线视频| 性感美女一区二区三区| 亚洲综合99| 亚洲精品电影在线一区| 亚洲精品午夜| 日本久久久a级免费| 阿v免费在线观看| 欧美一区三区四区| 日本在线小视频| 亚洲国产精品国自产拍av| 一级 黄 色 片一| 最新亚洲激情| 婷婷久久青草热一区二区 | 韩国成人一区| 欧美aaa视频| 九九九久久国产免费| 凸凹人妻人人澡人人添| 欧美网站一区二区| 久久网一区二区| 国产亚洲精品aa| 老女人性生活视频| 久久久久91| 丰满人妻一区二区三区53号| 香蕉久久99| 亚洲xxxx3d| 欧美成人免费电影| 九九热r在线视频精品| 免费在线超碰| 日韩免费看网站| 波多野结衣一区二区三区在线| 亚洲女性喷水在线观看一区| www.久久av| 国产成人在线色| 日本老熟妇毛茸茸| 亚洲午夜av| 一区二区国产日产| 网友自拍一区| 亚洲最大av网站| 中文在线а√天堂| 欧美日韩国产成人在线观看| 黄色软件在线观看| 亚洲成人a级网| 99精品视频免费看| 在线视频一区二区三区| 亚洲精品午夜久久久久久久| 中文一区二区完整视频在线观看| 中文字幕一区三区久久女搜查官| 韩国理伦片一区二区三区在线播放 | 国产又黄又猛又爽| 欧美日韩免费看| 妺妺窝人体色www婷婷| 中文字幕欧美激情| 亚洲成人日韩在线| 成人小视频免费观看| 亚洲黄色av片| 日韩综合小视频| av免费观看网| 精品1区2区3区4区| 99视频精品全部免费看| 婷婷另类小说| 中文字幕日韩精品久久| 欧美一级精品| 色一情一乱一伦一区二区三区 | www.性欧美| 性活交片大全免费看| 国产精品69久久久久水密桃| 亚洲欧美日本一区二区| 久久精品久久久精品美女| 日日碰狠狠躁久久躁婷婷| 噜噜噜91成人网| 欧美三级午夜理伦三级| 亚洲在线网站| wwwxxx黄色片| 日韩精品国产欧美| 日韩中文字幕免费在线 | 先锋资源在线视频| 黄色精品一二区| 伊人国产精品视频| 黄网站免费久久| 真实乱偷全部视频| 粉嫩av一区二区三区| 苍井空张开腿实干12次| 国产成人精品亚洲日本在线桃色| 欧美国产在线一区| 国产v综合v亚洲欧| 韩国三级视频在线观看| 成人国产精品免费网站| 91视频啊啊啊| 久久久影视传媒| 日韩黄色中文字幕| 综合自拍亚洲综合图不卡区| 日本激情视频一区二区三区| 亚洲同性gay激情无套| 日本老熟俱乐部h0930| 亚洲综合色自拍一区| 欧美精品一级片| 婷婷综合另类小说色区| 波多野结衣视频网站| 91精品91久久久中77777| 中文字幕网址在线| 日韩一二三区不卡| 天堂中文在线官网| 在线播放精品一区二区三区 | 国产精品一区二区三区久久久| 国产精品99久久久久久董美香 | 欧美激情成人| 激情图片qvod| 亚洲永久免费精品| 国产又大又黄又猛| 国产精品18久久久久久久久| 亚洲一级av无码毛片精品| 国产亚洲精品aa| 综合五月激情网| 岛国av一区二区三区| 91亚洲欧美激情| 精品99一区二区三区| 精华区一区二区三区| 久久精品国产亚洲| 麻豆蜜桃在线观看| 91亚洲精品久久久| 亚洲美女久久| 97超碰人人爱| 美女久久网站| 香蕉网在线视频| 国产人伦精品一区二区| 九九热视频精品| 欧美性色aⅴ视频一区日韩精品| 国产高清视频免费观看| 亚洲欧美国产视频| 欧洲成人综合网| 国产免费一区二区三区在线观看| 亚洲国产中文在线| 亚洲va久久久噜噜噜久久狠狠 | 亚洲人精品午夜| 日韩精品在线观看免费| 在线综合视频播放| 久久视频www| 久久久这里只有精品视频| 成人在线免费av| 国外成人免费视频| 亚洲国产精品久久久久蝴蝶传媒| www国产黄色| 懂色av中文一区二区三区| 国产精品美女高潮无套| 尤物在线观看一区| 在线观看日韩一区二区| 亚洲免费av片| aa国产成人| 不卡一区二区三区四区五区| 99精品小视频| 国产精品久久久毛片| 久久嫩草精品久久久久| 久久精品久久国产| 在线播放欧美女士性生活| 国产在线日本| 日韩免费在线视频| 羞羞色国产精品网站| 国产九九九九九| 大陆成人av片| 久久精品视频免费在线观看| 欧美日韩aaa| 97电影在线观看| 日本亚洲欧美三级| 日韩伦理一区二区三区| 国产无限制自拍| 成人免费视频一区| 亚洲一区二区91| 欧美成人精精品一区二区频| 成人免费看片| 91综合免费在线| 中文字幕一区二区三区欧美日韩 | 久久www视频| 国产乱国产乱300精品| 国精产品一区一区二区三区mba| 色婷婷综合激情| 成人在线视频成人| 国产精品久久久久免费a∨大胸 | 国产精品一二三在线观看| 极品销魂美女一区二区三区| 日韩黄色中文字幕| 欧美日韩成人在线| 久操视频在线免费播放| 成人免费淫片视频软件| 亚洲五月综合| 无码人妻一区二区三区精品视频| 一区二区在线观看视频在线观看| av资源免费看| 久久男人的天堂| 色吊丝一区二区| 国产熟女高潮视频| 久久久www成人免费毛片麻豆| 神马久久久久久久| 色噜噜狠狠色综合网图区| 96sao精品免费视频观看| 成人毛片100部免费看| 成人激情视频网站| 精品久久久久久久久久久国产字幕 | 久久中文久久字幕| 日本精品视频| 国产九九九九九| 欧美国产欧美综合| 国产视频一二三四区| 久久久久久久久爱| 国产精品18hdxxxⅹ在线| 日本www在线播放| 国产精品久久三| 精品人妻一区二区三区日产乱码 | 3d欧美精品动漫xxxx无尽| 亚洲成人一区二区三区| 国产剧情在线观看一区二区| 国产在线精品观看| 亚洲性日韩精品一区二区| 日韩午夜视频在线| 欧美成人三级在线视频| 国产日韩精品久久久| 国产suv一区二区| 26uuu国产精品视频| 99久久www免费| 日本一级片在线播放| 欧美日韩在线三级| 888av在线视频| 手机福利在线视频| 91视频一区二区三区| 一级片视频免费| 91成人在线观看国产| 亚洲欧美综合久久久| 可以直接看的无码av| 欧美一区三区四区| www.26天天久久天堂| 欧美日韩性生活片| 亚洲人成伊人成综合网小说| 国产一二在线观看|