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

【大數(shù)據(jù)】Hive 內(nèi)置函數(shù)和 UDF 講解

大數(shù)據(jù) 數(shù)據(jù)倉庫
Hive是基于Hadoop的一個(gè)數(shù)據(jù)倉庫工具,可以將結(jié)構(gòu)化數(shù)據(jù)文件映射為一張數(shù)據(jù)庫表,并提供類SQL語句操作。Hive內(nèi)置了很多函數(shù),可以滿足基本的查詢需求,同時(shí)還支持自定義函數(shù)(UDF)來實(shí)現(xiàn)更加靈活的操作。

一、概述

Hive是基于Hadoop的一個(gè)數(shù)據(jù)倉庫工具,可以將結(jié)構(gòu)化數(shù)據(jù)文件映射為一張數(shù)據(jù)庫表,并提供類SQL語句操作。Hive內(nèi)置了很多函數(shù),可以滿足基本的查詢需求,同時(shí)還支持自定義函數(shù)(UDF)來實(shí)現(xiàn)更加靈活的操作。

圖片

官方文檔:https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF

下面簡單介紹Hive內(nèi)置函數(shù)和UDF的相關(guān)內(nèi)容:

1)內(nèi)置函數(shù)

Hive內(nèi)置函數(shù)主要用于集合函數(shù)、數(shù)學(xué)函數(shù)、日期函數(shù)、字符串函數(shù)和條件判斷函數(shù)等方面。例如:

  • 條件判斷函數(shù):IF、WHEN、CASE、COALESCE等。
  • 字符串函數(shù):LENGTH、SUBSTR、CONCAT、TRIM、LOWER、UPPER等;
  • 集合函數(shù):SUM、MAX、MIN、AVG、COUNT等;
  • 數(shù)學(xué)函數(shù):ROUND、EXP、LOG、SIGN等;
  • 日期函數(shù):YEAR、MONTH、DAY、HOUR、MINUTE、SECOND等;

2)自定義函數(shù)(UDF)

除了Hive內(nèi)置函數(shù)之外,用戶還可以自定義函數(shù)來實(shí)現(xiàn)更加靈活的操作。 Hive支持三種類型的自定義函數(shù):

  • 標(biāo)量函數(shù)(UDF):將一行中的一個(gè)值轉(zhuǎn)換為另外一個(gè)值,比如字符串轉(zhuǎn)小寫;
  • 集合函數(shù)(UDAF):作用于多個(gè)值上,并且返回一個(gè)結(jié)果,比如平均值;
  • 行級(jí)別函數(shù)(UDTF):將一行中的一個(gè)或多個(gè)字段轉(zhuǎn)換為多行,比如對(duì)一行中的字符串進(jìn)行單詞切分。

自定義函數(shù)用Java語言編寫,需要繼承Hive提供的UDF、UDAF或UDTF類,然后實(shí)現(xiàn)相應(yīng)的方法。例如,下面是一個(gè)自定義的UDF函數(shù),用于將字符串轉(zhuǎn)為小寫:

import org.apache.hadoop.hive.ql.exec.UDF;
import org.apache.hadoop.io.Text;

public class Lowercase extends UDF {
  public Text evaluate(Text str) {
    if (str == null) {
      return null;
    } else {
      return new Text(str.toString().toLowerCase());
    }
  }
}

以上是簡單介紹Hive內(nèi)置函數(shù)和UDF的相關(guān)內(nèi)容,使用Hive內(nèi)置函數(shù)可以滿足常用的查詢需求,而自定義函數(shù)可以更加靈活地滿足特定的業(yè)務(wù)需求。

二、環(huán)境準(zhǔn)備

如果已經(jīng)有了環(huán)境了,可以忽略,如果想快速部署環(huán)境可以參考我這篇文章:通過 docker-compose 快速部署 Hive 詳細(xì)教程

# 登錄容器
docker exec -it hive-hiveserver2 bash
# 連接hive
beeline -u jdbc:hive2://hive-hiveserver2:10000  -n hadoop

三、Hive 內(nèi)置函數(shù)

先創(chuàng)建一張表來測試

# 登錄容器
docker exec -it hive-hiveserver2 bash
# 登錄hive客戶端
beeline -u jdbc:hive2://hive-hiveserver2:10000  -n hadoop

