哈哈哈哈哈操欧洲电影,久草网在线,亚洲久久熟女熟妇视频,麻豆精品色,久久福利在线视频,日韩中文字幕的,淫乱毛视频一区,亚洲成人一二三,中文人妻日韩精品电影

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何通過(guò)explain來(lái)驗(yàn)證sql的執(zhí)行順序

Linux愛(ài)好者 ? 來(lái)源:五分鐘學(xué)大數(shù)據(jù) ? 作者:園陌 ? 2021-09-07 16:24 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

關(guān)于 sql 語(yǔ)句的執(zhí)行順序網(wǎng)上有很多資料,但是大多都沒(méi)進(jìn)行驗(yàn)證,并且很多都有點(diǎn)小錯(cuò)誤,尤其是對(duì)于 select 和 group by 執(zhí)行的先后順序,有說(shuō) select 先執(zhí)行,有說(shuō) group by 先執(zhí)行,到底它倆誰(shuí)先執(zhí)行呢?

今天我們通過(guò) explain 來(lái)驗(yàn)證下 sql 的執(zhí)行順序。

在驗(yàn)證之前,先說(shuō)結(jié)論,Hive 中 sql 語(yǔ)句的執(zhí)行順序如下:

from 。. where 。. join 。. on 。. select 。. group by 。. select 。. having 。. distinct 。. order by 。. limit 。. union/union all

可以看到 group by 是在兩個(gè) select 之間,我們知道 Hive 是默認(rèn)開(kāi)啟 map 端的 group by 分組的,所以在 map 端是 select 先執(zhí)行,在 reduce 端是 group by先執(zhí)行。

下面我們通過(guò)一個(gè) sql 語(yǔ)句分析下:

select

sum(b.order_amount) sum_amount,

count(a.userkey) count_user

from user_info a

left join user_order b

on a.idno=b.idno

where a.idno 》 ‘112233’group by a.idno

having count_user》1limit 10;

上面這條 sql 語(yǔ)句是可以成功執(zhí)行的,我們看下它在 MR 中的執(zhí)行順序:

Map 階段:

執(zhí)行 from,進(jìn)行表的查找與加載;

執(zhí)行 where,注意:sql 語(yǔ)句中 left join 寫(xiě)在 where 之前的,但是實(shí)際執(zhí)行先執(zhí)行 where 操作,因?yàn)?Hive 會(huì)對(duì)語(yǔ)句進(jìn)行優(yōu)化,如果符合謂詞下推規(guī)則,將進(jìn)行謂詞下推;

執(zhí)行 left join 操作,按照 key 進(jìn)行表的關(guān)聯(lián);

執(zhí)行輸出列的操作,注意: select 后面只有兩個(gè)字段(order_amount,userkey),此時(shí) Hive 是否只輸出這兩個(gè)字段呢,當(dāng)然不是,因?yàn)?group by 的是 idno,如果只輸出 select 的兩個(gè)字段,后面 group by 將沒(méi)有辦法對(duì) idno 進(jìn)行分組,所以此時(shí)輸出的字段有三個(gè):idno,order_amount,userkey;

執(zhí)行 map 端的 group by,此時(shí)的分組方式采用的是哈希分組,按照 idno 分組,進(jìn)行order_amount 的 sum 操作和 userkey 的 count 操作,最后按照 idno 進(jìn)行排序(group by 默認(rèn)會(huì)附帶排序操作);

Reduce 階段:

執(zhí)行 reduce 端的 group by,此時(shí)的分組方式采用的是合并分組,對(duì) map 端發(fā)來(lái)的數(shù)據(jù)按照 idno 進(jìn)行分組合并,同時(shí)進(jìn)行聚合操作 sum(order_amount)和 count(userkey);

執(zhí)行 select,此時(shí)輸出的就只有 select 的兩個(gè)字段:sum(order_amount) as sum_amount,count(userkey) as count_user;

