分桶表的介紹和作用

一、分桶表的基本介紹

1、什么是分桶表?

????????分桶表主要是用于分文件的,在建表的時候,指定按照那些字段執行分桶操作,并可以設置需要分多少個桶,當插入數據的時候,執行MR的分區的操作,將數據分散各個分區(hive分桶)中,默認分發方案是:hash 取模

? ? ? ? 注意:對于分桶表,不能使用load data 的方式進行數據插入操作,因為load data 導入的數據不會有分桶結構

2、什么是分區表?

????????分區表是數據庫中一種特殊的表結構設計,它將數據按照預定義的規則分散存儲在多個物理區域(稱為 “分區”)中,但對用戶來說邏輯上仍然是一個整體表。分區表在邏輯上是一張表,但數據在物理上被拆分為多個獨立的存儲單元(如文件、文件夾或索引)。用戶無需關心數據具體存儲在哪個分區,只需像操作普通表一樣查詢即可。分區的目的是提高查詢性能、簡化數據管理(如數據歸檔、刪除),尤其適用于數據量極大的表。

3、分桶表和分區表的區別:

1)分桶對數據的處理比分區更加細粒度化;分區針對的是數據的存儲路徑;分桶針對的是數據文件;

2)分桶是按照列的哈希函數進行分割的,相對比較平均;而分區是按照列的值來進行分割的,容易造成數據傾斜;

3)分桶和分區兩者互不干擾,可以把分區表進一步分桶

4)簡單來說,分區就是把表分成一個一個文件夾,一個文件夾里面還可以在放文件夾,分桶是把表分成一個一個文件,文件里面就不能在放文件,所以分區可以分好幾層,分桶不可以

4、如何構建一個分桶表?

create table test_buck(id int, name string)

clustered by(id) sorted by (id asc) into 6 buckets ??-- 創建分桶表的SQL

row format delimited fields terminated by '\t';

5、如何向分桶表添加數據?

標準格式:

? ? ? ? 1)創建一張與分桶表一樣的臨時表,唯一區別是這個表不是一個分桶表

? ? ? ? 2)將數據加載到這個臨時表中

? ? ? ? 3)通過insert into + select 語句將數據導入到分桶表中

注意:sqoop不支持直接對分桶表導入數據

二、分桶表有什么作用

1、進行數據采樣

????????案例1: 數據質量校驗工作(一般會先判斷各個字段數據的結構信息是否完整)

????????案例2: ?在進行數據分析的時候, 一天需要編寫N多條SQL, 但是每編寫一條SQL后, 都需要對SQL做一個校驗, 如果直接面對完整的數據集做校驗, 會導致校驗時間過長, 影響開發進度, 此時可以先采樣出一部分數據

????????案例3: ?在計算一些比率值,或者 在計算相對指標的時候, 也會基于采樣數據來計算相對指標

????????????????比如: 計算當前月的銷售額相對上個月 環比增長了百分之多少?

????????????????????????可以選擇當前月和上個月抽取出百分之30的數據, 基于這個數據來計算

重點:如何進行數據采樣

采樣函數: tablesample(bucket x out of y on column)

放置位置: 緊緊放置表的后面 ?如果表有別名 必須放置別名的前面

例如:select * from 表?tablesample(bucket x out of y on column) 表的別名;

說明:

????x: ?從第幾個桶開始進行采樣

????y: ?抽樣比例(總桶數/y=分多少個桶)

????column: 分桶的字段, 可以省略的

注意:

???x 不能大于 y

???y 必須是表的分桶數量的倍數或者因子

案例:

????1) 假設 A表有10個桶, ?請分析, 下面的采樣函數, 會將那些桶抽取出來

?????????tablesample(bucket 2 out of 5 on xxx)

???????會抽取幾個桶呢? ???總桶 / y = ?分桶數量? ? 10/5=2

???????抽取第幾個編號的桶? ?(x+y)

???????????2,7

????2) ?假設 A表有20個桶, ?請分析, 下面的采樣函數, 會將那些桶抽取出來

??? ?tablesample(bucket 4 out of 4 on xxx)

??? ???會抽取幾個桶呢? ???總桶 / y = ?分桶數量? ?20/4=5

???????抽取第幾個編號的桶? ?(x+y)

???????????4,8,12,16,20

? ? tablesample(bucket 4 out of 40 on xxx)

