国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Spark SQL優(yōu)化:NOT IN子查詢優(yōu)化解決

這篇具有很好參考價值的文章主要介紹了Spark SQL優(yōu)化:NOT IN子查詢優(yōu)化解決。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

文章最前: 我是Octopus,這個名字來源于我的中文名--章魚;我熱愛編程、熱愛算法、熱愛開源。所有源碼在我的個人github?;這博客是記錄我學(xué)習(xí)的點點滴滴,如果您對 Python、Java、AI、算法有興趣,可以關(guān)注我的動態(tài),一起學(xué)習(xí),共同進步。

?相關(guān)文章:

  1. LEFT ANTI JOIN的使用

  2. Spark SQL優(yōu)化:NOT IN子查詢優(yōu)化解決

  3. hivesql-dayofweek 函數(shù)

  4. percentile_approx 聚合函數(shù)


背景

有如下的數(shù)據(jù)查詢場景。

SELECT  a
       ,b
       ,c
       ,d
       ,e
       ,f
FROM xxx.BBBB
WHERE dt = '${zdt.addDay(0).format('yyyy-MM-dd')}' 
AND predict_type  
not IN 
( 
   SELECT 
		distinct a 
   FROM 
   xxx.AAAAA
   WHERE dt = '${zdt.addDay(0).format('yyyy-MM-dd')}' 
)

分析

通過查看SQL語句的執(zhí)行計劃基本就可以判斷性能瓶頸所在。

  1. | == Physical Plan ==

  2. BroadcastNestedLoopJoin BuildRight,

Spark?SQL的優(yōu)化器最終將SQL優(yōu)化為了一個BroadcastNestedLoopJoin。

實際上就是在對JOIN兩側(cè)的數(shù)據(jù)做笛卡爾積運算。時間復(fù)雜度為O(),過濾前的結(jié)果集行數(shù)達到了萬億級別。

優(yōu)化方法

嘗試將NOT IN子查詢改寫成了LEFT JOIN形式

SELECT  a.*
FROM
(
	SELECT  a
	       ,b
	       ,c
	       ,d
	       ,e
	       ,f
	FROM xxx.BBBB
	WHERE dt = '${zdt.addDay(0).format('yyyy-MM-dd')}'
) a
LEFT JOIN
(
	SELECT  c
	FROM xxx.AAAA
	WHERE dt = '${zdt.addDay(0).format('yyyy-MM-dd')}' 
) b
ON a.c = b.c 
WHERE b.c is null

