面試加分秘籍:校招數據傾斜場景下的SQL優化方案

校招面試經常會問大家有沒有過調優的經驗,相信大家的回答基本都是往數據傾斜和小文件問題這兩方面回答,對于數據傾斜相信大部分同學對熱key打散或null值引發的傾斜已經非常熟悉,但這些內容面試官也是聽膩了,希望大家在面試時候講一些高大尚的案例,在描述的時候一定要有背景,有解決方案,最后結果,畢竟數據傾斜不會無故產生,一定是有業務背景的,這里給大家分享一種數據傾斜優化案例。

圖片

1.Uid和oaid之間的轉化

在用增的拉新拉回業務中,經常會用到oaid來識別具體的設備是不是公司用戶,所以我們需要將uid→oaid,需求目的:找到當日拉新的uid對應的oaid映射關系

代碼如下:

  • 1.從id mapping表中找出uid→oaid的映射關系;

  • 2.根據最后一次活躍時間對uid→oaid映射關系去重;

  • 3.將算法提供的uid人群圈選出對應的oaid。

原來的sql

selectt1.user_id,oaid_md5
from(selectL.uid user_id,md5(L.oaid) oaid_md5from(selectdistinct uid,oaidfrom(selectuid,oaid,row_number() over (partition by oaidorder bycast(last_active_timestamp as bigint) desc) as rnfromidmapping as GwhereG.p_date =?'20250324'and G.left_type =?'USER_ID'and G.right_type =?'OAID') ttwherett.rn = 1) as Lleft join (selectidfromzuobishebei -- 作弊設備wherep_date =?'{{ds_nodash}}'and supplier =?'cheat') as P on (md5(L.oaid) = P.id)whereP.id is null) t2join (SELECTuser_idFROMlist_ground_truthWHEREp_date =?'20250324') t1 on t1.user_id = t2.user_id

粗略一看,符合正常計算流程和順序,但這段sql出現了明顯的數據傾斜。

圖片

經過排查代碼中有兩塊可能引起傾斜,一個是join,一個row number,先查詢一下uid→oaid映射情況,發現部分的uid映射過10億多的oaid,導致在去重的時候發生了數據傾斜。

圖片

解決方案

  • 1.使用過濾條件和分組操作減少數據量;

  • 2.通過調整連接順序和提前應用過濾條件,減少了中間數據量;

  • 3.如果傾斜仍然存在,考慮對傾斜字段進行分區或使用 broadcast join 來進一步優化。

優化后:

SELECTuser_id,md5(paid) AS oaid
FROM(SELECTuser_id,paid,ROW_NUMBER() OVER (PARTITION BY user_idORDER BYCAST(last_active_timestamp AS BIGINT) DESC) AS rnFROM(SELECTt1.user_id,t2.paid,t2.last_active_timestampFROM(SELECTuser_idFROMlist_ground_truthWHEREp_date =?'20250324') t1JOIN (SELECTuid,oaid,G.last_active_timestampFROMidmappingGWHEREG.p_date =?'20250324'AND G.left_type =?'USER_ID'AND G.right_type = ‘ OAID ’GROUP BYG.left_value,G.right_value,G.last_active_timestamp) t2 ON t1.user_id = t2.uid) t3) t1
WHERErn = 1

原始腳本和優化后的腳本在邏輯上保持一致,但重點在于先jion較小的表(idmapping和 list_ground_truth),在進行row number,這樣可以在join時先走map join同時減少row number執行的數據量。

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

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

相關文章

Elasticsearch索引機制與Lucene段合并策略深度解析

引言 在現代分布式搜索引擎Elasticsearch中,文檔的索引、更新和刪除操作不僅是用戶交互的核心入口,更是底層存儲架構設計的關鍵挑戰。本文圍繞以下核心鏈路展開: 文檔生命周期管理:從客戶端請求路由到分片定位,從內存…

git提交更改

第一步:添加改動 git add . 第二步:提交改動 git commit -m “替換了 SerialPort 庫文件” 第三步:推送到遠程 git push 為什么git 的UI界面做的遠不如SVN

WPF的基礎控件:布局控件(StackPanel DockPanel)

布局控件(StackPanel & DockPanel) 1 StackPanel的Orientation屬性2 DockPanel的LastChildFill3 嵌套布局示例4 性能優化建議5 常見問題排查 在WPF開發中,布局控件是構建用戶界面的基石。StackPanel和DockPanel作為兩種最基礎的布局容器&…

互聯網大廠Java求職面試:AI大模型推理服務性能優化與向量數據庫分布式檢索

互聯網大廠Java求職面試:AI大模型推理服務性能優化與向量數據庫分布式檢索 面試現場:技術總監的連環追問 技術總監:(翻看著簡歷)鄭薪苦,你在上一家公司參與過LLM推理服務的性能優化項目?說說你…

如何解決網站服務器的異常問題?

當網站服務器出現異常情況,導致用戶無法正常訪問網頁信息的時候,該如何解決這一問題呢?小編下面就帶領大家共同探討一下這一問題。 企業在面對網站服務器異常時,首先要對服務器硬件設備進行詳細的檢查,可以使用硬盤檢測…

Day 35

模型可視化與推理 知識點回顧: 三種不同的模型可視化方法:推薦torchinfo打印summary權重分布可視化 進度條功能:手動和自動寫法,讓打印結果更加美觀 推理的寫法:評估模式 模型結構可視化 理解一個深度學習網絡最重要的…