? ? ? ? 會抽取幾個桶呢? ???總桶 / y = ?分桶數量???20/40=0.5
抽取第幾個編號的桶? ?(x+y)
抽4.5,只抽一個

2、提升查詢的效率(單表|多表)

單表

不分桶就只能從頭到尾一個一個慢慢查,而分桶之后先得到桶編號,在根據桶編號進入對應的桶查詢數據即可

多表

分為小表和大表、中型表和大表、大表和大表

????????Reduce 端 join:是在 MapReduce 框架下,針對表連接(如將兩個或多個數據表依據關聯鍵合并)這一特定操作的實現方式,是一種具體的業務處理策略 ,專注于解決數據關聯問題。

reduce端join的流程:

????????Map 階段:讀取不同表的數據,為每行數據添加標記以區分來源表,并將數據轉換為?<Join Key, Value>?形式輸出。例如,對于訂單表和用戶表,以關聯鍵(如用戶 ID)為 Join Key,為來自訂單表的數據標記?tag = order,來自用戶表的數據標記?tag = user

????????Shuffle 階段:與 MapReduce 的 Shuffle 類似,根據 Join Key 的哈希值將數據分發到對應的 Reduce 節點,保證相同 Join Key 的數據匯聚到一處。

????????Reduce 階段:根據數據標記區分不同表的數據,然后執行表連接操作(如內連接、左連接等),生成最終的連接結果。

可能出現的問題:

1) 可能出現數據傾斜的問題

2) 導致reduce壓力較大

小表和大表

采用 map join的方案

????????在進行join的時候, 將小表的數據放置到每一個讀取大表的mapTask的內存中, 讓mapTask每讀取一次大表的數據都和內存中小表的數據進行join操作, 將join上的結果輸出到reduce端即可, 從而實現在map端完成join的操作

如何開啟map Join

?? set hive.auto.convert.join=true; ?-- 是否開啟map Join

?? set hive.auto.convert.join.noconditionaltask.size=512000000; -- 設置小表最大的閾值(設置block cache 緩存大小)

中型表和大表

中型表: 與小表相比 大約是小表3~10倍左右

解決方案:

? ? ? 1) 能提前過濾就提前過濾掉(一旦提前過濾后, 會導致中型表的數據量會下降, 有可能達到小表閾值)

??????2) 如果join的字段值有大量的null, 可以嘗試添加隨機數(保證各個reduce接收數據量差不多的, 減少數據傾斜問題)

??????3) 基于分桶表的: bucket map join

?bucket map join的生效條件:

??????1) set hive.optimize.bucketmapjoin = true; ?--開啟bucket map join 支持

??????2) 一個表的bucket數是另一個表bucket數的整數倍

??????3) bucket列 == join列

??????4) 必須是應用在map join的場景中

? 注意:如果表不是bucket的,則只是做普通join。

就是把中型表分桶變成小表,在通過小表和大表的方法即可

大表和大表

大表: 與小表相比 大約是小表10倍以上

核心原理

????????分桶:兩個表按?相同的 Join Key(如?user_id)哈希分桶(例如都分為 100 個桶),確保相同 Join Key 的數據在對應桶中。

????????排序:每個桶內的數據按 Join Key 排序,便于快速匹配。

????????Map 端計算:Join 時,Map 任務直接讀取兩個表的對應桶,用?歸并排序?算法逐行匹配,無需 Shuffle。

解決方案:

? ? 1). 能提前過濾就提前過濾掉(減少join之間的數量, 提升reduce執行效率)

????2). 如果join的字段值有大量的null, 可以嘗試添加隨機數(保證各個reduce接收數據量差不多的, 減少數據傾斜問題)

????3). SMB Map join (sort merge bucket map join)

實現SMB map join的條件要求:

??????1) 一個表的bucket數等于另一個表bucket數(分桶數量是一致,一對一的關系)

??????2) bucket列 == join列 == sort 列

??????3) 必須是應用在bucket map join的場景中,也就是已經開啟了bucket map join的相關參數

??????4) 開啟相關的參數:

?????? -- 開啟SMB map join

?????? set hive.auto.convert.sortmerge.join=true;

?????? set hive.auto.convert.sortmerge.join.noconditionaltask=true;

?????? --寫入數據強制排序

?????? set hive.enforce.sorting=true;

?????? set hive.optimize.bucketmapjoin.sortedmerge = true; -- 開啟自動嘗試SMB連接

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/88301.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/88301.shtml
英文地址,請注明出處:http://en.pswp.cn/web/88301.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