# 建表
CREATE EXTERNAL TABLE external_table1 (
    column1 STRING,
    column2 INT,
    column3 DOUBLE
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
STORED AS TEXTFILE
LOCATION '/user/hive/external_table/data';

添加數(shù)據(jù)

# 登錄容器
docker exec -it hive-hiveserver2 bash

# 模擬一些數(shù)據(jù)
cat >data<<EOF
c1,12,56.33
c2,14,58.99
c3,15,66.34
c4,16,76.78
EOF

# 登錄hive客戶端
beeline -u jdbc:hive2://hive-hiveserver2:10000  -n hadoop
# 加載數(shù)據(jù),local 是加載本機(jī)文件數(shù)據(jù)
load data local inpath './data' into table external_table1;

1)條件判斷函數(shù)

1、If函數(shù): if

語法:

if(boolean testCondition, T valueTrue, T valueFalseOrNull)
# 返回值: T
# 說明: 當(dāng)條件testCondition為TRUE時(shí),返回valueTrue;否則返回valueFalseOrNull

示例:

# 注意,這里查詢的記錄必須存在,要不然也返回空
hive> select if(1=2,100,200) from external_table1;
200
hive> select if(1=1,100,200) from external_table1;
100

3、條件判斷函數(shù):CASE

語法:

CASE a WHEN b THEN c [WHEN d THEN e]* [ELSE f] END
#返回值: T
#說明:如果a等于b,那么返回c;如果a等于d,那么返回e;否則返回f

示例:

hive> Select case 100 when 50 then 'tom' when 100 then 'mary' else 'tim' end from external_table1;
mary
hive> Select case 200 when 50 then 'tom' when 100 then 'mary' else 'tim' end from external_table1;
tim

4、非空查找函數(shù): COALESCE

語法:

COALESCE(T v1, T v2, …)
#返回值: T
#說明: 返回參數(shù)中的第一個(gè)非空值;如果所有值都為NULL,那么返回NULL

示例:

hive> select COALESCE(null,'100','50') from external_table1;
100

2)字符串函數(shù)

1、字符串長度函數(shù):length

語法:

length(string A)
#返回值: int
#說明:返回字符串A的長度

示例:

hive> select length('abcedfg') from external_table1;
7

2、字符串截取函數(shù):substr,substring

語法:

substr(string A, int start, int len)
substring(string A, int start, int len)
# int len,可省略,就是到最后一個(gè)字符
#返回值: string
#說明:返回字符串A從start位置開始,長度為len的字符串

示例:

hive> select substr('abcde',3) from external_table1;
cde
hive> select substring('abcde',3) from external_table1;
cde
hive>  select substr('abcde',-1) from external_table1;
e

hive> select substr('abcde',3,2) from external_table1;
cd
hive> select substring('abcde',3,2) from external_table1;
cd
hive>select substring('abcde',-2,2) from external_table1;
de

3、字符串連接函數(shù):concat

語法:

concat(string A, string B…)
#返回值: string
#說明:返回輸入字符串連接后的結(jié)果,支持任意個(gè)輸入字符串

示例:

hive> select concat('abc','def','gh') from external_table1;
abcdefgh

4、去空格函數(shù):trim

語法:

trim(string A)
#返回值: string
#說明:去除字符串兩邊的空格

示例:

hive> select trim(' abc ') from external_table1;
abc

5、字符串轉(zhuǎn)小寫函數(shù):lower,lcase

語法:

lower(string A),lcase(string A)
#返回值: string
#說明:返回字符串A的小寫格式

示例:

# 兩個(gè)函數(shù)的作用是相同的,其區(qū)別僅僅是函數(shù)名不同。
hive> select lower('abSEd') from external_table1;
absed
hive> select lcase('abSEd') from external_table1;
absed

6、字符串轉(zhuǎn)大寫函數(shù):upper,ucase

語法:

upper(string A), ucase(string A)
#返回值: string
#說明:返回字符串A的大寫格式

示例:

hive> select upper('abSEd') from external_table1;
ABSED
hive> select ucase('abSEd') from external_table1;
ABSED

3)集合函數(shù)

1、總和統(tǒng)計(jì)函數(shù): sum

語法:

sum(col), sum(DISTINCT col)
#返回值: double
#說明: sum(col)統(tǒng)計(jì)結(jié)果集中col的相加的結(jié)果;sum(DISTINCT col)統(tǒng)計(jì)結(jié)果中col不同值相加的結(jié)果

示例:

hive> select sum(column2) from external_table1;
hive> select sum(distinct column2) from external_table1;

2、最大值統(tǒng)計(jì)函數(shù): max

語法:

max(col)
#返回值: double
#說明: 統(tǒng)計(jì)結(jié)果集中col字段的最大值

示例:

