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

Flink SQL 知其所以然:Table 與 DataStream 的轉轉轉

數據庫 其他數據庫
相信大家看到本文的標題時,會比較好奇,要寫 SQL 就純 SQL 唄,要寫 DataStream 就純 DataStream 唄,為啥還要把這兩個接口做集成呢?

1.序篇

廢話不多說,咱們先直接上本文的目錄和結論,小伙伴可以先看結論快速了解博主期望本文能給小伙伴們帶來什么幫助:

  1. 背景及應用場景介紹:博主期望你能了解到,Flink 支持了 SQL 和 Table API 中的 Table 與 DataStream 互轉的接口。通過這種互轉的方式,我們就可以將一些自定義的數據源(DataStream)創建為 SQL 表,也可以將 SQL 執行結果轉換為 DataStream 然后后續去完成一些在 SQL 中實現不了的復雜操作。肥腸的方便。
  2. 目前只有流任務支持互轉,批任務不支持:在 1.13 版本中,由于流和批的 env 接口不一樣,流任務為 StreamTableEnvironment,批任務為 TableEnvironment,目前只有 StreamTableEnvironment 支持了互轉的接口,TableEnvironment 沒有這樣的接口,因此目前流任務支持互轉,批任務不支持。但是 1.14 版本中流批任務的 env 都統一到了 StreamTableEnvironment 中,流批任務中就都可以進行互轉了。
  3. Retract 語義 SQL 轉 DataStream 需要重點注意:Append 語義的 SQL 轉為 DataStream 使用的 API 為 StreamTableEnvironment::toDataStream,Retract 語義的 SQL 轉為 DataStream 使用的 API 為 StreamTableEnvironment::toRetractStream,兩個接口不一樣,小伙伴萌一定要特別注意。

2.背景及應用場景介紹

相信大家看到本文的標題時,會比較好奇,要寫 SQL 就純 SQL 唄,要寫 DataStream 就純 DataStream 唄,為啥還要把這兩個接口做集成呢?

博主舉一個案例:在拼多多發優惠券的場景下,為了控制成本,希望能在每日優惠券發放金額加和超過 1w 時,及時報警出來,控制預算。

優惠券表的發放數據:

 

最終期望的結果是:每天的 money 之和超過 1w 的時候,報警報警報警!!!

那么針對上述場景,有兩種對應的解決方案:

  1. 方案 1:可想而知,DataStream 是必然能夠解決我們的問題的。
  2. 方案 2:DataStream 開發效率不高,可以使用 SQL 計算優惠券發放的結果,但是 SQL 無法做到報警。所以可以將 SQL 的查詢的結果(即 Table)轉為 DataStream,然后在 DataStream 后自定義報警邏輯的算子,超過閾值進行報警。

本節就介紹方案 2 的實現思路。

注意:

當然還有一些其他的比如模式識別監控異常然后報警的場景使用 DataStream 去實現就更加復雜了,所以我們也可以使用類似的思路,先 SQL 實現業務邏輯,然后接一個 DataStream 算子實現報警邏輯。

3.Table 與 DataStream API 的轉換具體實現

3.1.先看一個官網的簡單案例