[yolov11改進系列]基于yolov11引入自注意力與卷積混合模塊ACmix提高FPS+檢測效率python源碼+訓練源碼

[ACmix的框架原理] 1.1 ACMix的基本原理 ACmix是一種混合模型,結合了自注意力機制和卷積運算的優勢。它的核心思想是,傳統卷積操作和自注意力模塊的大部分計算都可以通過1x1的卷積來實現。ACmix首先使用1x1卷積對輸入特征圖進行投影,生成一組…

[DS]使用 Python 庫中自帶的數據集來實現上述 50 個數據分析和數據可視化程序的示例代碼

使用 Python 庫中自帶的數據集來實現上述 50 個數據分析和數據可視化程序的示例代碼 摘要:由于 sample_data.csv 是一個占位符文件,用于代表任意數據集,我將使用 Python 庫中自帶的數據集來實現上述 50 個數據分析和數據可視化程序的示例代碼…

【Python 中 lambda、map、filter 和 reduce】詳細功能介紹及用法總結

以下是 Python 中 lambda、map、filter 和 reduce 的詳細功能介紹及用法總結,涵蓋基礎語法、高頻場景和示例代碼。 一、lambda 匿名函數 功能 用于快速定義一次性使用的匿名函數。不需要顯式命名,適合簡化小規模邏輯。 語法 lambda 參數1, 參數2, ..…

貪心算法——分數背包問題

一、背景介紹 給定𝑛個物品,第𝑖個物品的重量為𝑤𝑔𝑡[𝑖?1]、價值為𝑣𝑎𝑙[𝑖?1],和一個容量為𝑐𝑎&#…

《軟件工程》第 5 章 - 需求分析模型的表示

目錄 5.1需求分析與驗證 5.1.1 順序圖 5.1.2 通信圖 5.1.3 狀態圖 5.1.4 擴充機制 5.2 需求分析的過程模型 5.3 需求優先級分析 5.3.1 確定需求項優先級 5.3.2 排定用例分析的優先順序 5.4 用例分析 5.4.1 精化領域概念模型 5.4.2 設置分析類 5.4.3 構思分析類之間…

基于MATLAB的大規模MIMO信道仿真

1. 系統模型與參數設置 以下是一個單小區大規模MIMO系統的參數配置示例,適用于多發多收和單發單收場景。 % 參數配置 params.N_cell 1; % 小區數量(單小區仿真) params.cell_radius 500; % 小區半徑(米&#xff09…

想查看或修改 MinIO 桶的匿名訪問權限(public/private/custom)

在 Ubuntu 下,如果你想查看或修改 MinIO 桶的匿名訪問權限(public/private/custom),需要使用 mc anonymous 命令而不是 mc policy。以下是詳細操作指南: 1. 查看當前匿名訪問權限 mc anonymous get minio/test輸出示例…

HarmonyOS:相機選擇器

一、概述 相機選擇器提供相機拍照與錄制的能力。應用可選擇媒體類型實現拍照和錄制的功能。調用此類接口時,應用必須在界面UIAbility中調用,否則無法啟動cameraPicker應用。 說明 本模塊首批接口從API version 11開始支持。后續版本的新增接口&#xff0…

牛客AI簡歷篩選:提升招聘效率的智能解決方案

在競爭激烈的人才市場中,企業HR每天需處理海量簡歷,面臨篩選耗時長、標準不統一、誤判率高等痛點。牛客網推出的AI簡歷篩選工具,以“20分鐘處理1000份簡歷、準確率媲美真人HR”的高效表現,成為企業招聘的智能化利器。本文將深度解…

白楊SEO:做AI搜索優化的DeepSeek、豆包、Kimi、百度文心一言、騰訊元寶、通義、智譜、天工等AI生成內容信息采集主要來自哪?占比是多少?

大家好,我是白楊SEO,專注SEO十年以上,全網SEO流量實戰派,AI搜索優化研究者。 在開始寫之前,先說個抱歉。 上周在上海客戶以及線下聚會AI搜索優化分享說各大AI模型的聯網搜索是關閉的,最開始上來確實是的。…

QML與C++交互2

在QML與C的交互中,主要有兩種方式:在C中調用QML的方法和在QML中調用C的方法。以下是具體的實現方法。 在C中調用QML的方法 首先,我們需要在QML文件中定義一個函數,然后在C代碼中調用它。 示例 //QML main.qml文件 import QtQu…

OpenGL Chan視頻學習-8 How I Deal with Shaders in OpenGL

bilibili視頻鏈接: 【最好的OpenGL教程之一】https://www.bilibili.com/video/BV1MJ411u7Bc?p5&vd_source44b77bde056381262ee55e448b9b1973 函數網站: docs.gl 說明: 1.之后就不再整理具體函數了,網站直接翻譯會更直觀也…

動態防御新紀元:AI如何重構DDoS攻防成本格局

1. 傳統高防IP的靜態瓶頸與成本困境 傳統高防IP依賴預定義規則庫,面對SYN Flood、CC攻擊等威脅時,常因規則更新滯后導致誤封合法流量。例如,某電商平臺曾因靜態閾值過濾誤封20%的訂單接口流量,直接影響營收。以下代碼模擬傳統方案…

如何實現高性能超低延遲的RTSP或RTMP播放器

隨著直播行業的快速發展,RTSP和RTMP協議成為了廣泛使用的流媒體傳輸協議,尤其是在實時視頻直播領域,如何構建一個高性能超低延遲的直播播放器,已經成為了決定直播平臺成功與否的關鍵因素之一。作為音視頻直播SDK技術老兵&#xff…