hive> select max(column2) from external_table1;

3、最小值統(tǒng)計(jì)函數(shù): min

語法:

min(col)
#返回值: double
#說明: 統(tǒng)計(jì)結(jié)果集中col字段的最小值

示例:

hive> select min(column2) from external_table1;

4、平均值統(tǒng)計(jì)函數(shù): avg

語法:

avg(col), avg(DISTINCT col)
#返回值: double
#說明: avg(col)統(tǒng)計(jì)結(jié)果集中col的平均值;avg(DISTINCT col)統(tǒng)計(jì)結(jié)果中col不同值相加的平均值

示例:

hive> select avg(column2) from external_table1;
hive> select avg (distinct column2) from external_table1;

5、個(gè)數(shù)統(tǒng)計(jì)函數(shù): count

語法:

count(*), count(expr), count(DISTINCT expr[, expr_.])
#返回值: int
#說明: count(*)統(tǒng)計(jì)檢索出的行的個(gè)數(shù),包括NULL值的行;count(expr)返回指定字段的非空值的個(gè)數(shù);count(DISTINCT expr[, expr_.])返回指定字段的不同的非空值的個(gè)數(shù)

示例:

hive> select count(*) from external_table1;
hive> select count(distinct column2) from external_table1;

4)數(shù)學(xué)函數(shù)

1、取整函數(shù): round

語法:

round(double a)
#返回值: BIGINT
#說明: 返回double類型的整數(shù)值部分 (遵循四舍五入)

#也可以指定精度
round(double a, int d)

示例:

hive> select round(3.1415926) from external_table1;
3
hive> select round(3.5) from external_table1;
4
hive> create table external_table2 as select round(9542.158) from external_table1;
hive> describe external_table2;
_c0     decimal(5,0)

# 指定精度
hive> select round(3.1415926,4) from external_table1;
3.1416

2、向下取整函數(shù): floor

語法:

floor(double a)
#返回值: BIGINT
#說明: 返回等于或者小于該double變量的最大的整數(shù)

示例:

hive> select floor(3.1415926) from external_table1;
3
hive> select floor(25) from external_table1;
25

3、向上取整函數(shù): ceil

語法:

ceil(double a)
#返回值: BIGINT
#說明: 返回等于或者大于該double變量的最小的整數(shù)

示例:

hive> select ceil(3.1415926) from external_table1;
4
hive> select ceil(46) from external_table1;
46

4、取隨機(jī)數(shù)函數(shù): rand

語法:

rand(),rand(int seed)
#返回值: double
#說明: 返回一個(gè)0到1范圍內(nèi)的隨機(jī)數(shù)。如果指定種子seed,則會(huì)等到一個(gè)穩(wěn)定的隨機(jī)數(shù)序列

示例:

hive> select rand() from external_table1;
0.5577432776034763
hive> select rand() from external_table1;
0.6638336467363424
hive> select rand(100) from external_table1;
0.7220096548596434
hive> select rand(100) from external_table1;
0.7220096548596434

5、絕對(duì)值函數(shù): abs

語法:

abs(double a) abs(int a)
#返回值: double int
#說明: 返回?cái)?shù)值a的絕對(duì)值

示例:

hive> select abs(-3.9) from external_table1;
3.9
hive> select abs(10.9) from external_table1;
10.9

6、自然指數(shù)函數(shù): exp

語法:

exp(double a)
#返回值: double
#說明: 返回自然對(duì)數(shù)e的a次方

示例:

hive> select exp(2) from external_table1;
7.38905609893065

7、對(duì)數(shù)函數(shù): log

語法:

log(double base, double a)
#返回值: double
#說明: 返回以base為底的a的對(duì)數(shù)

示例:

hive> select log(4,256) from external_table1;
4.0

5)日期函數(shù)

1、日期轉(zhuǎn)年函數(shù): year

語法:

year(string date)
#返回值: int
#說明: 返回日期中的年。

示例:

hive> select year('2023-05-04 22:03:01') from external_table1;
2023
hive> select year('2024-05-04') from external_table1;
2024

2、日期轉(zhuǎn)月函數(shù): month

語法:

month (string date)
#返回值: int
#說明: 返回日期中的月份。

示例:

hive> select month('2011-12-08 10:03:01') from external_table1;
12
hive> select month('2011-08-08') from external_table1;
8

3、日期轉(zhuǎn)天函數(shù): day

語法:

day (string date)
#返回值: int
#說明: 返回日期中的天。

示例:

hive> select day('2011-12-08 10:03:01') from external_table1;
8
hive> select day('2011-12-24') from external_table1;
24