執(zhí)行 having,此時(shí)才開(kāi)始執(zhí)行 group by 后的 having 操作,對(duì) count_user 進(jìn)行過(guò)濾,注意:因?yàn)樯弦徊捷敵龅闹挥?select 的兩個(gè)字段了,所以 having 的過(guò)濾字段只能是這兩個(gè)字段;

執(zhí)行 limit,限制輸出的行數(shù)為 10。

上面這個(gè)執(zhí)行順序到底對(duì)不對(duì)呢,我們可以通過(guò) explain 執(zhí)行計(jì)劃來(lái)看下,內(nèi)容過(guò)多,我們分階段來(lái)看。

首先看下 sql 語(yǔ)句的執(zhí)行依賴:

b87621aa-0fb2-11ec-8fb8-12bb97331649.png

我們看到 Stage-5 是根,也就是最先執(zhí)行 Stage-5,Stage-2 依賴 Stage-5,Stage-0 依賴 Stage-2。

首先執(zhí)行 Stage-5:

b883ad3e-0fb2-11ec-8fb8-12bb97331649.png

圖中標(biāo) ① 處是表掃描操作,注意先掃描的 b 表,也就是 left join 后面的表,然后進(jìn)行過(guò)濾操作(圖中標(biāo) ② 處),我們 sql 語(yǔ)句中是對(duì) a 表進(jìn)行的過(guò)濾,但是 Hive 也會(huì)自動(dòng)對(duì) b 表進(jìn)行相同的過(guò)濾操作,這樣可以減少關(guān)聯(lián)的數(shù)據(jù)量。

接下來(lái)執(zhí)行 Stage-2:

首先是 Map 端操作:

b894d690-0fb2-11ec-8fb8-12bb97331649.png

先掃描 a 表(圖中標(biāo) ① 處);接下來(lái)進(jìn)行過(guò)濾操作 idno 》 ‘112233’(圖中標(biāo) ② 處);然后進(jìn)行 left join,關(guān)聯(lián)的 key 是 idno(圖中標(biāo) ③ 處);執(zhí)行完關(guān)聯(lián)操作之后會(huì)進(jìn)行輸出操作,輸出的是三個(gè)字段,包括 select 的兩個(gè)字段加 group by 的一個(gè)字段(圖中標(biāo) ④ 處);然后進(jìn)行 group by 操作,分組方式是 hash(圖中標(biāo) ⑤ 處);然后進(jìn)行排序操作,按照 idno 進(jìn)行正向排序(圖中標(biāo) ⑥ 處)。

然后是 Reduce 端操作:

b8a76c38-0fb2-11ec-8fb8-12bb97331649.png

首先進(jìn)行 group by 操作,注意此時(shí)的分組方式是 mergepartial 合并分組(圖中標(biāo) ① 處);然后進(jìn)行 select 操作,此時(shí)輸出的字段只有兩個(gè)了,輸出的行數(shù)是 30304 行(圖中標(biāo) ② 處);接下來(lái)執(zhí)行 having 的過(guò)濾操作,過(guò)濾出 count_user》1 的字段,輸出的行數(shù)是 10101 行(圖中標(biāo) ③ 處);然后進(jìn)行 limit 限制輸出的行數(shù)(圖中標(biāo) ④ 處);圖中標(biāo) ⑤ 處表示是否對(duì)文件壓縮,false 不壓縮。

執(zhí)行計(jì)劃中的數(shù)據(jù)量只是預(yù)測(cè)的數(shù)據(jù)量,不是真實(shí)運(yùn)行的,所以數(shù)據(jù)可能不準(zhǔn)!

最后是 Stage-0 階段:

b8d9f658-0fb2-11ec-8fb8-12bb97331649.png

限制最終輸出的行數(shù)為 10 行。

總結(jié)

通過(guò)上面對(duì) SQL 執(zhí)行計(jì)劃的分析,總結(jié)以下幾點(diǎn):

