日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

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

编程问答

Hive中JOIN操作

發布時間:2025/7/25 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Hive中JOIN操作 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. 只支持相等JOIN

2. 多表連接當使用不同的列進行JOIN時,會產生多個MR作業。

3. 最后的表的數據是從流中讀取,而前面的會在內存中緩存,因此最好把最大的表放在最后。

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)//暗示

4. JOINWHERE子句前進行處理。

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'

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')//先過濾

5. 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)

---> FROM c LEFT OUTER JOIN a ON (c.key = a.key) LEFT OUTER JOIN b ON (c.key = b.key).

?

6. 只有一個大表時,可以使用map端連接:

SELECT /*+ MAPJOIN(b) */ a.key, a.value

  FROM a join b on a.key = b.key

  1.將小表的數據變成hashtable廣播到所有的map端,將大表的數據進行合理的切分

  2. map階段用大表的數據一行一行的去探測小表的hashtable

  hive.auto.convert.join=true:自動判斷大表和小表

  hive.smalltable.filesize=25M:當超過時使用reduce端連接

  hive.join.emit.interval=1000

  // hive.mapjoin.size.key=10000

  hive.mapjoin.cache.numrows=10000

7. BUCKET MAP JOIN:在JOIN列上分桶,桶的數目成倍數關系,設置hive.optimize.bucketmapjoin=true

SELECT /*+ MAPJOIN(b) */ a.key, a.value

  FROM a join b on a.key = b.key

Bucket Map?Join?執行計劃分兩步,第一步先將小表做map 操作變成hashtable 然后廣播到所有大表的map端,大表的map端接受了number_buckets?個小表的hashtable并不需要合成一個大的hashtable,直接可以進行map 操作,map?操作會產生number_buckets?split,每個split 的標記跟小表的hashtable 標記是一樣的, 在執行projection 操作的時候,只需要將小表的一個hashtable 放入內存即可,然后將大表的對應的split 拿出來進行判斷,所以其內存限制為小表中最大的那個hashtable 的大小.

8. SORT-MERGE JOIN:在JOIN列上排序并分桶,且有相同的桶數目

set hive.input.format=org.apache.hadoop.hive.ql.io.BucketizedHiveInputFormat;

set hive.optimize.bucketmapjoin = true;

set hive.optimize.bucketmapjoin.sortedmerge = true;

9. SKEW JOIN:處理數據傾斜

hive.exec.reducers.bytes.per.reducer:默認處理1G數據

hive.optimize.skewjoin=false

hive.skewjoin.key=100000 (處理的總記錄數/reduce個數)2-4


內連接:SELECT sales.*,things.* FROM sales JOIN things ON (sales.id=things.id)

SELECT sales.*,things.* FROM sales LEFT/RIGHT/FULL OUTER JOIN things ON (sales.id=things.id)

半連接: 右手邊的表只能出現在JOIN條件里,不能出現在SELECTWHERE里。

SELECT * FROM things LEFT SEMI JOIN sales ON (sales.id=things.id)

=SELECT * FROM things WHERE things.id in (SELECT id FROM sales)

轉載于:https://www.cnblogs.com/theseven/p/4943678.html

總結

以上是生活随笔為你收集整理的Hive中JOIN操作的全部內容,希望文章能夠幫你解決所遇到的問題。

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