4、日期轉(zhuǎn)小時(shí)函數(shù): hour

語法:

hour (string date)
#返回值: int
#說明: 返回日期中的小時(shí)。

示例:

hive> select hour('2011-12-08 10:03:01') from external_table1;
10

5、日期轉(zhuǎn)分鐘函數(shù): minute

語法:

minute (string date)
#返回值: int
#說明: 返回日期中的分鐘。

示例:

hive> select minute('2011-12-08 10:03:01') from external_table1;
3

6、日期轉(zhuǎn)秒函數(shù): second

語法:

second (string date)
#返回值: int
#說明: 返回日期中的秒。

示例:

hive> select second('2011-12-08 10:03:01') from external_table1;
1

7、日期轉(zhuǎn)周函數(shù): weekofyear

語法:

weekofyear (string date)
#返回值: int
#說明: 返回日期在當(dāng)前的周數(shù)。

示例:

hive> select weekofyear('2011-12-08 10:03:01') from external_table1;
49

四、Hive UDF

在Hive中,UDF函數(shù)是指用戶定義的函數(shù),其目的是為了滿足某些特殊或個(gè)性化的需求,或者是為了優(yōu)化SQL查詢語句的性能。UDF函數(shù)可以分為三種類型:標(biāo)量函數(shù)、集合函數(shù)和行級(jí)函數(shù)。下面分別對(duì)三種類型的UDF函數(shù)進(jìn)行介紹:

1)標(biāo)量函數(shù)(UDF)

標(biāo)量函數(shù)(也稱為單行函數(shù))是指一次輸入一行數(shù)據(jù),一次輸出一行數(shù)據(jù)的函數(shù)。它們語法簡單,通常用于實(shí)現(xiàn)對(duì)某一列數(shù)據(jù)的單獨(dú)轉(zhuǎn)換或處理。標(biāo)量函數(shù)可以接受多個(gè)參數(shù),但只能返回一個(gè)結(jié)果。

示例:下面是一個(gè)用于計(jì)算兩數(shù)之和的簡單標(biāo)量函數(shù)示例:

import org.apache.hadoop.hive.ql.exec.UDF;
import org.apache.hadoop.io.Text;

public class ToUpper extends UDF {
  public Text evaluate(Text input) {
    if (input == null) {
      return null;
    }
    return new Text(input.toString().toUpperCase());
  }
}

2)集合函數(shù)(UDAF)

集合函數(shù)(也稱為聚合函數(shù))是指將多行數(shù)據(jù)一起處理并返回單個(gè)結(jié)果的函數(shù),例如平均值、最大值、最小值等。UDAF函數(shù)可以接收任意數(shù)量的參數(shù),并為每個(gè)輸入行返回一個(gè)中間累加器(Mapper端計(jì)算),最后返回一個(gè)最終結(jié)果(Reducer端計(jì)算)。

示例:下面是一個(gè)用于計(jì)算平均數(shù)的簡單聚合函數(shù)示例:

import org.apache.hadoop.hive.ql.exec.UDAF;
import org.apache.hadoop.hive.ql.udf.generic.AbstractGenericUDAFResolver;
import org.apache.hadoop.hive.ql.udf.generic.GenericUDAFEvaluator;
import org.apache.hadoop.hive.ql.udf.generic.GenericUDAFEvaluator.AggregationBuffer;
import org.apache.hadoop.io.IntWritable;

public class UDAFAverage extends AbstractGenericUDAFResolver {
  public UDAFAverage() {}

  @Override
  public GenericUDAFEvaluator getEvaluator(TypeInfo[] parameters) throws SemanticException {
    return new UDAFAverageEvaluator();
  }

  public static class UDAFAverageEvaluator extends GenericUDAFEvaluator {
    public UDAFAverageEvaluator() {}

    // 定義中間累加器
    public static class UDAFAverageAgg implements AggregationBuffer {
      int sum;
      int count;
    }

    // 初始化中間累加器
    public AggregationBuffer getNewAggregationBuffer() throws HiveException {
      UDAFAverageAgg result = new UDAFAverageAgg();
      reset(result);
      return result;
    }

    // 重置中間累加器
    public void reset(AggregationBuffer agg) throws HiveException {
      ((UDAFAverageAgg) agg).count = 0;
      ((UDAFAverageAgg) agg).sum = 0;
    }