HighReport報表工具開始支持BS報表設計器

HighReport報表工具同時支持c/s報表設計器和b/s報表設計器&#xff0c;大部分情況下使用c/s報表設計器&#xff0c;在某些業務場景或者用戶自己簡單修改報表模板&#xff0c;可以用b/s報表設計器。b/s報表設計器和c/s報表設計器操作一樣b/s報表設計器免費下載免費使用(c/s報表設…

數據結構--堆的實現

目錄 一、堆的概念及結構 二、小根堆的實現 2.1 堆的數據結構 2.2 堆的初始化HeapInit 2.3 堆的銷毀HeapDestory 2.4 堆的插入HeapPush ?2.4.1 插入代碼HeapPush 2.4.2 向上調整代碼AdjustUp 2.4.3 交換數據代碼Swap 2.5 堆的刪除HeapPop 2.5.1 刪除代碼HeapPop 2…

evo軌跡評估工具

文章目錄evo參數設置evo_traj指標度量evo_apeevo_rpe結果比較evo工具主要有如下六個常用命令&#xff1a; evo_ape - 用于評估絕對位姿誤差&#xff1b;evo_rpe- 用于評估相對位姿誤差&#xff1b;evo_traj - 這個主要是用來畫軌跡、輸出軌跡文件、轉換數據格式等功能&#xf…

Django+DRF 實戰:自定義異常處理流程

文章目錄一、DRF 異常處理流程DRF 默認異常處理流程源碼二、實戰DRF 自定義異常處理流程應用自定義異常處理流程一、DRF 異常處理流程 DRF 默認異常處理流程 DRF默認的異常處理流程如下&#xff1a; 當異常發生時&#xff0c;會自動調用rest_framework.views.exception_hand…

Spring MVC 1

什么是Spring Web MVC 官方對Spring MVC的描述是這樣的&#xff1a;Spring Web MVC 是基于Severlet API構建的原始Web框架&#xff0c;從一開始就包含在Spring框架中。它的正式名稱“Spring Web MVC”來自其源模塊的名稱&#xff08;Spring-webmvc&#xff09;&#xff0c;但它…

一個基于若依(ruoyi-vue3)的小項目部署記錄

一、背景 收到朋友的求助&#xff0c;他拿到了一個項目的源代碼&#xff0c;說需要我幫助部署。部署要求是需要域名訪問。 因為沒有文檔和其他資料以及幫助&#xff0c;我先清理了源收到的資料&#xff1a; 1.后端&#xff1a;是java代碼&#xff0c;一看就是若依框架。心里大大…

【實戰總結】WMIC在HW行動中的4類關鍵應用

WMIC命令完全指南&#xff1a;網絡安全運維工程師的深度實踐手冊 關鍵詞&#xff1a;WMIC命令、Windows管理、網絡安全運維、系統信息收集、進程分析、自動化審計 【實戰總結】WMIC在HW行動中的4類關鍵應用 1. 前言 在Windows環境下的網絡安全運維中&#xff0c;WMIC&#x…

LKT4304穩定可靠高兼容性國產安全加密芯片

隨著 IOT 的飛速發展&#xff0c;智能家居&#xff0c;智能汽車&#xff0c;智能工控等物聯網設備和云服務的安全問題成為IOT普及的關鍵障礙。在設計之初就為物聯網產品配備正確的安全解決方案&#xff0c;是幫助預防措施的關鍵所在。LKT4304是凌科芯安專為物聯網應用場景而推出…

Android 網絡開發核心知識點

Android 網絡開發核心知識點 一、基礎網絡通信 1. HTTP/HTTPS 協議 HTTP方法&#xff1a;GET、POST、PUT、DELETE等狀態碼&#xff1a;200(成功)、404(未找到)、500(服務器錯誤)等HTTPS加密&#xff1a;SSL/TLS握手過程報文結構&#xff1a;請求頭/響應頭、請求體/響應體 2. 網…

DVWA靶場通關筆記-弱會話IDs(Weak Session IDs Medium級別)

目錄 一、Session ID 二、代碼審計&#xff08;Medium級別&#xff09; 1、配置security為Medium級別 2、源碼分析 &#xff08;1&#xff09;index.php &#xff08;2&#xff09;Medium.php &#xff08;3&#xff09;對比分析 &#xff08;4&#xff09;滲透思路 三…