執(zhí)行計劃如下:

  1. Filter is null(#391L)

  2. +- SortMergeJoin

可以看到,JOIN方式變成了SortMergeJoin。

SortMergeJoin的原理是對JOIN兩側(cè)的數(shù)據(jù)排序后在做歸并。

不妨假設(shè):

排序的時間復(fù)雜度為O(nlogn)。
則SortMergeJoin整體的時間復(fù)雜度為O(n + nlogn),依然是百萬級數(shù)據(jù)量的過濾計算。

在數(shù)據(jù)庫查詢優(yōu)化中,"Broadcast Nested Loop Join" 和 "Sort Merge Join" 是兩種不同的關(guān)聯(lián)操作算法。

Broadcast Nested Loop Join:
在這種連接算法中,一張表被廣播到其他所有的節(jié)點上,然后與每個節(jié)點上的本地數(shù)據(jù)進行嵌套循環(huán)連接。這通常適用于一個小表和一個大表的連接,其中小表的數(shù)據(jù)可以很容易地廣播到所有節(jié)點上。

優(yōu)勢:
1. 適用于小表連接
:?當一個表很小而另一個表很大時,廣播小表可以減少網(wǎng)絡(luò)傳輸和數(shù)據(jù)傳輸開銷。
2. 簡單性:?實現(xiàn)相對簡單,不需要進行大規(guī)模數(shù)據(jù)排序。
3. 內(nèi)存友好:?不需要大量的內(nèi)存,因為每次只處理小表的一行。

Sort Merge Join:
這是一種更加通用的連接算法,它不涉及表的廣播,而是將連接的列進行排序,然后按照排序結(jié)果進行逐對比較,從而執(zhí)行連接操作。

優(yōu)勢:
1. 適用于大表連接
:當兩個表的大小都比較大時,Sort Merge Join 可以更好地處理連接操作,因為不需要將整個表廣播到各個節(jié)點。
2. 高效的順序訪問:由于涉及數(shù)據(jù)的排序,Sort Merge Join 可以更好地利用磁盤預(yù)讀,提高磁盤數(shù)據(jù)訪問效率。
3. 穩(wěn)定性:對于不同數(shù)據(jù)分布的情況,Sort Merge Join 的性能通常比 Broadcast Nested Loop Join 更穩(wěn)定。

所以,Broadcast Nested Loop Join 適用于小表和大表之間的連接,而 Sort Merge Join 則更適合連接兩個較大的表。但請注意,具體的性能取決于數(shù)據(jù)分布、硬件配置和數(shù)據(jù)庫管理系統(tǒng)的優(yōu)化能力。在實際情況中,優(yōu)化器可能會根據(jù)統(tǒng)計信息和其他因素來選擇最適合的連接算法。文章來源地址http://www.zghlxwxcb.cn/news/detail-754801.html

到了這里,關(guān)于Spark SQL優(yōu)化:NOT IN子查詢優(yōu)化解決的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • sql server 多行數(shù)據(jù)合并一行顯示

    在 SQL Server 中,可以使用 STUFF 和 FOR XML PATH 進行多行合并成一行。例如,假設(shè)有一個表名為 orders ,其中包含訂單號和產(chǎn)品名稱: order_id product_name 1 Product A 1 Product B 2 Product C 2 Product D 以下查詢將在 order_id 列上分組,將產(chǎn)品名稱合并成一行: 結(jié)果如下所示: order_id products 1

    2024年02月03日
    瀏覽(21)
  • 支付寶2023年收單外包服務(wù)機構(gòu)評級啟動,截止11月15日

    支付寶2023年收單外包服務(wù)機構(gòu)評級啟動,截止11月15日

    9 月22日消息,支付寶近日發(fā)布公告稱,已啟動2023年收單外包服務(wù)機構(gòu)評級工作。支付寶表示,收單外包服務(wù)機構(gòu)評級工作是金融監(jiān)管部門規(guī)范引導(dǎo)收單外包服務(wù)市場的重要舉措,其結(jié)果將會向社會公示,直接關(guān)系到外包機構(gòu)的業(yè)務(wù)開展,每個外包機構(gòu)都應(yīng)配合完成評級工作

    2024年02月07日
    瀏覽(28)
  • 常見類型的yaml文件如何編寫?--kind: Deployment

    Deployment 資源是 Kubernetes 重要的組成部分之一,通過指定 Deployment 中的 Pod 模板和副本數(shù)量,Kubernetes 可以自動地創(chuàng)建并管理一組具有相同配置的 Pod,這樣即使某些 Pod 發(fā)生故障或需要升級,也可以輕松地進行控制和管理。 因此,當我們使用? kind: Deployment ?時,YAML 文件中應(yīng)該

    2024年01月24日
    瀏覽(19)
  • 繼續(xù)探索Roop(單張圖視頻換臉)的各方面:比如喜聞樂見的“加速”

    繼續(xù)探索Roop(單張圖視頻換臉)的各方面:比如喜聞樂見的“加速”

    前兩天寫了??《簡單介紹Roop(類似SimSwap)單張圖視頻換臉的項目》 ,介紹了基本安裝使用。 之后這個項目飛快的更新著,減少了很多問題更加實用了,所以準備多說幾句。 官方:??地址。 之前只覺得它很方便用,選一張圖,選一個視頻,點擊開始。 后來發(fā)現(xiàn)這個項目更

    2024年02月10日
    瀏覽(23)
  • 【HTML+CSS+JS】登錄注冊頁面大合集

    【HTML+CSS+JS】登錄注冊頁面大合集

    學(xué)JS也學(xué)了一段時間,正巧碰上了人工智能要調(diào)用人臉識別接口進行真人人臉識別,于是便 萌生了用人臉來進行注冊和登錄的想法 ,這樣的話就需要開發(fā)一個登錄注冊頁面,然后用JS綁定注冊事件調(diào)用人臉識別接口進行登錄注冊 飯要一口一口吃,路要一步一步走,于是便在開

    2024年02月09日
    瀏覽(45)
  • Windows11+Opencv+Clion編譯源碼

    Windows11+Opencv+Clion編譯源碼

    參考:https://www.robotsfan.com/posts/69395e08.html 注意事項 編譯過程中使用的軟件,開源碼等所有工具的安裝路徑一定不要有中文和空格。 cmake過程會下載一些文件,如果是局域網(wǎng)的話可能下載不下來,可以事先下載好拷貝到相應(yīng)目錄。 OpenCV默認會編譯很多功能,有些功能需要先自

    2024年02月14日
    瀏覽(46)
  • 計算機視覺——手機目標檢測數(shù)據(jù)集

    計算機視覺——手機目標檢測數(shù)據(jù)集

    這是一個手機目標檢測的數(shù)據(jù)集,數(shù)據(jù)集的標注工具是labelimg,數(shù)據(jù)格式是voc格式,要訓(xùn)練yolo模型的話,可以使用腳本改成txt格式,數(shù)據(jù)集標注了手機,標簽名:telephone,數(shù)據(jù)集總共有1960張,有一部分是直實數(shù)據(jù),有一部分是是真實數(shù)據(jù)。 數(shù)據(jù)集地址:https://download.csdn.net/dow

    2024年04月15日
    瀏覽(26)
  • 學(xué)會使用Java Web實現(xiàn):用戶登錄功能(JSP+Servlet方式)

    學(xué)會使用Java Web實現(xiàn):用戶登錄功能(JSP+Servlet方式)

    登錄頁面 login.jsp ,輸入用戶名和密碼后,跳轉(zhuǎn)到登錄處理程序 LoginServlet 進行業(yè)務(wù)邏輯處理,登錄成功,跳轉(zhuǎn)到登錄成功頁面 success.jsp ,否則跳轉(zhuǎn)到登錄失敗頁面 failure.jsp 。 創(chuàng)建 Java Enterprise 項目,添加 Web Application 功能 設(shè)置項目名與保存位置 單擊【Finish】按鈕 在項目結(jié)

    2024年02月11日
    瀏覽(30)
  • Windows本地搭建Emby媒體庫服務(wù)器并實現(xiàn)遠程訪問「內(nèi)網(wǎng)穿透」

    Windows本地搭建Emby媒體庫服務(wù)器并實現(xiàn)遠程訪問「內(nèi)網(wǎng)穿透」

    在現(xiàn)代五花八門的網(wǎng)絡(luò)應(yīng)用場景中,觀看視頻絕對是主力應(yīng)用場景之一,加上移動網(wǎng)絡(luò)技術(shù)的發(fā)展,隨時隨地看視頻已經(jīng)成為基本需求。不過,隨著資本向視頻應(yīng)用的集中,想要看視頻就必須先充會員,這讓筆者很是郁悶,于是產(chǎn)生了自建影音云盤的想法,期間也嘗試了多種

    2024年02月05日
    瀏覽(24)
  • 華為OD機試-垃圾短信識別-2022Q4 A卷-Py/Java/JS

    大眾對垃圾短信深惡痛絕,希望能對垃圾短信發(fā)送者進行識別,為此,很多軟件增加了垃圾短信的識別機制。經(jīng)分析,發(fā)現(xiàn)正常用戶的短信通常具備交互性,而垃圾短信往往都是大量單向的短信,按照如下規(guī)則進行垃圾短信識別: 本題中,發(fā)送者A符合以下條件之一的,則認為

    2023年04月09日
    瀏覽(21)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包