官網的案例主要是讓大家看看要做到 Table 與 DataStream API 的轉換會涉及到使用哪些接口。

  1. import org.apache.flink.streaming.api.datastream.DataStream; 
  2. import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment; 
  3. import org.apache.flink.table.api.Table
  4. import org.apache.flink.table.api.bridge.java.StreamTableEnvironment; 
  5. import org.apache.flink.types.Row; 
  6.  
  7. StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); 
  8. StreamTableEnvironment tableEnv = StreamTableEnvironment.create(env); 
  9.  
  10. DataStream<String> dataStream = env.fromElements("Alice""Bob""John"); 
  11.  
  12. // 1. 使用 StreamTableEnvironment::fromDataStream API 將 DataStream 轉為 Table 
  13. Table inputTable = tableEnv.fromDataStream(dataStream); 
  14.  
  15. // 將 Table 注冊為一個臨時表 
  16. tableEnv.createTemporaryView("InputTable", inputTable); 
  17.  
  18. // 然后就可以在這個臨時表上做一些自定義的查詢了 
  19. Table resultTable = tableEnv.sqlQuery("SELECT UPPER(f0) FROM InputTable"); 
  20.  
  21. // 2. 也可以使用 StreamTableEnvironment::toDataStream 將 Table 轉為 DataStream 
  22. // 注意:這里只能轉為 DataStream<Row>,其中的數據類型只能為 Row 
  23. DataStream<Row> resultStream = tableEnv.toDataStream(resultTable); 
  24.  
  25. // 將 DataStream 結果打印到控制臺 
  26. resultStream.print(); 
  27. env.execute(); 
  28.  
  29. // prints: 
  30. // +I[Alice] 
  31. // +I[Bob] 
  32. // +I[John] 

可以看到重點的接口就是:

  1. StreamTableEnvironment::toDataStream:將 Table 轉為 DataStream
  2. StreamTableEnvironment::fromDataStream:將 DataStream 轉為 Table

3.2.實現第 2 節中的邏輯