編輯器Vim的快速入門

如大家所了解的&#xff0c;Vim是一個很古老的編輯器&#xff0c;但是并沒有隨著時間的流逝消失在編輯器/IDE 的競爭中&#xff0c;Vim 獨創的模式機制和 hjkl 移動光標方式使得使用者在編輯文件時可以雙手不離開鍵盤&#xff0c;極大地提升了工作效率。由于 Vim 學習曲線極為陡…

深度學習核心:從基礎到前沿的全面解析

&#x1f9e0; 深度學習核心&#xff1a;從基礎到前沿的全面解析 &#x1f680; 探索深度學習的核心技術棧&#xff0c;從神經網絡基礎到最新的Transformer架構 &#x1f4cb; 目錄 &#x1f52c; 神經網絡基礎&#xff1a;從感知機到多層網絡&#x1f5bc;? 卷積神經網絡&am…

MySQL索引:數據庫的超級目錄

MySQL索引&#xff1a;數據庫的「超級目錄」 想象你有一本1000頁的百科全書&#xff0c;要快速找到某個知識點&#xff08;如“光合作用”&#xff09;&#xff1a; ? 無索引&#xff1a;逐頁翻找 → 全表掃描&#xff08;慢&#xff01;&#xff09;? 有索引&#xff1a;直接…

景觀橋 涵洞 城門等遮擋物對汽車安全性的影響數學建模和計算方法,需要收集那些數據

對高速公路景觀橋影響行車視距的安全問題進行數學建模&#xff0c;需要將物理幾何、動力學、概率統計和交通流理論結合起來。以下是分步驟的建模思路和關鍵模型&#xff1a;一、 核心建模目標 量化視距&#xff08;Sight Distance, SD&#xff09;&#xff1a;計算實際可用視距…

Git 用戶名和郵箱配置指南:全局與項目級設置

查看全局配置 git config --global user.name # 查看全局name配置 git config --global user.email # 查看全局email配置 git config --global --list # 查看所有全局配置查看當前項目配置 git config user.name # 查看當前項目name配置 git config user.email # 查看當前項目…

視頻序列和射頻信號多模態融合算法Fusion-Vital解讀

視頻序列和射頻信號多模態融合算法Fusion-Vital解讀概述模型整體流程視頻幀時間差分歸一化TSM模塊視頻序列特征融合模塊跨模態特征融合模塊概述 最近看了Fusion-Vital的視頻-射頻&#xff08;RGB-RF&#xff09;融合Transformer模型。記錄一下&#xff0c;對于實際項目中的多模…

frp內網穿透下創建FTP(解決FTP“服務器回應不可路由的地址。使用服務器地址替代”錯誤)

使用寶塔面板&#xff0c;點擊FTP&#xff0c;下載Pure-FTPd插件 點擊Pure-FTPd插件&#xff0c;修改配置文件&#xff0c;找到PassivePortRange, 修改ftp被動端口范圍為39000 39003&#xff0c;我們只需要4個被動端口即可&#xff0c;多了不好在內網穿透frp的配置文件中增加…

STM32控制四自由度機械臂(SG90舵機)(硬件篇)(簡單易復刻)

1.前期硬件準備 2s鋰電池一個&#xff08;用于供電&#xff09;&#xff0c;stm32f103c8t6最小系統板一個&#xff08;主控板&#xff09;&#xff0c;兩個搖桿&#xff08;用于搖桿模式&#xff09;&#xff0c;四個電位器&#xff08;用于示教器模式&#xff09;&#xff0c…

華為OD機試_2025 B卷_最差產品獎(Python,100分)(附詳細解題思路)

題目描述 A公司準備對他下面的N個產品評選最差獎&#xff0c; 評選的方式是首先對每個產品進行評分&#xff0c;然后根據評分區間計算相鄰幾個產品中最差的產品。 評選的標準是依次找到從當前產品開始前M個產品中最差的產品&#xff0c;請給出最差產品的評分序列。 輸入描述 第…

飛算JavaAI:重塑Java開發效率的智能引擎

飛算JavaAI:重塑Java開發效率的智能引擎 一、飛算JavaAI核心價值 飛算JavaAI是全球首款專注Java語言的智能開發助手,由飛算數智科技(深圳)有限公司研發。它通過AI大模型技術實現: 全流程自動化:從需求分析→軟件設計→代碼生成一氣呵成工程級代碼輸出:生成包含配置類、…