    // 處理單個(gè)輸入行數(shù)據(jù)
    public void iterate(AggregationBuffer agg, Object[] parameters) throws HiveException {
      if (parameters[0] != null) {
        ((UDAFAverageAgg) agg).sum += ((IntWritable) parameters[0]).get();
        ((UDAFAverageAgg) agg).count++;
      }
    }

    // 合并各個(gè)Mapper返回的中間累加器
    public void merge(AggregationBuffer agg, Object partial) throws HiveException {
      if (partial != null) {
        UDAFAverageAgg other = (UDAFAverageAgg) partial;
        ((UDAFAverageAgg) agg).sum += other.sum;
        ((UDAFAverageAgg) agg).count += other.count;
      }
    }

    // 計(jì)算最終的結(jié)果
    public Object terminate(AggregationBuffer agg) throws HiveException {
      if (((UDAFAverageAgg) agg).count == 0) {
        return null;
      } else {
        return new Double(((double) ((UDAFAverageAgg) agg).sum) / ((UDAFAverageAgg) agg).count);
      }
    }

    // 結(jié)束計(jì)算
    public Object terminatePartial(AggregationBuffer agg) throws HiveException {
      return new IntWritable(((UDAFAverageAgg) agg).sum);
    }
  }
}

3)行級(jí)別函數(shù)(UDTF)

行級(jí)函數(shù)(也稱為表生成函數(shù))是指將一行數(shù)據(jù)拆分成多行數(shù)據(jù)進(jìn)行處理的函數(shù)。它們可以接受多個(gè)輸入行,并將它們轉(zhuǎn)換為多個(gè)輸出行,常用于文本處理、數(shù)據(jù)拆分等場景。

示例:下面是一個(gè)簡單的行級(jí)函數(shù)示例,用于將輸入字符串按照分隔符切分并返回多行:

import org.apache.hadoop.hive.ql.exec.UDF;
import org.apache.hadoop.hive.ql.udf.generic.GenericUDTF;
import org.apache.hadoop.hive.serde2.objectinspector.ListObjectInspector;
import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspector;
import org.apache.hadoop.hive.serde2.objectinspector.primitive.PrimitiveObjectInspectorFactory;
import org.apache.hadoop.hive.serde2.objectinspector.primitive.StringObjectInspector;
import org.apache.hadoop.io.Text;
import java.util.ArrayList;

public class Split extends GenericUDTF {
  private transient ListObjectInspector listOI = null;
  private transient StringObjectInspector elementOI = null;

  public void initialize(ObjectInspector[] argOIs) throws UDFArgumentException {
    // 確保輸入是一個(gè)列表類型
    if (argOIs[0].getCategory() != ObjectInspector.Category.LIST) {
      throw new UDFArgumentException("split() takes an array as a parameter");
    }
    // 獲取列表元素類型
    listOI = (ListObjectInspector) argOIs[0];
    elementOI = (StringObjectInspector) listOI.getListElementObjectInspector();
    // 確保輸出為兩列
    ArrayList<String> fieldNames = new ArrayList<String>();
    ArrayList<ObjectInspector> fieldOIs = new ArrayList<ObjectInspector>();
    fieldNames.add("value");
    fieldOIs.add(PrimitiveObjectInspectorFactory.writableStringObjectInspector);
    fieldNames.add("pos");
    fieldOIs.add(PrimitiveObjectInspectorFactory.writableIntObjectInspector);
    initialize(fieldNames, fieldOIs);
  }

  public void process(Object[] record) throws HiveException {
    // 獲取輸入字符串
    Object list = record[0];
    int index = 0;
    // 切分字符串并向下傳遞
    for (int i = 0; i < listOI.getListLength(list); i++) {
      index++;
      String value = elementOI.getPrimitiveJavaObject(listOI.getListElement(list, i));
      forward(new Object[] { new Text(value), new IntWritable(index) });
    }
  }

  public void close() throws HiveException {
    // nothing to do
  }
}

以上是Hive UDF函數(shù)的介紹,三種類型各自適用于不同的場合,可以根據(jù)業(yè)務(wù)需求選擇相應(yīng)的UDF函數(shù)來實(shí)現(xiàn)。

責(zé)任編輯:武曉燕 來源: 大數(shù)據(jù)與云原生技術(shù)分享
相關(guān)推薦

2023-05-11 00:17:44

分區(qū)HiveReduce

2023-05-06 07:20:27

HiveDDL管理表

2021-03-31 07:39:18

pythonHIVEUDF函數(shù)

2023-05-03 22:09:02

Hive分區(qū)工具,

2023-05-09 07:46:32

2022-03-28 07:43:28

jsonHive數(shù)據(jù)庫