每個(gè) stage 都是一個(gè)獨(dú)立的 MR,復(fù)雜的 hive sql 語(yǔ)句可以產(chǎn)生多個(gè) stage,可以通過(guò)執(zhí)行計(jì)劃的描述,看看具體步驟是什么。

對(duì)于 group by 的 key,必須是表中的字段,對(duì)于 having 的 key,必須是 select 的字段。

order by 是在 select 后執(zhí)行的,所以 order by 的 key 必須是 select 的字段。

select 最好指明字段,select * 會(huì)增加很多不必要的消耗(CPU、IO、內(nèi)存、網(wǎng)絡(luò)帶寬)。

責(zé)任編輯:haq

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • SQL
    SQL
    +關(guān)注

    關(guān)注

    1

    文章

    807

    瀏覽量

    46937
  • 數(shù)據(jù)庫(kù)
    +關(guān)注

    關(guān)注

    7

    文章

    4083

    瀏覽量

    68538

原文標(biāo)題:Hive SQL 語(yǔ)句的正確執(zhí)行順序

文章出處:【微信號(hào):LinuxHub,微信公眾號(hào):Linux愛(ài)好者】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    郭燕濤SQL Server 全能管理員在線課程分享

    、對(duì)哪張表的哪些字段執(zhí)行了 Update 操作。 一個(gè)經(jīng)過(guò)精心設(shè)計(jì)的 SQL Server 權(quán)限與審計(jì)體系,不再是技術(shù)的阻礙,而是滿足監(jiān)管要求的“合規(guī)杠桿”。它將原本需要耗費(fèi)大量人力去線下核對(duì)、追責(zé)
    發(fā)表于 04-19 16:28

    i.MX93定制板 – DDR 配置與引導(dǎo)加載程序刷新順序的疑問(wèn)求解

    。 3- 最后刷新我們使用 Yocto 生成的 Linux 映像。 但是,我們不確定正確的作順序。 在 EVK 上,我們通過(guò) USB 使用 Config Tool 成功驗(yàn)證了 DDR 配置。 在我們
    發(fā)表于 04-16 06:27

    MySQL 刪庫(kù)后怎么恢復(fù)?binlog2sql 之外,NineData 還能做什么

    很多團(tuán)隊(duì)遇到 MySQL 誤刪、誤更新時(shí),第一反應(yīng)都是搜 binlog2sql。它確實(shí)能解決一部分問(wèn)題,但企業(yè)生產(chǎn)環(huán)境中真正缺的,往往不是單點(diǎn)回滾腳本,而是從變更提交、預(yù)檢、審批、執(zhí)行到追蹤和回滾
    的頭像 發(fā)表于 04-15 11:49 ?63次閱讀
    MySQL 刪庫(kù)后怎么恢復(fù)?binlog2<b class='flag-5'>sql</b> 之外,NineData 還能做什么

    瀚博半導(dǎo)體通過(guò)UALink互聯(lián)測(cè)試驗(yàn)證服務(wù)

    2026年4月2日,ODCC春季全會(huì)期間UALink生態(tài)迎來(lái)重磅進(jìn)展。在ODCC全體會(huì)議上,ODCC新測(cè)組組長(zhǎng)、中國(guó)信通院正高級(jí)工程師郭亮與ODCC執(zhí)行委員、阿里云服務(wù)器研發(fā)資深總監(jiān)王偉共同發(fā)布UALink測(cè)試驗(yàn)證服務(wù),并披露當(dāng)前IP互通
    的頭像 發(fā)表于 04-07 17:07 ?589次閱讀

    NineData SQL AI 智能補(bǔ)全上線:寫(xiě) SQL,不必每次都從頭敲

    NineData推出SQLAI智能補(bǔ)全功能,通過(guò)AI技術(shù)實(shí)現(xiàn)上下文感知的SQL語(yǔ)句智能提示。該功能不僅能補(bǔ)全關(guān)鍵字,還能根據(jù)當(dāng)前輸入內(nèi)容預(yù)測(cè)后續(xù)查詢意圖,顯著提升多表關(guān)聯(lián)、復(fù)雜條件等場(chǎng)景下的編寫(xiě)效率
    的頭像 發(fā)表于 04-01 20:19 ?272次閱讀
    NineData <b class='flag-5'>SQL</b> AI 智能補(bǔ)全上線:寫(xiě) <b class='flag-5'>SQL</b>,不必每次都從頭敲

    Yearning+客戶端+手工EXPLAIN,NineData社區(qū)版能作為替代方案?

    SQL 驗(yàn)證到審批的全鏈路,減少 DBA 在多工具間的切換,適合需連貫慢 SQL 治理流程的團(tuán)隊(duì),社區(qū)版支持 10 個(gè)數(shù)據(jù)源,離線部署友好。
    的頭像 發(fā)表于 03-26 10:52 ?116次閱讀
    Yearning+客戶端+手工<b class='flag-5'>EXPLAIN</b>,NineData社區(qū)版能作為替代方案?

    SQL分析選型:DMS/DAS與NineData該如何選擇

    阿里云 DMS 的慢SQL 趨勢(shì)、DAS 的 SQL 審計(jì)能力成熟,可滿足阿里云用戶基礎(chǔ)需求。NineData 側(cè)重跨云統(tǒng)一工作臺(tái)、研發(fā)與 DBA 協(xié)同,打通慢日志分析、性能診斷、規(guī)范審核、索引建議全鏈路,更適配企業(yè)級(jí)慢查詢持續(xù)治理。
    的頭像 發(fā)表于 03-25 17:20 ?1536次閱讀
    慢<b class='flag-5'>SQL</b>分析選型:DMS/DAS與NineData該如何選擇

    基于 NineData 的多環(huán)境表結(jié)構(gòu)變更流程編排實(shí)踐

    NineData 的流程編排,并非簡(jiǎn)單的 SQL執(zhí)行工具,而是專為多環(huán)境結(jié)構(gòu)發(fā)布設(shè)計(jì)的標(biāo)準(zhǔn)化體系:以開(kāi)發(fā)環(huán)境為基準(zhǔn)數(shù)據(jù)源,固定變更源頭與執(zhí)行順序,支持開(kāi)發(fā)→測(cè)試→預(yù)發(fā)→生產(chǎn)自定義流程節(jié)
    的頭像 發(fā)表于 03-19 17:24 ?1180次閱讀
    基于 NineData 的多環(huán)境表結(jié)構(gòu)變更流程編排實(shí)踐

    NineData 社區(qū)版的慢SQL分析,比查看日志+看EXPLAIN適合中小團(tuán)隊(duì)

    本文探討 NineData 社區(qū)版在 MySQL 慢 SQL 場(chǎng)景對(duì)中小團(tuán)隊(duì)的適用性。與 “查看日志 + 看 EXPLAIN” 傳統(tǒng)方式不同,它將慢 SQL 按模板聚合,能從大盤(pán)、模板、診斷等多維
    的頭像 發(fā)表于 03-17 14:07 ?120次閱讀
    NineData 社區(qū)版的慢<b class='flag-5'>SQL</b>分析,比查看日志+看<b class='flag-5'>EXPLAIN</b>適合中小團(tuán)隊(duì)

    MySQL 慢 SQL 排查這件事,NineData 社區(qū)VS DBeaver/ Navicat 技術(shù)分析

    DBeaver Community 和 Navicat Premium Lite 都是很有價(jià)值的客戶端工具,在單條 SQL 的查詢和驗(yàn)證上,依然是 DBA 最順手的入口。 但 NineData
    的頭像 發(fā)表于 03-17 11:53 ?129次閱讀
    MySQL 慢 <b class='flag-5'>SQL</b> 排查這件事,NineData 社區(qū)VS DBeaver/ Navicat 技術(shù)分析

    SQL 通用數(shù)據(jù)類型

    SQL 通用數(shù)據(jù)類型 數(shù)據(jù)庫(kù)表中的每個(gè)列都要求有名稱和數(shù)據(jù)類型。Each column in a database table is required to have a name and a
    的頭像 發(fā)表于 08-18 09:46 ?856次閱讀

    Text2SQL準(zhǔn)確率暴漲22.6%!3大維度全拆

    基于 BIRD 數(shù)據(jù)集展開(kāi)。 方法:提出 J-Schema 呈現(xiàn)數(shù)據(jù)庫(kù)結(jié)構(gòu)并合理提供示例值,結(jié)合思維鏈引導(dǎo)模型推理。采用 Iterative DPO 迭代訓(xùn)練,多輪迭代提升性能。用自洽性方法,通過(guò)硬 / 軟投票從多個(gè)候選答案中選最優(yōu),軟投票更優(yōu)。 結(jié)果:解決 Text2SQL
    的頭像 發(fā)表于 08-14 11:17 ?822次閱讀
    Text2<b class='flag-5'>SQL</b>準(zhǔn)確率暴漲22.6%!3大維度全拆

    數(shù)據(jù)庫(kù)數(shù)據(jù)恢復(fù)—SQL Server數(shù)據(jù)庫(kù)被加密如何恢復(fù)數(shù)據(jù)?

    SQL Server數(shù)據(jù)庫(kù)故障: SQL Server數(shù)據(jù)庫(kù)被加密,無(wú)法使用。 數(shù)據(jù)庫(kù)MDF、LDF、log日志文件名字被篡改。
    的頭像 發(fā)表于 06-25 13:54 ?841次閱讀
    數(shù)據(jù)庫(kù)數(shù)據(jù)恢復(fù)—<b class='flag-5'>SQL</b> Server數(shù)據(jù)庫(kù)被加密如何恢復(fù)數(shù)據(jù)?

    達(dá)夢(mèng)數(shù)據(jù)庫(kù)常用管理SQL命令詳解

    達(dá)夢(mèng)數(shù)據(jù)庫(kù)常用管理SQL命令詳解
    的頭像 發(fā)表于 06-17 15:12 ?7647次閱讀
    達(dá)夢(mèng)數(shù)據(jù)庫(kù)常用管理<b class='flag-5'>SQL</b>命令詳解

    大促數(shù)據(jù)庫(kù)壓力激增,如何一眼定位 SQL 執(zhí)行來(lái)源?

    語(yǔ)句成為了性能瓶頸。面對(duì)這樣的困境,本篇文章提出了對(duì) SQL 進(jìn)行 “染色” 的方法來(lái)幫助大家 一眼定位問(wèn)題 SQL,而無(wú)需再在多處邏輯中輾轉(zhuǎn)騰挪 。本文的思路主要受之前郭忠強(qiáng)老師發(fā)布的 如何一眼定位
    的頭像 發(fā)表于 06-10 11:32 ?659次閱讀
    大促數(shù)據(jù)庫(kù)壓力激增,如何一眼定位 <b class='flag-5'>SQL</b> <b class='flag-5'>執(zhí)行</b>來(lái)源?
    神农架林区| 白玉县| 德清县| 利津县| 日照市| 上饶市| 开鲁县| 沙田区| 澄江县| 南召县| 喀喇沁旗| 乌拉特后旗| 体育| 嵩明县| 登封市| 时尚| 新丰县| 太仆寺旗| 绥中县| 太白县| 新沂市| 延安市| 德惠市| 梁河县| 乌拉特后旗| 镇宁| 平邑县| 图木舒克市| 凤山县| 房山区| 鄢陵县| 盐池县| 洮南市| 湘乡市| 洛浦县| 临江市| 屏南县| 云阳县| 清河县| 德安县| 赤壁市|