日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

5、HIVE DML操作、load数据、update、Delete、Merge、where语句、基于分区的查询、HAVING子句、LIMIT子句、Group By语法、Hive 的Join操作等

發布時間:2024/9/27 编程问答 36 豆豆

目錄:
4.2.1 Load文件數據到表中
4.2.2查詢的數據插入到表中
4.2.3將Hive查詢的結果存到本地Linux的文件系統目錄中
4.2.4通過SQL語句的方式插入數據
4.2.5 UPDATE
4.2.6 Delete
4.2.7 Merge
4.3.2WHERE子句
4.3.4基于分區的查詢
4.3.5 HAVING子句
4.3.6 LIMIT子句
4.3.7 Group By語法
4.3.7.1簡單案例
4.3.8 Select 語句和group by子句
4.3.8.1 Multi-Group-By Inserts
4.3.8.2 Map-side Aggregation for Group By
4.3.8.3 Group By約束條件
4.4 Order, Sort, Cluster, and Distribute By
4.4.1 Order By的語法
4.4.2 Sort By的語法
4.4.3 Order By和Sort By之間的異同
4.4.4 Cluster By和Distribute By的語法
4.5 Hive 的Join操作
4.5.1 Hive的join語法
4.5.2MapJoin的限制條件
4.6Union Syntax
4.6.1 FROM子句中的UNION
4.6.2 Unions in DDL and Insert Statements
4.7 SubQueries
4.7.1 在FROM子句中的Subqueries
4.7.2 Subqueries in the WHERE Clause
4.8 Import/Export
4.8.1 Export/Import語法
4.8.2 Replication語法
4.8.3 export,import

  • 簡單導出和導出
  • 在import時重命名表
  • 導出分區并導入
  • 導出表并且導入到分區表分區
  • 指定導入位置
  • 導入作為一個外部表
  • 4.2.1 Load文件數據到表中

    加載數據到表中

    LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename [PARTITION (partcol1=val1, partcol2=val2 ...)]

    案例:

    CREATE TABLE IF NOT EXISTS employee(eid int,name String,destination String) partitioned by(salary String) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n' STORED AS TEXTFILE;hive> desc employee; OK eid int name string destination string salary string # Partition Information # col_name data_type comment salary string Time taken: 0.607 seconds, Fetched: 9 row(s) hive>創建/root/test/sample.txt,內容如下: 1201 pal 45000 Technical manager 1202 Manisha 45000 Proof reader將上面的數據導入到employee表中: hive> LOAD DATA LOCAL INPATH '/root/test/sample.txt' INTO TABLE employee PARTITION(salary = '45000'); Loading data to table demo_db.employee partition (salary=45000) OK Time taken: 1.392 seconds hive>

    上面的具體含義是將數據添加到45000這個分區中。
    添加之后,在hdfs中的效果如下:

    再添加salary=40000的分區,并指定分區數據的位置:

    hive> ALTER TABLE employee ADD PARTITION (salary = '40000') location '/40000/part40000'; OK Time taken: 0.203 seconds hive> show partitions employee; OK salary=40000 salary=45000 Time taken: 0.206 seconds, Fetched: 2 row(s) hive>

    將以下數據添加到hdfs中:


    將數據添加到salary=40000的分區中:

    4.2.2查詢的數據插入到表中

    標準語法:

    INSERT OVERWRITE TABLE tablename1 [PARTITION (partcol1=val1, partcol2=val2 ...) [IF NOT EXISTS]] select_statement1 FROM from_statement; INSERT INTO TABLE tablename1 [PARTITION (partcol1=val1, partcol2=val2 ...)] select_statement1 FROM from_statement;

    4.2.3將Hive查詢的結果存到本地Linux的文件系統目錄中

    語法:

    Standard syntax: INSERT OVERWRITE [LOCAL] DIRECTORY directory1[ROW FORMAT row_format] [STORED AS file_format] (Note: Only available starting with Hive 0.11.0)SELECT ... FROM ...Hive extension (multiple inserts): FROM from_statement INSERT OVERWRITE [LOCAL] DIRECTORY directory1 select_statement1 [INSERT OVERWRITE [LOCAL] DIRECTORY directory2 select_statement2] ...row_format: DELIMITED [FIELDS TERMINATED BY char [ESCAPED BY char]] [COLLECTION ITEMS TERMINATED BY char][MAP KEYS TERMINATED BY char] [LINES TERMINATED BY char][NULL DEFINED AS char] (Note: Only available starting with Hive 0.13)案例: hive> INSERT OVERWRITE LOCAL DIRECTORY '/employee'> ROW FORMAT DELIMITED> FIELDS TERMINATED BY '\t'> LINES TERMINATED BY '\n'> STORED AS TEXTFILE > select * from employee;


    進入本地Linux查看效果:

    4.2.4通過SQL語句的方式插入數據

    語法:

    INSERT INTO TABLE tablename [PARTITION (partcol1[=val1], partcol2[=val2] ...)] VALUES values_row [, values_row ...]

    案例:

    CREATE TABLE students (name VARCHAR(64), age INT, gpa DECIMAL(3, 2))CLUSTERED BY (age) INTO 2 BUCKETS STORED AS ORC;INSERT INTO TABLE studentsVALUES ('fred flintstone', 35, 1.28), ('barney rubble', 32, 2.32);CREATE TABLE pageviews (userid VARCHAR(64), link STRING, came_from STRING)PARTITIONED BY (datestamp STRING) CLUSTERED BY (userid) INTO 256 BUCKETS STORED AS ORC;INSERT INTO TABLE pageviews PARTITION (datestamp = '2014-09-23')VALUES ('jsmith', 'mail.com', 'sports.com'), ('jdoe', 'mail.com', null);INSERT INTO TABLE pageviews PARTITION (datestamp)VALUES ('tjohnson', 'sports.com', 'finance.com', '2014-09-23'), ('tlee', 'finance.com', null, '2014-09-21');INSERT INTO TABLE pageviewsVALUES ('tjohnson', 'sports.com', 'finance.com', '2014-09-23'), ('tlee', 'finance.com', null, '2014-09-21');

    4.2.5 UPDATE

    若想讓Hive庫能夠支持UPDATE,需要讓它能夠支持 Hive Transactions (https://cwiki.apache.org/confluence/display/Hive/Hive+Transactions)

    語法是:

    UPDATE tablename SET column = value [, column = value ...] [WHERE expression]

    4.2.6 Delete

    若想讓Hive庫能夠支持DELETE,需要讓它能夠支持 Hive Transactions (https://cwiki.apache.org/confluence/display/Hive/Hive+Transactions)

    語法是:

    DELETE FROM tablename [WHERE expression]

    4.2.7 Merge

    語法:

    MERGE INTO <target table> AS T USING <source expression/table> AS S ON <boolean expression1> WHEN MATCHED [AND <boolean expression2>] THEN UPDATE SET <set clause list> WHEN MATCHED [AND <boolean expression3>] THEN DELETE WHEN NOT MATCHED [AND <boolean expression4>] THEN INSERT VALUES<value list>

    4.3 數據檢索—Queries

    4.3.1Select語法

    SELECT [ALL | DISTINCT] select_expr, select_expr, ...FROM table_reference[WHERE where_condition][GROUP BY col_list][ORDER BY col_list][CLUSTER BY col_list| [DISTRIBUTE BY col_list] [SORT BY col_list]][LIMIT [offset,] rows] 1Select語句可以作為union查詢和子查詢等的一部分。 2、table_reference可以是一個普通的表,視圖,一個join構造或者一個子查詢。 3、表名和列名是大小寫不敏感的。A:在Hive 0.12及其早期版本中,在表明和列名中只有字母和下劃線才被允許。B:在Hive 0.13及其后期版本中,列名中可以包含任何的Unicode字符。

    案例:
    從t1中獲取所有的列和行數

    SELECT * FROM t1

    獲取當前在使用的數據庫:

    SELECT current_database()

    4.3.2WHERE子句

    案例:

    SELECT * FROM sales WHERE amount > 10 AND region = "US"

    4.3.3ALL和DISTINCT子句

    ALL和DISTINCT選項指定是否返回重復的行。如果這兩個都沒有指定,默認是ALL(所有的數據都將會被返回),DISTINCT指定之后,將會移除所有重復行。從Hive 1.1.0之后,Hive開始支持SELECT DISTINCT *查詢。

    hive> SELECT col1, col2 FROM t11 31 31 42 5 hive> SELECT DISTINCT col1, col2 FROM t11 31 42 5 hive> SELECT DISTINCT col1 FROM t112

    所有的ALL和DISTINCT也可以在UNION子句中使用。

    4.3.4基于分區的查詢

    一般而言,一個SELECT查詢將掃描全表(而不是部分數據)。如果一個表是使用PARTITIONED BY創建的,在查詢的時候,可以只掃描分區對應的一部分數據。
    假設有一個page_views表,這個表是按照date進行分區的,可以通過下面的語句檢索出數據行在2008-03-01和2008-03-31之間的數據行。

    SELECT page_views.* FROM page_views WHERE page_views.date >= '2008-03-01' AND page_views.date <= '2008-03-31'

    如果表page_views和dim_users之間進行join操作,在ON子句里面可以指定一些分區。

    SELECT page_views.* FROM page_views JOIN dim_usersON (page_views.user_id = dim_users.id AND page_views.date >= '2008-03-01' AND page_views.date <= '2008-03-31')

    4.3.5 HAVING子句

    HAVING子句的這種語法在0.7.0之后開始支持,當然使用子句也可以實現類似的功能。

    SELECT col1 FROM t1 GROUP BY col1 HAVING SUM(col2) > 10

    也可以使用子句實現:

    SELECT col1 FROM (SELECT col1, SUM(col2) AS col2sum FROM t1 GROUP BY col1) t2 WHERE t2.col2sum > 10;

    4.3.6 LIMIT子句

    子句可以被用于約束SELECT子查詢的數據行數。
    LIMIT接收1或2個數值參數,這兩個參數必須都是正整數。第一個參數指定獲取的第一行數據的偏移量。第二個參數表示一次性最多返回的數據行數。如果只指定了一個參數,它代表返回最大多少條數據,第一條數據的偏移位置是0。
    下面的語句表示返回任意的5條數據。

    SELECT * FROM customers LIMIT 5;

    下面的查詢返回前5個數據

    SELECT * FROM customers ORDER BY create_date LIMIT 5;

    下面的查詢返回第3條到第7條的數據

    SELECT * FROM customers ORDER BY create_date LIMIT 2,5;

    4.3.7 Group By語法

    語法:

    Group By子句:GROUP BY groupByExpression (, groupByExpression)*groupByExpression: expressionGroup BY的完整語法: SELECT expression (, expression)* FROM src groupByClause?

    在groupByExpression中,列被指定位確切的名稱,不是根據位置數值。當配置一下參數的時候,可以通過指定位置的方式獲取數據。
    1、Hive 0.11.0到2.1.x,設置 hive.groupby.orderby.position.alias 為true (默認是false).
    2、對于Hive 2.2.0及其以后版本,設置 hive.groupby.position.alias 為true (默認是false).

    4.3.7.1簡單案例

    獲取表的數據行數

    SELECT COUNT(*) FROM table2;

    注意:對于不支持COUNT()的Hive版本,可以使用COUNT(1)代替COUNT()

    為了去重的方式獲取按照gender分組的用戶的數據行數,可以使用以下的命令:

    INSERT OVERWRITE TABLE pv_gender_sum SELECT pv_users.gender, count (DISTINCT pv_users.userid) FROM pv_users GROUP BY pv_users.gender;

    可以同時使用多個聚合函數。聚合函數中的列名要相同。

    INSERT OVERWRITE TABLE pv_gender_agg SELECT pv_users.gender, count(DISTINCT pv_users.userid), count(*), sum(DISTINCT pv_users.userid) FROM pv_users GROUP BY pv_users.gender;

    注意,上面的COUNT()在有些Hive版本中可能不支持,需要使用COUNT(1)代替COUNT()。
    下面的語法中,不支持一個語句中使用多個DISTINCT語句(這個語句中的列不相同),也就是說下面的SQL是錯的。

    INSERT OVERWRITE TABLE pv_gender_agg SELECT pv_users.gender, count(DISTINCT pv_users.userid), count(DISTINCT pv_users.ip) FROM pv_users GROUP BY pv_users.gender;

    4.3.8 Select 語句和group by子句

    當使用group by子句的時候,select語句中的列只能是group by子句中包含的列,當然,你也可以在select語句中含有多個聚合函數(例如:count)。
    讓我們舉一個簡單的例子:

    CREATE TABLE t1(a INTEGER, b INTGER);

    一個針對上面表的group查詢可以類似如下:

    SELECTa,sum(b) FROMt1 GROUP BYa;

    上面的查詢起作用是因為select子句中包含一個(group by key),并且有一個聚合函數(sum(b))
    然而下面的查詢就不起作用。

    SELECTa,b FROMt1 GROUP BYa;

    這是因為在這個查詢子句中有一個額外的列(b),但是這個b不在group by子句中。并且它也不是一個聚合函數。這是因為,表t1如下:

    a b ------ 100 1 100 2 100 3

    4.3.8.1 Multi-Group-By Inserts

    將查詢到的數據插入到pv_gender_sum表中

    INSERT OVERWRITE TABLE pv_gender_sumSELECT pv_users.gender, count(DISTINCT pv_users.userid)GROUP BY pv_users.gender

    將查詢到的數據寫入到目錄文件中

    INSERT OVERWRITE DIRECTORY '/user/facebook/tmp/pv_age_sum'SELECT pv_users.age, count(DISTINCT pv_users.userid)GROUP BY pv_users.age;

    4.3.8.2 Map-side Aggregation for Group By

    hive.map.aggr 控制我們怎樣進行聚合操作,它的默認值是false,如果將它設置成true,Hive將直接在map task中做第一級的聚合。

    通常情況下,這種操作提供了更好的效率,但是如果想運行成功,需要更多的內存。

    set hive.map.aggr=true; SELECT COUNT(*) FROM table2;

    要注意的是,有些hive版本不支持count(),需要使用count(1)代替count().

    4.3.8.3 Group By約束條件

    (1)、不能Group By非標量基元類型的列,如不能Group By text,image或bit類型的列。
    (2)、帶有Group by子句的時候,Select指定的每一列都應該出現在Group By子句中,除非對這一列使用了聚合函數。聚合函數如:AVG、COUNT、MAX/MIN、SUM
    (3)、不能Group By在表中不存在的列。
    (4)、進行分組前可以使用Where子句消除不滿足條件的行。
    (5)、使用Group By子句返回的組沒有特定的順序,可以使用Order By子句指定次序。

    4.4 Order, Sort, Cluster, and Distribute By

    4.4.1 Order By的語法

    在Hive QL中的ORDER BY語法有點類似SQL語言中的ORDER BY語法。

    SELECT expression (,’ expression)* FROM src ORDER BY colName (ASC | DESC) (NULLS FIRST | NULLS LAST);

    在”order by”子句中有一些限制,在嚴格模式下(即: hive.mapred.mode=strict)模式下,order by子句必須在”limit”子句的后面,如果你設置了hive.mapred.mode為nonstrict,原因是為了強制所有結果的總順序,必須有一個reduce去排序最終的結果。如果輸出結果太大,這單個reduce可能需要很長時間才能結束。

    注意的是默認的排序是升序ascending(ASC).

    在Hive 2.1.0及其以后版本中,支持了為”order by”子句中的每列指定空值排序。對于ASC排序默認的排序是NULLS FIRST,然而,對于DESC排序默認的空值排序是NULLS LAST.

    在Hive 3.0.0及更高版本中,沒有limit的order by子查詢和視圖將會被optimizer刪除。想要禁用它,得設置hive.remove.orderby.in.subquery 為false。

    4.4.2 Sort By的語法

    SORT BY的語法類似SQL語言中的ORDER BY語法

    SELECTExpression (,’ expression)* FROM src SORT BY colName (ASC | DESC);

    4.4.3 Order By和Sort By之間的異同

    Hive支持SORT BY操作,在每個reducer中將sort數據。”order by”和”sort by”之間的不同之處是前者支持輸出的結果中所有的都是有序的,而后者只能支持在一個reducer中是有序的。如果有多個reduce,”sort by”可能返回的最終結果是部分有序的。
    基本上,在每個reducer中的數據都將按照用戶指定的排序類型排序。例如下面的案例:

    SELECT key, value FROM src SORT BY key ASC, value DESC

    這個查詢有2個reducers,每個的輸出是:

    0 5 0 3 3 6 9 1 0 4 0 3 1 1 2 5

    4.4.4 Cluster By和Distribute By的語法

    Cluster By和Distribute By主要用在Transform/Map-Reduce腳本中。如果需要分區和排序最終查詢的結果,有時候是很有用的。
    Cluster By是Distribute By和Sort By的一個快捷的方式。

    Hive在Distribute By中使用列的方式將在眾多的reducers中數據行均勻分布。所有的擁有相同Distribute By獵德行都將被分配到相同的reducer中。然后,Distribute By不保證在distributed key上的clustering和sorting屬性。
    例如:下面的5行數據Distributing By x到2個reducer上:

    x1 x2 x4 x3 x1

    reducer 1 獲取到:

    x1 x2 x1

    Reducer 2 獲取到:

    x4 x3

    注意:具有相同鍵x1的行都被保證分配到相同的reducer中(本例中為reduce 1),他們不能保證clustered在相鄰位置。
    與此相反,如果我們使用Cluster By x,這兩個reducers后面將進一步對x上的行進行排序。
    Reducer 1獲取到:

    x1 x1 x2

    Reducer 2獲取到:

    x3 x4

    用戶可以指定Distribute By和Sort By,而不是指定Cluster By,因此分區列和sort的列可以不相同。通常情況下分區列是sort列的前綴,但這不是必需的。

    SELECT col1, col2 FROM t1 CLUSTER BY col1 SELECT col1, col2 FROM t1 DISTRIBUTE BY col1 SELECT col1, col2 FROM t1 DISTRIBUTE BY col1 SORT BY col1 ASC, col2 DESCFROM (FROM pv_usersMAP ( pv_users.userid, pv_users.date )USING 'map_script'AS c1, c2, c3DISTRIBUTE BY c2SORT BY c2, c1) map_output INSERT OVERWRITE TABLE pv_users_reducedREDUCE ( map_output.c1, map_output.c2, map_output.c3 )USING 'reduce_script'AS date, count;

    4.5 Hive 的Join操作

    4.5.1 Hive的join語法

    Hive支持以下的join tables的語法

    join_table:table_reference [INNER] JOIN table_factor [join_condition]| table_reference {LEFT|RIGHT|FULL} [OUTER] JOIN table_reference join_condition| table_reference LEFT SEMI JOIN table_reference join_condition| table_reference CROSS JOIN table_reference [join_condition] (as of Hive 0.10)table_reference:table_factor| join_tabletable_factor:tbl_name [alias]| table_subquery alias| ( table_references )join_condition:ON expression

    案例:
    ?允許復合join操作

    SELECT a.* FROM a JOIN b ON (a.id = b.id)SELECT a.* FROM a JOIN b ON (a.id = b.id AND a.department = b.department);SELECT a.* FROM a LEFT OUTER JOIN b ON (a.id <> b.id)

    上面的都是有效的join語句

    ?在一個query語句中可以join多于2個表

    SELECT a.val, b.val, c.val FROM a JOIN b ON (a.key = b.key1) JOIN c ON (c.key = b.key2)

    上面的語句也是一個有效的語句

    ?Hive 將多個表的join操作轉化到一個map/reduce作業,條件是每個表的join子句中使用相同的列。例如:

    SELECT a.val, b.val, c.val FROM a JOIN b ON (a.key = b.key1) JOIN c ON (c.key = b.key1)

    上面的語句被轉換到一個map/reduce作業中,因為只有b表的key1在join操作中參與了。

    另一方面,使用下面的語句時,將有多個map/reduce.

    SELECT a.val, b.val, c.val FROM a JOIN b ON (a.key = b.key1) JOIN c ON (c.key = b.key2)

    上面的操作被轉入到兩個map/reduce作業,因為b表中的key1列在第一個join條件下使用。b表的key2列在第二個join下執行。第一個map/reduce作業執行a和b的join操作,產生的結果和c表在第二個map/reduce中參與執行。

    ?在join中的每個every/reduce stage,序列中的最后一個表通過reduce進行流處理,而其他表則在其中進行緩存。因此,組織表的時候,使最大的表放在最后面,可以幫助減少reduce中緩存join key的特定值所需的內存。例如:
    SELECT a.val, b.val, c.val FROM a JOIN b ON (a.key = b.key1) JOIN c ON (c.key = b.key1)
    所有的這三張表join的時候在一個map/reduce作業中,a表和b表的特定值被緩存在reduce的內存中。然后,對于從c檢索到的每一行,join操作和緩存的行數據進行計算。

    類似地:

    SELECT a.val, b.val, c.val FROM a JOIN b ON (a.key = b.key1) JOIN c ON (c.key = b.key2)

    在計算join操作的時候有兩個map/reduce,第一個步驟是join a和b,緩沖a的值,同時將b的值流到reduce中,第二個map/reduce緩存第一個map/reduce的結果,同時c表的流到reduce中進行處理。

    ?在join的每個map/reduce階段,可以通過指示要流化的表(通過/*+ STREAMTABLE(a) */),例如:

    SELECT /*+ STREAMTABLE(a) */ a.val, b.val, c.val FROM a JOIN b ON (a.key = b.key1) JOIN c ON (c.key = b.key1)

    所有三個表的join操作都在一個map/reduce作業中,表b和表c的鍵的特定值的值被緩存在reduce器的內存中,然后,對于從a檢索到的每一行,join操作使用緩沖行進行計算。如果/*+ STREAMTABLE(表名) */ 遺漏了,在join操作的時候,Hive流化最右邊的表。

    ?LEFT,RIGHT和FULL OUTER join存在的目的是為了在沒有匹配到的ON子句中提供更多的控制,例如:

    SELECT a.val, b.val FROM a LEFT OUTER JOIN b ON (a.key=b.key);

    將為a表中的每一行返回一條記錄,這各輸出的行是b.key = a.key 的a.val,b.val,當沒有對應的b.key的值的時候這個輸出行將輸出a.val,NULL,b的行沒有對應a.key時,鍵值將會被刪除。“FROM a LEFT OUTER JOIN b”語法必須寫在一行上,以便理解它是如何工作的——在這個查詢中,a位于b的左側,因此保留了來自a的所有行。RIGHT OUTER JOIN將保留b中的所有行,而FULL OUTER JOIN將保留a中的所有行和b中的所有行,OUTER JOIN語義應該符合標準SQL規范。

    ?JOIN語句出現在WHERE子句的前面,如果你想限制一個join的輸出,在WHERE子句中需要添加條件,否則就在JOIN子句中。這個問題的一大困惑是分區表:

    SELECT a.val, b.val FROM a LEFT OUTER JOIN b ON (a.key=b.key) WHERE a.ds='2009-07-07' AND b.ds='2009-07-07'

    上面的sql語句在b上join a,產生一個a.val和b.val的列表。然而,在WHERE子句中,也可以也可以引用a和b表中在join輸出中的其它列,并且過濾它們。然而,當連接中的行找到a表中的key,而在b表沒有找到相應的鍵時,b的所有列都將為空,包括ds列。這也就是說,你將過濾出所有的行,這些行在join操作輸出中沒有有效b.key。因此在你的LEFT OUTER中要有更好的條件控制。換句話說,如果你在WHERE子句中引用b表中的任何列,在join中的LEFT OUTER部分是不相關的。相反,在使用OUTER JOINing時,使用下面的語法:

    SELECT a.val, b.val FROM a LEFT OUTER JOIN b ON (a.key=b.key AND b.ds='2009-07-07' AND a.ds='2009-07-07')

    這個join的過濾是預先過濾的,你不會有為這些擁有有效a.key的行有獲取后置過濾(post-filtering)的麻煩,同樣的邏輯適用于LEFT 或 RIGHT join操作。

    JOIN語句是不可以交換的,join是左關聯的,不管它們是LEFT還是RIGHT join語句。

    SELECT a.val1, a.val2, b.val, c.val FROM a JOIN b ON (a.key = b.key) LEFT OUTER JOIN c ON (a.key = c.key)

    第一個a在b上的join操作,在另外一個表(最終reduce到的表)中丟棄a或b中沒有對應鍵的所有內容(也就是說只有a.key = b.key的所有數據)。這個reduce過的表接著和c表進行join操作。如果在a和c中都存在一個鍵,但是b中不存在,則會得不到不直觀的結果:所有的行(包括a.val1,a.val2,和a.key)在”a JOIN b”的過程中刪除了,因為它不在b中。在這個結果中沒有a.key在里面,因此,當它和c執行LEFT OUTER JOIN,c.val不存在,因為沒有c.key匹配a.key(因為它已經被刪除了),類似的,如果這是一個RIGHT OUTER JOIN(而不是LEFT),我們將得到一個更奇怪的現象:NULL,NULL,NULL, c.val,因為當我們指定a.key = c.key進行join的時候,我們drop了所有的不匹配第一個JOIN的數據行。
    為了得到更直觀的效果,我們應該將SQL語句改成 FROM c LEFT OUTER JOIN a ON (c.key = a.key) LEFT OUTER JOIN b ON (c.key = b.key).

    ?LEFT SEMI JOIN(左半連接)是IN/EXISTS子查詢的一種更高效的實現。在Hive 0.13版本IN/NOT IN/EXISTS/NOT EXISTS操作開始支持了,通過子查詢的方式,這樣大多數子查詢就不需要手動執行了。使用左半連接的限制是,右手邊的表只能在JOIN條件(on–子句)中引用,而不能再WHERE或select子句中引用。

    SELECT a.key, a.value FROM a WHERE a.key in(SELECT b.keyFROM B); 可以被寫成: SELECT a.key, a.val FROM a LEFT SEMI JOIN b ON (a.key = b.key)

    特點:
    1、left semi join 的限制是, JOIN 子句中右邊的表只能在 ON 子句中設置過濾條件,在 WHERE 子句、SELECT 子句或其他地方過濾都不行。
    2、left semi join 是只傳遞表的 join key 給 map 階段,因此left semi join 中最后 select 的結果只許出現左表。
    3、因為 left semi join 是 in(keySet) 的關系,遇到右表重復記錄,左表會跳過,而join 則會一直遍歷。這就導致右表有重復值得情況下 left semi join 只產生一條,join 會產生多條,也會導致 left semi join 的性能更高。
    比如以下A表和B表進行join或left semi join,然后select出所有字段,結果區別如下:

    ?MAPJOIN操作
    MapJoin是Hive的一種優化操作,其適用于小表JOIN大表的場景,由于表的JOIN操作是在Map端且在內存進行的,所以其并不需要啟動Reduce任務也就不需要經過shuffle階段,從而能在一定程度上節省資源提高JOIN效率。

    官方說明:
    1、如果join操作的所有表中,有一個表很小,這個作為一個map任務來執行,查詢語句如下:

    SELECT /*+ MAPJOIN(b) */ a.key, a.value FROM a JOIN b ON a.key = b.key

    上面的語句不需要任何一個reducer.對于A的每一個mapper,B都被完全讀取。這里面的限制是a FULL/RIGHT OUTER JOIN b不可以被執行。

    2、如果join的表被分桶過了,并且分桶的列是join的列,一個表中的桶數是另一個表中的桶數的倍數,這些桶之間可以互相連接。如果表A有4個桶,表B有4個桶,使用下面的join操作:

    SELECT /*+ MAPJOIN(b) */ a.key, a.value FROM a JOIN b ON a.key = b.key

    上面的語句可以只在mapper中執行,取代了為A的每個mapper獲取所有的B的,只有需要的桶數據才被獲取到。對于以上的查詢,為A處理bucket 1的映射程序將只獲取bucket 1 (B)。這不是默認的行為,需要配置一下參數:

    set hive.optimize.bucketmapjoin = true

    4、如果join中的表中的join的列被sorted和分桶了。并且他們有相同的桶數,sort-merge可以被執行,對應的桶在mapper是彼此join,如果A和B表都有4個桶,執行以下HiveQL:

    SELECT /*+ MAPJOIN(b) */ a.key, a.value FROM A a JOIN B b ON a.key = b.key

    可以在一個mapper中執行,用于A的桶的映射器將遍歷對應于B的桶。這個不是默認的行為,下面的參數需要設置:

    set hive.input.format=org.apache.hadoop.hive.ql.io.BucketizedHiveInputFormat; set hive.optimize.bucketmapjoin = true; set hive.optimize.bucketmapjoin.sortedmerge = true;

    4.5.2MapJoin的限制條件

    ?如果被join的所有表中有一個表很小,join操作執行的時候可以只使用一個map。查詢語句是:

    SELECT /*+ MAPJOIN(b) */ a.key, a.value FROM a JOIN b ON a.key = b.key

    上面的查詢語句不需要reducer。

    ?下面的情況不支持
    Union后面跟著MapJoin
    MapJoin后面跟著Lateral View
    MapJoin后面跟著Reduce Sink(Group By/Join/Sort By/Cluster By/Distribute By)
    MapJoin后面跟著Union
    MapJoin后面跟著Join
    MapJoin后面跟著MapJoin

    ?配置變量hive.auto.convert.join(如果設置為true)在運行時自動將連接轉換為mapjoin(如果可能的話),并且應該使用它而不是/+ mapjoin(表名)/。/+ mapjoin(表名)/應該只用于以下查詢。
    1.如果所有輸入都進行了分桶(bucketed)或排序(sorted),則join應轉換為a bucketized map-side join or bucketized sort-merge join。

    ?考慮不同鍵上多個mapjoin的可能性:

    select /*+MAPJOIN(smallTableTwo)*/ idOne, idTwo, value FROM( select /*+MAPJOIN(smallTableOne)*/ idOne, idTwo, value FROMbigTable JOIN smallTableOne on (bigTable.idOne = smallTableOne.idOne) ) firstjoin JOIN smallTableTwo ON (firstjoin.idTwo = smallTableTwo.idTwo)

    不支持上述查詢。如果沒有/+MAPJOIN(表名)/,上面的查詢將作為兩個只包含map-only 作業執行。如果用戶知道這個輸入足夠小,并且可以裝入內存,則可以使用以下可配置參數確保查詢在單個map-reduce作業中執行。
    ?hive.auto.convert.join.noconditionaltask - Whether Hive enable the optimization about converting common join into mapjoin based on the input file size. If this paramater is on, and the sum of size for n-1 of the tables/partitions for a n-way join is smaller than the specified size, the join is directly converted to a mapjoin (there is no conditional task).
    ?hive.auto.convert.join.noconditionaltask.size - If hive.auto.convert.join.noconditionaltask is off, this parameter does not take affect. However, if it is on, and the sum of size for n-1 of the tables/partitions for a n-way join is smaller than this size, the join is directly converted to a mapjoin(there is no conditional task). The default is 10MB.

    4.6Union Syntax

    語法是:

    select_statement UNION [ALL | DISTINCT] select_statement UNION [ALL | DISTINCT] select_statement ...

    UNION用于聯合多個select語句的結果到一個結果集里面。

    你可以在一個查詢語句中混合上UNION ALL和UNION DISTINCT

    您可以在同一個查詢中混合UNION ALL和UNION DISTINCT。混合UNION類型的處理方式是,一個不同的UNION覆蓋其左側的任何所有UNION。可以通過使用union DISTINCT顯式地生成一個不同的union,也可以使用union DISTINCT隱式地生成一個不同的union,而不使用后面帶有DISTINCT或ALL關鍵字的union。

    每個select_statement返回的列的數目和名稱必須相同。否則,將拋出schema錯誤。

    4.6.1 FROM子句中的UNION

    如果有一些要對UNION的結果額外的處理需求,UNION的整個語句可以嵌入在FROM子句中。如下:

    SELECT * FROM (select_statementUNION ALLselect_statement ) unionResult

    案例:

    SELECT u.id, actions.date FROM (SELECT av.uid AS uidFROM action_video avWHERE av.date = '2008-06-03'UNION ALLSELECT ac.uid AS uidFROM action_comment acWHERE ac.date = '2008-06-03') actions JOIN users u ON (u.id = actions.uid)

    4.6.2 Unions in DDL and Insert Statements

    案例:

    SELECT key FROM (SELECT key FROM src ORDER BY key LIMIT 10)subq1 UNION SELECT key FROM (SELECT key FROM src1 ORDER BY key LIMIT 10)subq2

    案例:

    SELECT key FROM src UNION SELECT key FROM src1 ORDER BY key LIMIT 10

    將UNION的結果插入到表中

    INSERT OVERWRITE TABLE target_tableSELECT name, id, category FROM source_table_1UNION ALLSELECT name, id, "Category159" FROM source_table_2

    4.7 SubQueries

    4.7.1 在FROM子句中的Subqueries

    語法:

    SELECT ... FROM (subquery) name ... SELECT ... FROM (subquery) AS name ... (Note: Only valid starting with Hive 0.13.0)

    例如:

    SELECT col FROM (SELECT a+b AS colFROM t1 ) t2

    帶有UNION ALL的子查詢

    SELECT t3.col FROM (SELECT a+b AS colFROM t1UNION ALLSELECT c+d AS colFROM t2 ) t3

    4.7.2 Subqueries in the WHERE Clause

    包含IN和NOT IN的情況:

    SELECT * FROM A WHERE A.a IN (SELECT foo FROM B);

    包含EXISTS和NOT EXISTS

    SELECT A FROM T1 WHERE EXISTS (SELECT B FROM T2 WHERE T1.X = T2.Y)

    4.8 Import/Export

    使用EXPORT命令可以導出一個表或一個分區的數據,并將數據導出到指定的位置。這個輸出路徑可以移動到不同的Hadoop或hive實例中。通過IMPORT命令可以將數據導入到hive中。

    導出分區數據的時候,由于原始數據可能位于不同的HDFS位置,因此也是支持導出到分區子集的功能。

    導出的元數據存儲在目標目錄中,數據文件存儲在子目錄中。

    IMPORT命令在table或partition不存在的時候,它將創建它們。

    4.8.1 Export/Import語法

    導出語法:

    EXPORT TABLE tablename [PARTITION (part_column="value"[, ...])]TO 'export_target_path' [ FOR replication('eventid') ]

    導入語法:

    IMPORT [[EXTERNAL] TABLE new_or_original_tablename [PARTITION (part_column="value"[, ...])]]FROM 'source_path'[LOCATION 'import_target_path']

    4.8.2 Replication語法

    Export/import命令當在復制環境中使用時略有不同,并且確定使用該工具在兩個數據倉庫之間使用復制。在大多數情況下,用戶不需要使用這個附加功能,除非手動引導倉庫之間的復制,這樣它可以作為一個增量復制工具。

    他們使用一個特殊的表屬性“repl.last.id”在一個表或分區對象中,確保export/import工具每次復制的數據時最近更新的數據。在導出完成后,會對export的dump文件使用一個id打一個復制標簽,表示在源倉庫集成商單調遞增的。此外,為復制導出打印的標記不會導致錯誤如果試圖導出一個對象但是標記列當前不存在。

    在import方面,沒有語法變化,但是import有一個一般性的標簽對于復制的dump文件,他講檢查要復制的對象是否存在,如果對象已經存在,它檢查對象的repl.last.id屬性,確定是否導入當前對象的最新數據對于目標倉庫,如果更新是最新的,那么它將復制最新的信息,如果更新已經是很舊的了對于已經存在的對象,那么更新將被忽略,并且不會產生錯誤。

    對于那些使用export進行首次手動引導用例,用戶推薦使用“引導”標簽,

    4.8.3示例

    1.簡單導出和導出

    export table department to 'hdfs_exports_location/department';import from 'hdfs_exports_location/department';

    具體導出案例:


    頁面中查看:

    具體導入案例:

    2.在import時重命名表

    export table department to 'hdfs_exports_location/department';import table imported_dept from 'hdfs_exports_location/department';

    3.導出分區并導入

    export table employee partition (emp_country="in", emp_state="ka") to 'hdfs_exports_location/employee';import from 'hdfs_exports_location/employee';
  • 導出表并且導入到分區表分區
  • export table employee to 'hdfs_exports_location/employee';import table employee partition (emp_country="us", emp_state="tn") from 'hdfs_exports_location/employee';

    5.指定導入位置

    export table department to 'hdfs_exports_location/department';import table department from 'hdfs_exports_location/department'location 'import_target_location/department';
  • 導入作為一個外部表
  • export table department to 'hdfs_exports_location/department';import external table department from 'hdfs_exports_location/department';

    打個賞唄,您的支持是我堅持寫好博文的動力。

    總結

    以上是生活随笔為你收集整理的5、HIVE DML操作、load数据、update、Delete、Merge、where语句、基于分区的查询、HAVING子句、LIMIT子句、Group By语法、Hive 的Join操作等的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    色综合天天色综合 | 日韩精品一区二区三区丰满 | 久久久黄色免费网站 | av在线免费观看不卡 | 欧美一区二区在线免费看 | www.天天草| 免费一级片久久 | 欧美天堂久久 | 色综合天天综合 | 深夜免费福利网站 | 国产成人精品久 | 午夜av网站 | 日日干夜夜干 | 999国内精品永久免费视频 | 视频一区二区免费 | 国产一区二区三区四区大秀 | 又黄又爽又湿又无遮挡的在线视频 | 一本大道久久精品懂色aⅴ 五月婷社区 | 日韩三级在线 | 日韩精品你懂的 | 久久99精品久久久久久秒播蜜臀 | 91社区国产高清 | 亚洲国产精品免费 | 久久草av | 亚洲成人精品国产 | 人人爽人人干 | 国色天香在线 | 国产成人三级在线 | 伊人久久精品久久亚洲一区 | 国产区欧美 | 国产黄影院色大全免费 | 一区二区视频网站 | 玖玖视频国产 | 日韩性片 | 日韩一区二区在线免费观看 | 国产成人精品一区二区三区 | 色偷偷88888欧美精品久久 | 国产精品99视频 | 欧美精品久久久久久久久久丰满 | 黄色特级一级片 | 久久尤物电影视频在线观看 | 色在线免费视频 | 久久美女免费视频 | 中文字幕字幕中文 | 国产亚洲视频系列 | 在线观看中文字幕亚洲 | 国产欧美精品xxxx另类 | 亚洲精品日韩在线观看 | 日韩黄色免费 | 91视频免费看片 | 狠狠干 狠狠操 | 久久视频免费 | 91最新在线观看 | 九九激情视频 | 成人资源站 | 91精品国产三级a在线观看 | 麻豆久久久久久久 | 国产精品999久久久 久产久精国产品 | 亚洲 中文 在线 精品 | 91免费视频黄| 免费看国产精品 | 正在播放国产精品 | 国产小视频你懂的在线 | 99亚洲国产 | 亚州国产精品 | 992tv在线观看 | 日韩一区二区三区免费视频 | 成人一区二区三区在线 | 97狠狠操 | 亚洲精品国产精品乱码在线观看 | 免费精品在线观看 | 婷色在线 | 97精品国产97久久久久久久久久久久 | 中文欧美字幕免费 | 天天人人 | 国产精品亚州 | 国产在线一线 | 懂色av一区二区在线播放 | 亚洲夜夜网 | 天天综合视频在线观看 | 在线播放亚洲激情 | 国产片免费在线观看视频 | 天天干天天干天天色 | 超碰免费成人 | 久久激情影院 | 精品一区二区免费视频 | 成人午夜电影网 | 中文字幕人成不卡一区 | 天天综合久久综合 | 日韩在线视频一区二区三区 | 看污网站| 欧美va天堂在线电影 | 亚洲精品视频第一页 | 亚洲成人av在线 | 久久久91精品国产 | 日韩av资源在线观看 | 在线国产91 | av在线网站免费观看 | 97av超碰| avwww在线观看 | 在线导航福利 | 91在线观看视频网站 | 2022久久国产露脸精品国产 | 免费福利在线视频 | 操一草| 99久久久久久国产精品 | 天天天干天天天操 | 国产高清在线a视频大全 | 少妇高潮流白浆在线观看 | 7799av | 国产剧情亚洲 | 一区二区三区不卡在线 | 亚洲视频在线免费看 | 欧美精品久久久久 | 丁香激情五月婷婷 | 91黄视频在线 | 99视频在线| 日韩视频免费在线 | 99久久精品免费看 | 天天天天天天天天操 | 色综合天天天天做夜夜夜夜做 | 欧美在线视频日韩 | 婷香五月 | 国产精品二区三区 | 亚洲精品电影在线 | 伊人色综合久久天天网 | 99久久日韩精品视频免费在线观看 | 香蕉视频亚洲 | 久久久久久久久久久久久久电影 | 日本黄色黄网站 | 国产一级在线观看视频 | 国产在线精品区 | 狠狠狠狠狠狠狠狠 | 中文字幕有码在线播放 | 中文字幕人成乱码在线观看 | 91成人在线观看喷潮 | www黄色| 免费av福利 | 午夜性色 | 成 人 黄 色 视频免费播放 | 午夜久久久久久久久久影院 | 狠狠干夜夜 | 97超碰色偷偷 | 五月天久久激情 | 日韩精品一区二区不卡 | 国内精品视频免费 | 国产精品99久久久 | 园产精品久久久久久久7电影 | 999国产 | 日韩午夜在线播放 | 久久99久久久久久 | 黄色tv视频 | 日韩免费网址 | 欧美在线a视频 | 久久久精品综合 | 免费视频国产 | 久久在线精品 | 国产精品99爱 | 国产又粗又猛又黄又爽 | 亚洲精品视频在线观看网站 | 人人草在线观看 | 日韩网站中文字幕 | 国产一区二区在线播放视频 | 久久伦理 | 成人一区二区三区在线观看 | 日韩电影中文字幕在线 | 黄色软件视频网站 | 免费欧美| 国产福利精品一区二区 | 国产精品自拍在线 | 91精品国自产在线偷拍蜜桃 | 五月天久久综合 | 欧美美女视频在线观看 | 久久激五月天综合精品 | 成人一级片免费看 | 91九色视频在线观看 | 国产精品孕妇 | 中文字幕 二区 | 黄色成人免费电影 | 国产日韩欧美精品在线观看 | 久久国产精品电影 | av福利资源 | 91av在线不卡 | 97视频人人 | 亚洲无吗av| 色视频在线 | 国产精品久久久久久一二三四五 | 国产成人免费精品 | 日韩大片免费在线观看 | 亚洲欧美成aⅴ人在线观看 四虎在线观看 | 久久99热精品这里久久精品 | 国产福利一区二区三区视频 | 亚洲日本一区二区在线 | 亚洲91中文字幕无线码三区 | 久久在线看 | 亚州国产精品 | 天天色综合天天 | 97人人网 | 国产99久久久国产精品免费二区 | 日韩在线免费观看视频 | 精品国产中文字幕 | 亚洲综合欧美激情 | 亚洲国产高清在线 | 中文字幕av在线不卡 | 韩国av免费在线 | 五月婷婷丁香在线观看 | 天堂入口网站 | 免费黄色av电影 | 日韩欧美高清在线 | 欧美-第1页-屁屁影院 | 中文字幕亚洲在线观看 | 天天躁天天操 | 亚洲精选99 | 中文字幕免费观看视频 | 久久午夜精品视频 | 国产一区在线看 | 亚洲国产精品成人av | 久久综合精品一区 | 成年人黄色免费网站 | a黄色 | 五月激情久久 | 菠萝菠萝在线精品视频 | 国产剧情av在线播放 | 亚洲波多野结衣 | 日本久久久久久科技有限公司 | 亚洲精品乱码久久久久久按摩 | 免费黄色在线播放 | 久久国产精品视频免费看 | 五月天亚洲综合小说网 | 天天干天天操天天入 | 国产精品国产三级国产aⅴ9色 | 欧美性做爰猛烈叫床潮 | 手机看国产毛片 | 成人在线观看你懂的 | 一区 在线观看 | 亚洲第一中文字幕 | 久草久草久草久草 | 成年人免费在线观看 | 97精品国产91久久久久久久 | 久草在线中文888 | 中国一级片在线 | aaa毛片视频| 精品主播网红福利资源观看 | 亚洲精品456在线播放第一页 | 亚洲第一中文字幕 | 欧美日韩精品在线一区二区 | 日韩av在线一区二区 | 91av免费在线观看 | 69av免费视频| 玖玖玖精品 | 欧美最猛性xxxxx免费 | 夜夜躁天天躁很躁波 | 免费毛片aaaaaa | 午夜免费电影院 | 国产精品久久久久永久免费 | 国产小视频免费在线网址 | 久草热久草视频 | 黄色一级免费电影 | 日日干夜夜爱 | 1000部国产精品成人观看 | 人人爽人人搞 | 91亚洲狠狠婷婷综合久久久 | 天天草天天摸 | 蜜臀av性久久久久蜜臀aⅴ四虎 | 天天射网 | 日韩有码第一页 | 国产精品亚洲视频 | 在线电影91 | 午夜精品福利一区二区三区蜜桃 | 激情久久伊人 | 国产美女精彩久久 | 亚洲精品1234区 | 日日爽夜夜操 | 亚洲一区在线看 | 国产精品成人自产拍在线观看 | 天天插日日射 | 国内精品久久久久影院优 | 国产精品欧美久久久久久 | 日韩免费看片 | 久久久国际精品 | 99爱精品视频 | 亚洲一区视频在线播放 | 日本黄色免费大片 | 欧美激情第28页 | 日韩欧美在线免费 | 97电影在线看视频 | 久草免费电影 | 超碰成人av| 天天干,天天操,天天射 | 97在线观看免费 | 丁香婷婷激情五月 | 国产老太婆免费交性大片 | 国产精品丝袜在线 | 久久免费看 | 国产99久久精品一区二区永久免费 | 91看片麻豆| 久久精品国产亚洲aⅴ | 九九九九热精品免费视频点播观看 | 91九色视频在线播放 | 国产精品黑丝在线观看 | 久久激情小说 | 日本在线观看中文字幕 | 最近在线中文字幕 | www.com久久久| 久久国产精品视频观看 | 欧日韩在线| 尤物九九久久国产精品的分类 | 久久国产精品色婷婷 | 日韩欧美在线视频一区二区三区 | 亚洲激情中文 | www国产亚洲精品 | 婷婷久月 | 国产精品夜夜夜一区二区三区尤 | 99亚洲国产精品 | 日韩中午字幕 | 国产丝袜一区二区三区 | 久久你懂的 | 精品久久久久久久久中文字幕 | 国产一区二区三区午夜 | 天堂中文在线视频 | 美女中文字幕 | 一区二区三区在线观看免费视频 | 日韩网站在线播放 | 亚洲午夜久久久久久久久 | 久久99久久99精品中文字幕 | 欧美韩国日本在线观看 | 成人看片 | 丝袜网站在线观看 | 一本一道波多野毛片中文在线 | 国产丝袜在线 | 狠狠的操你 | av超碰在线观看 | 黄色免费在线看 | 亚洲精品视频一二三 | 国产精品中文字幕av | 极品美女被弄高潮视频网站 | 久久精品高清视频 | 亚洲春色综合另类校园电影 | 精品视频久久 | 97爱| 免费又黄又爽的视频 | 国产视频综合在线 | 国产精品电影在线 | 久久精国产 | 免费高清在线视频一区· | 国产在线精品一区二区不卡了 | 蜜桃视频在线观看一区 | 日本韩国精品一区二区在线观看 | 国产精品精品国产婷婷这里av | 色综合欧洲 | 免费av片在线 | 激情久久网 | 麻豆国产精品va在线观看不卡 | 99精品视频免费观看 | 久久久久久久电影 | 综合色婷婷 | 成人av在线直播 | 96亚洲精品久久久蜜桃 | 国产一区二区三区免费观看视频 | 91禁在线观看 | 91麻豆产精品久久久久久 | 亚洲日韩精品欧美一区二区 | 中文字幕国产精品一区二区 | 在线播放国产精品 | 中文字幕在线不卡国产视频 | 成人免费视频播放 | 免费看的黄色小视频 | 国产欧美最新羞羞视频在线观看 | 2023国产精品自产拍在线观看 | 黄色电影网站在线观看 | 91av电影| 日韩综合精品 | 五月婷激情 | 少妇视频在线播放 | 中文字幕亚洲在线观看 | 国产麻豆精品一区二区 | 免费观看一级视频 | 人人干人人干人人干 | 91九色在线视频观看 | 亚洲精品99久久久久中文字幕 | 一区二区中文字幕在线播放 | 一区二区激情 | 久99精品| 日韩精品在线免费观看 | 黄色免费视频在线观看 | 欧美午夜理伦三级在线观看 | 久久xx视频 | 午夜视频播放 | 久久久久久电影 | 国产五码一区 | 亚洲最大色 | 国产黄在线| 成人欧美日韩国产 | 亚洲国产中文字幕在线观看 | 人人玩人人添人人澡超碰 | 中文字幕在线观看一区 | 97成人在线免费视频 | 国产成人精品一区二区三区网站观看 | 日韩电影一区二区在线观看 | 久久精品一区二区三区四区 | 九九热精品视频在线观看 | 久久国产精品99国产 | www五月| 99精品久久只有精品 | 成人久久久久久久久久 | 国产精品免费在线观看视频 | 天天操天天透 | 亚洲涩涩一区 | 久久综合精品一区 | 中文av资源站| 在线视频成人 | 日韩免费av片 | 国产精品久久久av | 久久久久久免费毛片精品 | 国产一区自拍视频 | 亚洲综合色丁香婷婷六月图片 | 91九色网址| 久草电影在线观看 | 日韩av看片| 99视频在线精品国自产拍免费观看 | 又黄又爽又刺激视频 | 日韩久久激情 | 国产网站在线免费观看 | 久久久久综合视频 | 亚洲激情中文 | 免费在线色电影 | 欧美日韩一级视频 | 亚洲精品www久久久 www国产精品com | 91成人在线观看高潮 | 亚洲免费专区 | 三级午夜片| 久久精精品 | sm免费xx网站 | 成人免费在线视频观看 | 久久乐九色婷婷综合色狠狠182 | 五月激情五月激情 | 国产91电影在线观看 | 国产精品热视频 | 国产精品一区二区三区免费看 | 国产精品久久久久久久久蜜臀 | av免费成人 | 国产色女人| 国产精品18久久久久久久 | 97综合视频 | 日韩精品视频免费专区在线播放 | 久久国产露脸精品国产 | 久久在线播放 | 国产一级大片免费看 | 成人日韩av | 精品久久久久久久久久久院品网 | 黄色一级大片在线免费看国产一 | 日韩伦理片hd | 狠狠色丁香久久综合网 | 五月婷婷视频在线观看 | 久久精品精品电影网 | 黄网站污 | 9在线观看免费 | 国产成人精品免高潮在线观看 | 日韩亚洲在线 | 青青河边草免费直播 | 狠狠狠狠狠狠狠狠 | 日韩国产欧美在线视频 | 亚洲人人精品 | 精品亚洲免费 | 亚洲一级免费电影 | 国产激情小视频在线观看 | 国产在线精 | 99热精品久久| 欧美国产精品一区二区 | 97视频在线 | 亚洲无吗视频在线 | 特级西西444www大胆高清无视频 | 久影院| 天天干,夜夜操 | 国产精品久久嫩一区二区免费 | 91丨porny丨九色 | 99精品视频在线 | 国产成人精品国内自产拍免费看 | 色999五月色 | 999成人免费视频 | 欧美日韩午夜爽爽 | 又黄又爽又色无遮挡免费 | 在线观看免费视频 | 一级免费观看 | 久久综合久久综合九色 | 精品国产乱码一区二区三区在线 | 日本久久久久 | 免费三级大片 | 久久综合色播五月 | 色姑娘综合天天 | 欧美一区二区在线看 | 国产精彩视频一区二区 | 久久 亚洲视频 | 日韩在线观看的 | 成人国产精品久久久春色 | 国产 日韩 在线 亚洲 字幕 中文 | 日韩有码在线播放 | 日韩电影中文字幕在线观看 | 黄色视屏免费在线观看 | 中文字幕精品一区二区精品 | 蜜臀av一区| 国产一级二级三级在线观看 | 日韩超碰在线 | 激情五月综合 | 国产精品99在线播放 | 久久精品香蕉 | 久草在线精品观看 | 丁香网婷婷 | 欧美日韩视频在线播放 | 69av在线视频 | 欧美日韩高清在线 | av在线不卡观看 | 丁香五月缴情综合网 | 国产午夜麻豆影院在线观看 | 东方av在 | 一区二区三区在线观看中文字幕 | 91色网址 | 日韩欧美网址 | 中文免费在线观看 | 99精品美女| 日韩精品专区 | 日韩三级不卡 | 欧美夫妻性生活电影 | 国产精品成人一区二区三区吃奶 | 欧美色一色 | 亚洲人成在 | 91tv国产成人福利 | 午夜av网站 | 丁香久久久 | 一区二区三区在线免费观看 | 成人av在线亚洲 | 久久综合成人 | 黄色国产在线 | 久操中文字幕在线观看 | 亚洲日本va中文字幕 | 国产尤物在线观看 | 在线观看一级视频 | 欧美永久视频 | 五月婷婷免费 | 最近最新中文字幕视频 | av综合站 | 国产亚洲va综合人人澡精品 | 久久99日韩| 久久亚洲精品国产亚洲老地址 | 中文在线免费观看 | 狠狠久久综合 | 日韩精品欧美一区 | 中午字幕在线观看 | 五月婷婷久久综合 | av福利电影 | 黄色高清视频在线观看 | 日韩视频图片 | 久久丝袜视频 | 久久视讯 | 91在线精品播放 | 婷婷久久网 | 六月婷婷久香在线视频 | www.久久色 | 久久精品视频99 | 91精品国产一区二区在线观看 | 97在线观看免费视频 | 免费成人看片 | 中文字幕中文 | av电影免费在线播放 | 人人要人人澡人人爽人人dvd | 国产高清视频 | 国产资源中文字幕 | 中文字幕精品在线 | 色婷婷国产精品一区在线观看 | 天天综合区 | 日本久久精 | 99久久精品一区二区成人 | 国产成人一区二区三区电影 | 精品一区二区6 | 日韩毛片在线免费观看 | 国产乱对白刺激视频在线观看女王 | 久久久久久久国产精品影院 | 婷婷色网| 探花视频在线观看免费 | 国产精品久久久久999 | 亚洲男女精品 | 999久久久久久| 久久伊人爱 | 色 中文字幕 | 久久婷婷精品视频 | 国产午夜精品一区二区三区嫩草 | 国产一区二区在线免费视频 | 亚洲国产精品久久久久久 | 日本黄色a级大片 | 亚洲精品456在线播放乱码 | 国产精品女人网站 | 久久久久免费观看 | 丁香六月在线 | 日韩有码中文字幕在线 | 婷婷综合国产 | 欧美a视频在线观看 | 日韩精品视频网站 | 一区二区三区免费网站 | 91尤物在线播放 | 91在线观看视频 | 欧美资源在线观看 | 国产高清成人av | 婷婷日日 | 91福利小视频 | 免费av片在线 | 久久久久久久久久亚洲精品 | 超碰激情在线 | 国产精品九九热 | 国产精品久久久久久一区二区 | 草莓视频在线观看免费观看 | 国产专区精品 | 国产麻豆成人传媒免费观看 | 日韩羞羞 | 伊人色综合久久天天网 | 五月婷视频 | 蜜桃av久久久亚洲精品 | 奇米影音四色 | 日韩电影中文 | 果冻av在线 | 在线观看日韩中文字幕 | 一区二区欧美激情 | 亚洲日本va中文字幕 | 国产高清免费视频 | 天天躁日日躁狠狠躁av麻豆 | 成人资源网 | 国产成人精品久久亚洲高清不卡 | 中文字幕av在线免费 | 四月婷婷在线观看 | 456成人精品影院 | 中文字幕国产一区二区 | 天天躁日日躁狠狠躁av中文 | 国产成人精品一区二区三区网站观看 | 久久精品8| 深爱激情久久 | 亚洲成av人影片在线观看 | 日日日操| 亚洲国产99 | 亚洲美女精品 | 日韩高清一 | 国产成人区 | 色视频网址 | 免费视频国产 | 97成人在线免费视频 | 蜜桃视频在线观看一区 | 成人a v视频 | 九九九九九国产 | 热久久视久久精品18亚洲精品 | 一区二区三区四区精品 | 91成年人网站 | 婷婷新五月| 91热在线 | 99在线观看视频网站 | 久久精品国产一区二区电影 | 久久精品视频网站 | 亚洲国产成人在线观看 | 91精品国产一区 | 精品资源在线 | 日韩欧美高清不卡 | 中文字幕国产一区 | 亚洲成年人免费网站 | 婷婷亚洲综合五月天小说 | 99免费在线观看 | 婷婷五综合| 99久久精品国产一区二区三区 | 久久久久成人精品 | 99精品久久精品一区二区 | 美女视频黄色免费 | 国产麻豆剧传媒免费观看 | 日本爱爱免费视频 | 国产最新福利 | 精品96久久久久久中文字幕无 | 天堂在线免费视频 | 天天色综合1 | 天天看天天操 | 日韩精品欧美视频 | 丁香av在线 | 国产一级视频在线观看 | 99久久精品国产一区二区成人 | 在线观看 亚洲 | 美女很黄免费网站 | 久久夜夜夜| 国产精品五月天 | 日韩欧美精选 | 免费在线观看av网址 | 97成人精品视频在线播放 | 最新日韩在线观看 | 久久综合九色九九 | 亚州天堂 | 亚洲视屏在线播放 | 久草免费看 | 9在线观看免费高清完整版 玖玖爱免费视频 | 97久久精品午夜一区二区 | 69视频网站 | 欧美日韩视频免费 | 91色在线观看 | 成人小视频免费在线观看 | 日韩精品免费一区二区三区 | 99视频免费播放 | 久久久久美女 | 一色av| 丁香电影小说免费视频观看 | 欧美91精品国产自产 | 99亚洲视频 | 韩国中文三级 | 成年人在线观看 | 最新午夜 | 99精品视频精品精品视频 | 久久久受www免费人成 | 亚洲国产wwwccc36天堂 | 日韩3区 | 亚洲一级电影视频 | 91人人爽人人爽人人精88v | 国产手机在线精品 | 精品福利网站 | 国产成人精品午夜在线播放 | 国产一区在线视频 | 97电影院网 | 亚洲成人av在线播放 | 一区二区三区在线不卡 | 成人小电影在线看 | 久久成人综合视频 | 成人aⅴ视频 | 日韩精品中文字幕在线播放 | 999久久国产 | 亚洲免费激情 | 久久久久久蜜桃一区二区 | 91亚洲精品久久久蜜桃 | 欧美午夜精品久久久久久孕妇 | 久久不卡国产精品一区二区 | 久久久久久福利 | 国产精品女视频 | 日韩综合第一页 | 狠狠躁天天躁综合网 | 国产一区视频免费在线观看 | 日韩欧美一区二区不卡 | 综合网中文字幕 | www视频在线免费观看 | 国产高清久久久 | 天天操夜夜逼 | 欧美一级爽| 国产视频二区三区 | 免费看国产一级片 | 欧美精品视 | 免费看国产一级片 | 中文在线免费看视频 | 国产精品ssss在线亚洲 | 中文字幕视频网 | 99精彩视频在线观看免费 | 97av在线视频| 中文字幕永久在线 | 97在线免费视频观看 | 亚洲国产免费看 | 99热超碰在线 | 日韩1级片 | 天天色播 | 久久久久欠精品国产毛片国产毛生 | 国产成人专区 | 91在线视频播放 | 国产自在线观看 | 国内精品亚洲 | 日韩精品一区二区三区在线视频 | 日韩免费久久 | 亚洲,国产成人av | 久久精品欧美日韩精品 | 久久久久久久网 | 成人97视频 | 国产精品一区二区三区久久久 | 亚洲一级国产 | 91看片一区二区三区 | 中文字幕韩在线第一页 | 亚洲人成人99网站 | 精品一区二区电影 | 91精品在线播放 | 91传媒免费在线观看 | 9在线观看免费高清完整版在线观看明 | 久久99中文字幕 | 综合网在线视频 | 中文字幕在 | 色婷婷视频在线观看 | 日韩av黄 | 国产精品久久久久久久久久三级 | 婷婷丁香在线视频 | 麻豆视频免费观看 | 国内揄拍国产精品 | 中文区中文字幕免费看 | 狠狠88综合久久久久综合网 | 亚洲人毛片| 五月婷婷丁香六月 | 久保带人 | 视频一区视频二区在线观看 | 国产一级免费观看视频 | 天天综合成人网 | 日韩精品视频在线观看免费 | 天天操天天操天天 | 又黄又爽又色无遮挡免费 | 免费网站黄 | 99久久精品免费看国产四区 | 国产婷婷| 欧美精品资源 | 国产精品第一页在线观看 | 午夜精品一区二区三区免费视频 | 国产特级毛片 | 日韩精品专区在线影院重磅 | 久久成人麻豆午夜电影 | 日韩在线视频线视频免费网站 | 91视频3p| 97国产在线| 深夜免费小视频 | 99热日本 | 一区二区三区免费在线观看 | 久久伊99综合婷婷久久伊 | 在线成人免费av | 亚洲天堂网在线视频观看 | 丁香免费视频 | 中文在线字幕免费观 | 国产高清av免费在线观看 | 免费欧美 | 99精品国产一区二区三区不卡 | 九九免费精品视频在线观看 | 亚洲aaa级| 又黄又刺激的网站 | 国产综合精品一区二区三区 | 成人xxxx | 亚洲第一区在线播放 | 伊人狠狠色 | 精品国产理论片 | 又色又爽又黄 | 亚洲精品国产成人av在线 | 麻豆91精品91久久久 | 亚洲干 | 亚洲一二三久久 | 精品99久久久久久 | 天天透天天插 | 在线观看亚洲免费视频 | 中文在线免费观看 | 中日韩欧美精彩视频 | 免费看色视频 | 人人爽人人爽人人爽 | 天天操天天干天天综合网 | 久久九九免费视频 | 毛片一级免费一级 | 欧洲精品视频一区 | 波多野结衣在线视频一区 | 亚洲综合色激情五月 | 婷婷播播网 | 婷婷在线看 | 激情视频91 | 人人干天天射 | 精品视频久久久久久 | 97成人精品视频在线播放 | 国产黄色片在线 | 国产xx在线 | 午夜视频一区二区 | 在线观看国产一区 | 在线 精品 国产 | 国产精品久久久久9999吃药 | 久久艹影院 | 91丨九色丨高潮丰满 | 色噜噜在线观看 | 日韩激情综合 | 九九在线高清精品视频 | 欧美一级片免费 | 亚洲欧美日韩不卡 | 在线播放一区 | 亚洲综合欧美日韩狠狠色 | 亚洲免费a | 美女精品网站 | 天天操天天干天天爱 | 国产精品女同一区二区三区久久夜 | 一区二区视频在线看 | 五月婷婷综合激情网 | 天天玩天天干天天操 | 一区二区三区日韩在线观看 | 一级黄色片在线观看 | 天天综合区 | 国产成人在线免费观看 | 国产精品久久中文字幕 | 综合视频在线 | 99国内精品久久久久久久 | 国产福利av | 国产成人一区二区三区在线观看 | 国产黄色大片 | 精品国偷自产国产一区 | 一区二区三区日韩在线观看 | 亚洲成a人片在线观看网站口工 | 九九热免费观看 | 国产精品四虎 | 91精品秘密在线观看 | 久久久久国产精品免费免费搜索 | 天天操天天玩 | 日韩av一区二区三区在线观看 | 欧美中文字幕久久 | 就操操久久 | 国产精品不卡av | 国产亚洲精品成人av久久ww | 久久久一本精品99久久精品66 | 狠狠狠狠狠狠狠 | 日韩av在线免费播放 | 亚洲高清在线观看视频 | 国产在线p | 久久精品国产精品亚洲 | 亚洲欧洲精品一区二区 | 免费在线看v | 中文字幕在线观看日本 | 在线一二三区 | 国内成人精品视频 | 国产精品涩涩屋www在线观看 | 免费视频成人 | 91在线精品视频 | 四虎在线永久免费观看 | 91看片看淫黄大片 | 亚洲欧美日韩精品久久久 | 亚洲永久在线 | 91黄色在线看 | 久久免费久久 | 国产精品1区2区3区在线观看 | 91精品国产麻豆国产自产影视 | 日韩中文字幕一区 | 精品久久1 | 激情视频区 | 亚洲天堂毛片 | 麻豆视频91| 中文字幕电影一区 | 国产精品久久艹 | 视频在线在亚洲 | 日日激情| 九草在线视频 | 91探花在线视频 | 日韩免费高清在线 | 国产精品欧美一区二区 | 色九九在线 | 久久伦理网 | 天天综合网 天天综合色 | 久久影视一区二区 | 欧美精品三级 | 草久在线观看视频 | 伊人久久av | 午夜123| 91精品国产92久久久久 | 久久爱资源网 | 91禁在线看 | 最新国产精品视频 | 少妇精品久久久一区二区免费 | 91av欧美 | 中文字幕精品一区二区三区电影 | 激情五月五月婷婷 | 五月天久久综合网 | 国产xvideos免费视频播放 | 亚洲视频综合 | 日韩中文在线字幕 | 成人精品国产免费网站 | 在线看免费 | 免费视频91蜜桃 | 国产精品久久久久久久久久久久冷 | 99久久精品费精品 | 欧美无极色 | av电影中文| 九九亚洲精品 | 久久精品欧美日韩精品 | 岛国一区在线 | 国产一级视频在线 | 国产精品免费一区二区三区在线观看 | 国产高清免费在线播放 | 免费碰碰 | 人人澡人人爽欧一区 | 综合中文字幕 | 午夜精品久久久久久久99水蜜桃 | 最近中文字幕完整视频高清1 | 日韩av片无码一区二区不卡电影 | 欧美一区影院 | 97电影院在线观看 | 久久午夜精品视频 | 天天操天天干天天插 | 国产91影视| 岛国av在线免费 | 亚洲精品久久在线 | 国产成人综合在线观看 | 日本论理电影 | www日韩视频| 丝袜护士aⅴ在线白丝护士 天天综合精品 | 999在线精品 | 一本一本久久a久久精品牛牛影视 | 天天射日 | 成人午夜剧场在线观看 | 丁香花在线观看视频在线 | 亚洲免费精品视频 | av色综合网| 欧美一级电影片 | 在线观看黄网站 | 久草视频在线看 | 91九色porny在线| 亚洲精品美女久久 | 在线激情小视频 | 久久久久久激情 | 人人艹人人 | 欧美成年性 | 不卡的av中文字幕 | 四虎免费在线观看 |