2020-11-03 10:16:24

Hive數(shù)據(jù)傾斜Hive SQL

2023-09-17 23:32:03

內(nèi)置函數(shù)編程Python

2023-10-09 22:30:58

Python函數(shù)

2021-06-09 07:32:18

C++內(nèi)置函數(shù)函數(shù)傳參

2021-06-05 21:29:53

數(shù)據(jù)庫MySQL函數(shù)

2009-02-24 16:17:41

日期時(shí)間函數(shù)

2020-12-31 05:37:05

HiveUDFSQL

2024-10-28 15:57:34

Python函數(shù)

2016-10-12 18:58:15

大數(shù)據(jù)PIGHive

2012-11-08 10:09:57

大數(shù)據(jù)HIVE

2010-04-16 16:53:46

Unix操作系統(tǒng)

2023-11-26 00:13:16

開源數(shù)據(jù)Logstash

2014-07-31 08:54:33

2009-12-21 18:46:50

WCF傳輸大數(shù)據(jù)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

在线播放免费av| 无码人妻精品一区二| 超碰一区二区三区| 欧美日韩国产区| 亚洲一卡二卡区| 丰满少妇一级片| 日韩专区中文字幕一区二区| 欧美精品性视频| 尤物视频最新网址| 精品一区二区三区亚洲| 一本久久a久久精品亚洲| 亚洲一区二区高清视频| 色呦呦免费观看| 日本欧美在线看| 97精品国产97久久久久久| 欧美激情久久久久久久| 麻豆视频一区| 91精品国产综合久久精品性色| 97视频久久久| av国产在线观看| 成人av网址在线| 91日韩在线播放| 无码人妻精品一区二| 伊人精品在线| 久久亚洲影音av资源网| 国产精品扒开腿做爽爽| 超碰成人免费| 日韩欧美二区三区| 亚洲精品久久久中文字幕| 多野结衣av一区| 亚洲黄色片在线观看| 婷婷精品国产一区二区三区日韩| 日韩一级片免费看| 国产乱码一区二区三区| 国产日韩欧美视频| 日韩一级片中文字幕| 一区二区毛片| 久久久久久综合网天天| 日韩在线一卡二卡| jiujiure精品视频播放| 亚洲视频在线观看网站| www.色天使| 日韩激情毛片| 亚洲国产精品系列| 欧美久久久久久久久久久| 国产精品视频一区二区三区综合| 欧美日韩大陆在线| 在线观看国产中文字幕| 91tv亚洲精品香蕉国产一区| 一本久道中文字幕精品亚洲嫩| 大陆极品少妇内射aaaaa| heyzo中文字幕在线| 亚洲一二三级电影| 久久精品无码中文字幕| 免费在线国产视频| 亚洲一二三四区不卡| 欧美一级片免费播放| 国产盗摄在线视频网站| 亚洲一卡二卡三卡四卡| 777精品久无码人妻蜜桃| 国产精品yjizz视频网| 午夜精品影院在线观看| 欧美日韩精品在线一区二区 | 最近免费中文字幕视频2019| 国产91丝袜美女在线播放| 精品国产精品国产偷麻豆| 国产一区二区三区欧美| 99在线视频免费| 99久久久久| 欧美噜噜久久久xxx| 中文字幕第28页| 99精品免费网| 国产精品久久久久久av福利| 中文字幕欧美在线观看| 国产精品系列在线播放| 成人欧美一区二区三区视频| 日本国产在线观看| 国产日韩欧美综合一区| 亚洲一区3d动漫同人无遮挡 | 国外成人性视频| 啦啦啦免费高清视频在线观看| 丝袜美腿高跟呻吟高潮一区| 国产欧美精品一区二区| 精品国产av一区二区三区| 成人av第一页| 日韩国产高清一区| 成人在线视频亚洲| 激情亚洲一区二区三区四区 | 日韩久久久久久久| 国产黄色小视频在线| 天天av天天翘天天综合网色鬼国产 | 91免费精品| 欧美黑人性视频| 好吊色在线视频| 国产乱码精品一区二区三区五月婷 | 成年人国产精品| 色狠狠久久av五月综合| 天堂av在线电影| 一本一本大道香蕉久在线精品| 三级一区二区三区| 亚洲三级精品| 久久国产精品电影| 波多野结衣高清在线| 国产精品一区二区不卡| 欧美成人一区二区在线| av免费在线免费| 色婷婷国产精品| 日本wwwwwww| 精品不卡一区| 午夜精品蜜臀一区二区三区免费| 国产精品久久久久久久久久久久久久久久久久 | 午夜久久久久久久久久| 久久你懂得1024| 五月天激情图片| 成人全视频在线观看在线播放高清| 欧美mv和日韩mv的网站| 成人性视频免费看| 亚洲一区久久| 99在线视频首页| 男人影院在线观看| 日本韩国欧美一区二区三区| 日韩成人av影院| 欧美电影《睫毛膏》| 日韩美女视频在线观看| 午夜福利一区二区三区| 一区二区三区日韩精品| 九九九九九九九九| 日韩极品一区| 国产成人精品在线观看| 日本精品专区| 天天做天天摸天天爽国产一区| 伊人av在线播放| 四虎国产精品免费观看 | 亚洲国产精选| 在线视频欧美日韩| 色av性av丰满av| 91在线观看视频| 99er在线视频| 亚洲1区在线观看| 欧美成年人在线观看| 在线视频 91| 国产精品福利在线播放| 另类小说第一页| 成人在线一区| 国产精品日韩欧美大师| а天堂8中文最新版在线官网| 欧美视频在线观看 亚洲欧| 国产在线不卡av| 夜夜嗨一区二区三区| 国产日韩精品推荐| 国产伦子伦对白在线播放观看| 亚洲国产成人av在线| 日韩精品一区二区av| thepron国产精品| 国产不卡一区二区视频| 噜噜噜天天躁狠狠躁夜夜精品| 91成人性视频| 九色在线观看视频| 欧美中文字幕亚洲一区二区va在线 | 久久gogo国模啪啪裸体| 精品自在线视频| 亚洲第一视频在线播放| 亚洲aaa精品| 狠狠人妻久久久久久综合蜜桃| 午夜在线精品偷拍| 欧美亚洲另类在线一区二区三区| 性欧美1819sex性高清| 国产一区二区成人| 国产有码在线观看| 亚洲最大成人综合| 中文字幕人妻一区二区三区| 亚洲欧美日韩专区| 日韩jizzz| 在线观看欧美| 97精品国产97久久久久久春色| 免费一级在线观看| 欧美裸体一区二区三区| 久久午夜无码鲁丝片午夜精品| 97国产一区二区| 我看黄色一级片| 综合久久十次| 久久99久久精品国产| 97精品国产综合久久久动漫日韩| 美女性感视频久久久| 日本免费不卡视频| 欧美丝袜自拍制服另类| 青草草在线视频| 91蝌蚪porny| 制服丝袜中文字幕第一页| 亚洲黑丝一区二区| 午夜精品一区二区在线观看| 麻豆国产精品| 日韩av毛片网| 亚洲七七久久综合桃花剧情介绍| 亚洲欧美国产精品va在线观看| 国产精品无码一区二区桃花视频 | 成人av网站在线播放| 亚洲日穴在线视频| 六月婷婷七月丁香| 国产乱色国产精品免费视频| 国产又大又硬又粗| 欧美一区二区三区另类| 日本在线高清视频一区| 欧美电影院免费观看| 国产成人精品日本亚洲专区61| 成人日韩欧美| 亚洲日本欧美日韩高观看| 国产chinasex对白videos麻豆| 色综合色狠狠天天综合色| 青青草免费av| 国产精品无人区| 亚洲调教欧美在线| 国产不卡高清在线观看视频| 国内自拍视频网| 亚洲影视综合| 被灌满精子的波多野结衣| 五月激情综合| 亚洲成色www久久网站| 美女呻吟一区| 99精彩视频| crdy在线观看欧美| 国产精品一区二区电影| 中文在线а√在线8| 午夜精品99久久免费| 色爱综合区网| www.日本久久久久com.| 成年人视频在线观看免费| 国产午夜精品麻豆| 网站黄在线观看| 精品国产乱子伦一区| 国产99久一区二区三区a片| 欧美日本一道本| 中文字幕制服诱惑| 91成人免费网站| 亚洲 日本 欧美 中文幕| 亚欧色一区w666天堂| 国产精品1000| 亚洲在线观看免费视频| 亚洲色婷婷一区二区三区| 中文字幕一区二区视频| 亚洲人与黑人屁股眼交| 亚洲欧美综合在线精品| 国产wwwwxxxx| 国产精品传媒在线| 成人欧美一区二区三区黑人一| 欧美国产一区二区在线观看| 美国美女黄色片| 中文字幕av不卡| 成人一级片免费看| 国产精品久久久久久久久免费桃花 | 国产日产欧美精品一区二区三区| 可以直接看的无码av| www国产成人| 丰腴饱满的极品熟妇| 久久久精品国产免大香伊| 成人免费看aa片| 久久精品一二三| 长河落日免费高清观看| 中文字幕欧美一| 成人免费视频网站入口::| 亚洲黄色av一区| 欧美日韩中文视频| 狠狠久久五月精品中文字幕| av片免费观看| 欧美高清精品3d| 精品国产乱码久久久久久蜜臀网站| 欧美xxxxx牲另类人与| 少妇人妻精品一区二区三区| 精品视频在线播放免| 成人精品一区二区三区免费| 精品国内产的精品视频在线观看| 18videosex性欧美麻豆| 午夜欧美大片免费观看| 日本综合久久| 91成人伦理在线电影| 羞羞色国产精品网站| 亚洲国产日韩美| 欧美亚洲不卡| 99视频在线免费| 国模无码大尺度一区二区三区| 亚洲国产精品狼友在线观看| 久久免费电影网| 成人高潮免费视频| 天天综合色天天| 亚洲一区二区人妻| 亚洲电影免费观看高清| 搞黄视频在线观看| 欧美大片欧美激情性色a∨久久| 三级在线看中文字幕完整版| 成人妇女淫片aaaa视频| 青青视频一区二区| 超碰免费在线公开| 中文日韩欧美| 91亚洲一区二区| www国产成人| 欧美激情精品久久| 欧洲一区在线观看| 丰满大乳国产精品| 色视频www在线播放国产成人| aa视频在线观看| 国产女精品视频网站免费| 风间由美一区二区av101| 性欧美大战久久久久久久免费观看| 伊人激情综合| 在线观看av免费观看| 久久久久久久久久久黄色| 久久精品www| 欧美人妖巨大在线| 你懂的在线观看| 久久久久久久久久亚洲| 国产精品一区二区三区av| 欧美日产一区二区三区在线观看| 欧美日韩一区二区三区四区在线观看| 日本成人黄色网| 91影院在线免费观看| 九九九在线视频| 欧美精品在线观看一区二区| 男同在线观看| 久久人人爽人人| 深夜激情久久| 男女h黄动漫啪啪无遮挡软件| 日韩综合在线视频| 极品粉嫩小仙女高潮喷水久久| 亚洲一区在线视频| jizz中国少妇| 日日骚久久av| 久久亚洲精品爱爱| 日韩高清三级| 日韩二区三区四区| 久久精品国产亚洲av久| 狠狠色狠狠色综合日日小说| 视频二区在线观看| 欧美激情第1页| 亚洲小说春色综合另类电影| 日本老太婆做爰视频| 精品在线免费视频| 美女三级黄色片| 欧美色倩网站大全免费| 成人欧美亚洲| 国产精品视频yy9099| 欧美日韩伦理| 日本久久久久久久久久久久| 国产视频911| 中文永久免费观看| 怡红院精品视频| 久久免费资源| 亚洲视频在线观看日本a| 麻豆精品国产91久久久久久| 国产大屁股喷水视频在线观看| 欧美男人的天堂一二区| 快射av在线播放一区| 91久久国产精品| 亚洲免费二区| 18禁一区二区三区| 性欧美疯狂xxxxbbbb| 四虎精品在永久在线观看 | 性无码专区无码| 日韩精品极品视频免费观看| 亚洲综合电影| 婷婷亚洲婷婷综合色香五月| 狠狠色综合播放一区二区| 欧美三级免费看| 精品88久久久久88久久久| 欧美裸体视频| 日韩在线三级| 狠狠色综合日日| 日韩成人一区二区三区| 亚洲男人天堂2024| 日韩一级特黄| 久久精品xxx| 久久伊人中文字幕| 在线免费观看日韩视频| 欧美国产精品va在线观看| 日本亚洲不卡| a在线观看免费视频| 一区二区三区在线播| 五月天婷婷在线播放| 国产精品欧美风情| 欧美人成在线| 好吊视频在线观看| 911国产精品| 96av在线| 亚洲一二区在线| 白白色 亚洲乱淫| 欧美 亚洲 另类 激情 另类| 久久成年人视频| 亚洲精品国模| 亚洲综合123| 欧美日韩国内自拍| 免费黄色在线| 精品一区二区日本| 狠狠色综合播放一区二区| 欧美三级午夜理伦| 久久手机精品视频| 综合亚洲色图| 日本黄色一级网站| 91福利小视频| av手机免费在线观看| 中文字幕色一区二区| 26uuu精品一区二区在线观看|