我們使用上面介紹的兩個接口對優惠券發放金額預警的案例做一個實現。

  1. @Slf4j 
  2. public class AlertExample { 
  3.  
  4.     public static void main(String[] args) throws Exception { 
  5.  
  6.         FlinkEnv flinkEnv = FlinkEnvUtils.getStreamTableEnv(args); 
  7.  
  8.         String createTableSql = "CREATE TABLE source_table (\n" 
  9.                 + "    id BIGINT,\n" 
  10.                 + "    money BIGINT,\n" 
  11.                 + "    row_time AS cast(CURRENT_TIMESTAMP as timestamp_LTZ(3)),\n" 
  12.                 + "    WATERMARK FOR row_time AS row_time - INTERVAL '5' SECOND\n" 
  13.                 + ") WITH (\n" 
  14.                 + "  'connector' = 'datagen',\n" 
  15.                 + "  'rows-per-second' = '1',\n" 
  16.                 + "  'fields.id.min' = '1',\n" 
  17.                 + "  'fields.id.max' = '100000',\n" 
  18.                 + "  'fields.money.min' = '1',\n" 
  19.                 + "  'fields.money.max' = '100000'\n" 
  20.                 + ")\n"
  21.  
  22.         String querySql = "SELECT UNIX_TIMESTAMP(CAST(window_end AS STRING)) * 1000 as window_end, \n" 
  23.                 + "      window_start, \n" 
  24.                 + "      sum(money) as sum_money,\n" 
  25.                 + "      count(distinct id) as count_distinct_id\n" 
  26.                 + "FROM TABLE(CUMULATE(\n" 
  27.                 + "         TABLE source_table\n" 
  28.                 + "         , DESCRIPTOR(row_time)\n" 
  29.                 + "         , INTERVAL '5' SECOND\n" 
  30.                 + "         , INTERVAL '1' DAY))\n" 
  31.                 + "GROUP BY window_start, \n" 
  32.                 + "        window_end"
  33.  
  34.         // 1. 創建數據源表,即優惠券發放明細數據 
  35.         flinkEnv.streamTEnv().executeSql(createTableSql); 
  36.         // 2. 執行 query 查詢,計算每日發放金額 
  37.         Table resultTable = flinkEnv.streamTEnv().sqlQuery(querySql); 
  38.  
  39.         // 3. 報警邏輯(toDataStream 返回 Row 類型),如果 sum_money 超過 1w,報警 
  40.         flinkEnv.streamTEnv() 
  41.                 .toDataStream(resultTable, Row.class) 
  42.                 .flatMap(new FlatMapFunction<Row, Object>() { 
  43.                     @Override 
  44.                     public void flatMap(Row value, Collector<Object> out) throws Exception { 
  45.                         long l = Long.parseLong(String.valueOf(value.getField("sum_money"))); 
  46.  
  47.                         if (l > 10000L) { 
  48.                             log.info("報警,超過 1w"); 
  49.                         } 
  50.                     } 
  51.                 }); 
  52.  
  53.         flinkEnv.env().execute(); 
  54.     } 
  55.  

 執行效果如下:

3.3.Table 和 DataStream 轉換注意事項

3.3.1.目前只支持流任務互轉(1.13)

目前在 1.13 版本中,Flink 對于 Table 和 DataStream 的轉化是有一些限制的:

目前流任務使用的 env 為 StreamTableEnvironment,批任務為 TableEnvironment,而 Table 和 DataStream 之間的轉換目前只有 StreamTableEnvironment 的接口支持。

所以其實小伙伴萌可以理解為只有流任務才支持 Table 和 DataStream 之間的轉換,批任務是不支持的(雖然可以使用流模式處理有界流(批數據),但效率較低,這種騷操作不建議大家搞)。

那什么時候才能支持批任務的 Table 和 DataStream 之間的轉換呢?

1.14 版本支持。1.14 版本中,流和批的都統一到了 StreamTableEnvironment 中,因此就可以做 Table 和 DataStream 的互相轉換了。

3.3.2.Retract 語義 SQL 轉 DataStream 注意事項

Retract 語義的 SQL 使用 toDataStream 轉換會報錯不支持。具體報錯截圖如下。意思是不支持 update 類型的結果數據。

如果要把 Retract 語義的 SQL 轉為 DataStream,我們需要使用 toRetractStream。如下案例:

  1. @Slf4j 
  2. public class AlertExampleRetract { 
  3.  
  4.     public static void main(String[] args) throws Exception { 
  5.  
  6.         FlinkEnv flinkEnv = FlinkEnvUtils.getStreamTableEnv(args); 
  7.  
  8.         String createTableSql = "CREATE TABLE source_table (\n" 
  9.                 + "    id BIGINT,\n" 
  10.                 + "    money BIGINT,\n" 
  11.                 + "    `time` as cast(CURRENT_TIMESTAMP as bigint) * 1000\n" 
  12.                 + ") WITH (\n" 
  13.                 + "  'connector' = 'datagen',\n" 
  14.                 + "  'rows-per-second' = '1',\n" 
  15.                 + "  'fields.id.min' = '1',\n" 
  16.                 + "  'fields.id.max' = '100000',\n" 
  17.                 + "  'fields.money.min' = '1',\n" 
  18.                 + "  'fields.money.max' = '100000'\n" 
  19.                 + ")\n"
  20.  
  21.         String querySql = "SELECT max(`time`), \n" 
  22.                 + "      sum(money) as sum_money\n" 
  23.                 + "FROM source_table\n" 
  24.                 + "GROUP BY (`time` + 8 * 3600 * 1000) / (24 * 3600 * 1000)"
  25.  
  26.         // 1. 創建數據源表,即優惠券發放明細數據 
  27.         flinkEnv.streamTEnv().executeSql(createTableSql); 
  28.         // 2. 執行 query 查詢,計算每日發放金額 
  29.         Table resultTable = flinkEnv.streamTEnv().sqlQuery(querySql); 
  30.         // 3. 報警邏輯(toRetractStream 返回 Tuple2<Boolean, Row> 類型),如果 sum_money 超過 1w,報警 
  31.         // Tuple2<Boolean, Row> f0 的 Boolean 標識是否是回撤消息 
  32.         flinkEnv.streamTEnv() 
  33.                 .toRetractStream(resultTable, Row.class) 
  34.                 .flatMap(new FlatMapFunction<Tuple2<Boolean, Row>, Object>() { 
  35.                     @Override 
  36.                     public void flatMap(Tuple2<Boolean, Row> value, Collector<Object> out) throws Exception { 
  37.                         long l = Long.parseLong(String.valueOf(value.f1.getField("sum_money"))); 
  38.  
  39.                         if (l > 10000L) { 
  40.                             log.info("報警,超過 1w"); 
  41.                         } 
  42.                     } 
  43.                 }); 
  44.  
  45.         flinkEnv.env().execute(); 
  46.     } 
  47.  

4.總結與展望

本文主要介紹了 flink 中 Table 和 DataStream 互轉使用方式,并介紹了一些使用注意事項,總結如下:

  1. 背景及應用場景介紹:博主期望你能了解到,Flink 支持了 SQL 和 Table API 中的 Table 與 DataStream 互轉的接口。通過這種互轉的方式,我們就可以將一些自定義的數據源(DataStream)創建為 SQL 表,也可以將 SQL 執行結果轉換為 DataStream 然后后續去完成一些在 SQL 中實現不了的復雜操作。肥腸的方便。
  2. 目前只有流任務支持互轉,批任務不支持:在 1.13 版本中,由于流和批的 env 接口不一樣,流任務為 StreamTableEnvironment,批任務為 TableEnvironment,目前只有 StreamTableEnvironment 支持了互轉的接口,TableEnvironment 沒有這樣的接口,因此目前流任務支持互轉,批任務不支持。但是 1.14 版本中流批任務的 env 都統一到了 StreamTableEnvironment 中,流批任務中就都可以進行互轉了。
  3. Retract 語義 SQL 轉 DataStream 需要重點注意:Append 語義的 SQL 轉為 DataStream 使用的 API 為 StreamTableEnvironment::toDataStream,Retract 語義的 SQL 轉為 DataStream 使用的 API 為 StreamTableEnvironment::toRetractStream,兩個接口不一樣,小伙伴萌一定要特別注意。

 

責任編輯:姜華 來源: 大數據羊說
相關推薦

2022-05-22 10:02:32

CREATESQL 查詢SQL DDL

2022-05-18 09:02:28

Flink SQLSQL字符串

2022-05-15 09:57:59

Flink SQL時間語義

2022-06-10 09:01:04

OverFlinkSQL

2022-07-05 09:03:05

Flink SQLTopN

2022-06-06 09:27:23

FlinkSQLGroup

2022-06-29 09:01:38

FlinkSQL時間屬性

2021-12-09 06:59:24

FlinkSQL 開發

2022-05-27 09:02:58

SQLHive語義

2022-05-12 09:02:47

Flink SQL數據類型

2021-11-28 11:36:08

SQL Flink Join

2022-08-10 10:05:29

FlinkSQL

2021-11-27 09:03:26

flink join數倉

2021-09-12 07:01:07

Flink SQL ETL datastream

2022-06-18 09:26:00

Flink SQLJoin 操作

2021-12-06 07:15:47

開發Flink SQL

2022-05-09 09:03:04

SQL數據流數據

2021-11-24 08:17:21

Flink SQLCumulate WiSQL

2018-08-27 06:30:49

InnoDBMySQLMyISAM

2021-12-13 07:57:47

Flink SQL Flink Hive Udf
點贊
收藏

51CTO技術棧公眾號

男人天堂网在线| 男人天堂中文字幕| 成人污污www网站免费丝瓜| 亚洲欧美偷拍三级| 国产偷国产偷亚洲高清97cao| 91精品国产乱码在线观看| 精品一级毛片| 亚洲成人1234| 天天干天天草天天| zzzwww在线看片免费| 国产日韩欧美一区二区三区综合 | 久久久黄色大片| 97在线精品| 亚洲国产91色在线| 伊人色在线观看| 亚洲妇女成熟| 亚洲男人的天堂在线观看| 蜜桃视频日韩| 亚洲精品国产av| 麻豆视频一区二区| 91精品国产高清| 欧美日韩午夜视频| re久久精品视频| 亚洲精品国精品久久99热| 超碰成人在线播放| 亚洲1234区| 精品国产91久久久久久老师| 热这里只有精品| 国产精品秘入口| 91麻豆国产福利在线观看| 91在线看网站| 亚洲一级视频在线观看| 视频一区中文字幕国产| 国内外成人免费激情在线视频| 开心激情五月网| 精品美女久久| 国产一区二区久久精品| 免费a级黄色片| 六月丁香久久丫| 欧美变态tickle挠乳网站| xxww在线观看| 欧美xnxx| 在线精品视频免费观看| 成人黄色片视频| 天堂av在线| 欧美日韩另类字幕中文| 日本a在线免费观看| 欧美xxxx少妇| 一区二区三区欧美激情| 日本免费在线视频观看| 黄视频网站在线看| 日韩理论片中文av| 在线观看亚洲视频啊啊啊啊| 懂色av中文在线| 国产欧美日韩视频一区二区| 欧美日韩国产综合在线| 欧洲毛片在线| 久久精品一二三| 日本一区二区三区免费观看| 美女欧美视频在线观看免费| 91麻豆免费看| 日本在线观看一区| 最新av网站在线观看 | 在线免费日韩av| 女同性一区二区三区人了人一| 欧美成人h版在线观看| 51精品免费网站| 欧美日韩综合| 午夜精品久久久久久久男人的天堂 | 啪啪激情综合网| 日韩国产高清视频在线| 9.1成人看片免费版| 精品日产免费二区日产免费二区| 有码中文亚洲精品| 午夜成人亚洲理伦片在线观看| 99国产精品一区二区| 久久这里有精品视频| 麻豆国产尤物av尤物在线观看 | 中文有码一区| 中文字幕久久久| 校园春色 亚洲| 亚洲欧洲一区| 国产精品久久久久久久电影| 一级黄色片免费| 东方aⅴ免费观看久久av| 精品视频免费观看| 91精品专区| 一二三区精品福利视频| 欧美 日韩 国产在线观看| 成人亚洲免费| 亚洲国产精品电影| 国产99在线 | 亚洲| 伊人情人综合网| 欧美伊久线香蕉线新在线| 成人黄色片在线观看| 国产**成人网毛片九色| 欧美极品jizzhd欧美| 免费黄色在线网站| 欧美日韩午夜剧场| 国产精品嫩草影视| 国产成人1区| 欧美美女15p| 波多野结衣高清在线| 国产麻豆成人传媒免费观看| 久久精品人成| 97影院秋霞午夜在线观看| 欧美性xxxx在线播放| 九色porny自拍| 欧美人与动xxxxz0oz| 色av中文字幕一区| 日日噜噜噜噜人人爽亚洲精品| 国产一区二区三区四区五区美女 | 国产在线观看无码免费视频| 91综合视频| 国产91精品网站| 欧美熟妇交换久久久久久分类| 久久人人97超碰com| 真实国产乱子伦对白视频| 成人全视频免费观看在线看| 亚洲精品色婷婷福利天堂| 欧美成人手机视频| 久久se这里有精品| 日韩电影天堂视频一区二区| freexxx性亚洲精品| 日韩天堂在线观看| 手机在线免费看片| 美女一区二区三区| 日韩欧美99| 伊人久久视频| 亚洲激情久久久| 精品无码人妻一区二区三区 | 亚洲激情 欧美| 欧美91大片| 成人夜晚看av| 免费在线观看黄色| 欧美日韩一二三区| 99久久精品免费视频| 国产日韩综合| 精品一区二区久久久久久久网站| 天天色天天射天天综合网| 91麻豆精品国产91久久久久久 | 欧美日韩国产一区精品一区| 国产视频观看一区| 亚洲成人三级| 欧美日韩精品一区二区三区四区| 中文字幕 自拍| 日韩国产精品久久| 亚洲福利av| 福利一区二区免费视频| 中文字幕一区二区三区电影| 波多野结衣在线观看视频| 久久精品日产第一区二区三区高清版 | 欧洲日本在线| 91麻豆精品国产| 亚洲天堂黄色片| 国产激情偷乱视频一区二区三区| 超碰超碰超碰超碰超碰| 中文字幕久久精品一区二区| 欧美国产日韩在线| 日韩一级片免费在线观看| 婷婷六月综合亚洲| 国产呦小j女精品视频| 日韩av网站免费在线| 亚洲一区精品视频| vam成人资源在线观看| 欧美人与性动交a欧美精品| www.色视频| 激情久久av一区av二区av三区| 欧美 日本 国产| 日日嗨av一区二区三区四区| 亚洲精品无人区| 国产高清精品二区| 久久久久久久久久婷婷| 深夜福利视频一区| 欧美日韩一区二区三区免费看| 青青操在线视频观看| 国产精品1024| jizzjizzxxxx| 99国产**精品****| 国精产品一区二区| 国产精品videossex撒尿| 欧美剧在线观看| 色视频在线观看| 欧美一区二区视频免费观看| 日本学生初尝黑人巨免费视频| 久久奇米777| 在线观看免费视频污| 亚洲国产电影| 亚洲精品成人a8198a| 亚洲视频国产| 国产精品爱久久久久久久| 在线免费观看的av| 亚洲欧洲美洲在线综合| 91中文字幕在线视频| 午夜精品福利一区二区三区蜜桃| 高清国产在线观看| 成人免费福利片| 日本中文字幕二区| 亚洲综合精品四区| 免费观看中文字幕| 欧美精品momsxxx| 国产成人免费电影| 成人在线观看免费视频| 国外成人在线视频| 黄色免费在线观看网站| 亚洲欧美一区二区精品久久久| 国产内射老熟女aaaa∵| 一本大道久久a久久综合婷婷 | 自拍视频在线免费观看| 亚洲国产精品久久久久秋霞蜜臀| 91精品国自产| 在线精品视频一区二区三四| 日本在线观看视频网站| 最新日韩av在线| 国产熟女一区二区| 91在线精品一区二区三区| 99视频在线观看视频| 美国毛片一区二区三区| 黄色高清无遮挡| 99xxxx成人网| 国产一区二区三区乱码| 亚洲国产一区二区在线观看 | 在线国产日韩| 今天免费高清在线观看国语| 国产午夜一区| 欧美日韩一区在线视频| 欧美电影免费网站| 高清视频一区| 亚洲视频国产| 99国产视频| 欧美另类中文字幕| 亚洲一区二区三区成人在线视频精品| 免费污视频在线一区| 欧美一级免费看| 悠悠资源网亚洲青| 77777少妇光屁股久久一区| 波多一区二区| 久久琪琪电影院| 超碰在线97国产| 久久久久久尹人网香蕉| 久久香蕉av| 国产+成+人+亚洲欧洲| 先锋成人av| 久久久久久久久国产| 秋霞在线午夜| 久久久久久国产三级电影| 国产亚av手机在线观看| 欧美疯狂做受xxxx高潮| 美女网站视频在线| 高清视频欧美一级| 精精国产xxxx视频在线野外| 2019国产精品自在线拍国产不卡| 波多野一区二区| 91成人在线视频| 日韩免费福利视频| 国产精品美女视频网站| 日韩电影精品| 91香蕉亚洲精品| 99久久人爽人人添人人澡| 岛国一区二区三区高清视频| 久久综合社区| 欧美一区二区在线视频观看| 欧美日韩在线播放视频| 中文字幕中文字幕在线中心一区 | jizz性欧美2| 久久综合久久久| 成人3d动漫在线观看| 一区中文字幕在线观看| 国产精品九九| 无码人妻丰满熟妇区毛片18| 日韩电影在线看| 永久av免费在线观看| 成人一级片网址| 爱爱免费小视频| 中文字幕亚洲在| 国产真实乱人偷精品视频| 日韩欧美在线免费| 一本到在线视频| 欧美精品一区二区三区蜜桃| 免费在线观看一级毛片| 日韩专区在线播放| av资源中文在线| 国产美女精品视频| 高清一区二区三区| 午夜精品亚洲一区二区三区嫩草| 亚洲乱码在线| 欧美 国产 小说 另类| 狠狠色综合播放一区二区| 国产又粗又长又爽| 1024国产精品| 东京热一区二区三区四区| 欧美年轻男男videosbes| 日本激情视频网站| 中文字幕亚洲综合| 性欧美18xxxhd| 92国产精品久久久久首页| 九九久久精品| 白白操在线视频| 免费观看久久久4p| 视频免费在线观看| 中文字幕一区二区三| www.国产色| 日韩精品在线一区| 在线看免费av| 欧美专区福利在线| 亚洲精选av| 一区二区精品国产| 蜜乳av另类精品一区二区| 特黄特色免费视频| 国产精品欧美久久久久无广告 | а√天堂中文在线资源8| 成人www视频在线观看| 亚洲精品合集| 真人抽搐一进一出视频| 国产一级精品在线| 久久婷婷五月综合| 欧美视频在线看| 秋霞视频一区二区| 超在线视频97| 日韩国产一二三区| 日本一区视频在线观看| 亚洲欧洲日本mm| 无码人妻精品一区二区三| 亚洲欧洲一区二区在线播放| 伦av综合一区| 亚洲精品日韩久久久| 精精国产xxxx视频在线野外| 99久久精品免费看国产四区| 久久亚洲在线| jizzzz日本| 国产精品久久夜| 中文在线字幕av| 一区二区在线免费视频| 欧美舌奴丨vk视频| 久久久久久久久久久久久久一区| 伊人久久亚洲热| 欧美激情 亚洲| 亚洲成人精品在线观看| 亚洲精品一区二区三区区别 | 日韩三级影视| 日韩精品在在线一区二区中文| 久久激情视频| 亚洲精品色午夜无码专区日韩| 一本色道久久综合狠狠躁的推荐| 偷拍25位美女撒尿视频在线观看| 性欧美视频videos6一9| 精品精品国产毛片在线看| 国产女主播自拍| 99视频一区二区三区| 国产精品视频久久久久久久| 亚洲精品国产精品国自产在线| 123区在线| 免费国产一区| 日本 国产 欧美色综合| 国产精品久久久免费看| 91精品国产色综合久久| 污视频在线看网站| 精品999在线观看| 噜噜噜躁狠狠躁狠狠精品视频| 蜜桃传媒一区二区亚洲av| 欧美亚洲免费在线一区| 欧美高清视频| 成人在线看片| 免费亚洲婷婷| 男女男精品视频网站| 91精品国产黑色紧身裤美女| 欧美24videosex性欧美| 久草热久草热线频97精品| 久久久噜噜噜| 婷婷社区五月天| 精品久久人人做人人爰| 正在播放日韩精品| 亚洲天堂电影网| 国产91露脸合集magnet| 毛片在线免费视频| 色小说视频一区| 欧美国产中文高清| 亚洲国产精品久久久久爰色欲| 中文字幕欧美日韩一区| av中文字幕观看| 91成人性视频| 亚洲人成免费网站| 中文字幕一二三四区| 3d动漫精品啪啪1区2区免费 | 成人福利在线| 99久久99| 日韩成人免费电影| 免费看一级一片| 亚洲三级av在线| 视频一区日韩精品| 在线视频日韩一区| 亚洲国产综合色| 天堂а√在线官网| 精品国产免费久久久久久尖叫 | 欧美亚洲国产一区二区三区va| 天堂亚洲精品| 亚洲图片小说在线| 91欧美激情一区二区三区成人| 国产精品久久久久久久一区二区| 5278欧美一区二区三区|