報表查詢數據異常解決方法

  緣起

    今天早上一到公司,技術支持的小夥就說一個後臺報表,計算的任務完成率超過100%,有異常,客戶要用,比較急,要解決這個問題。

   

  解決過程

        自從接了上任的報表計算,這個就頭疼,沒辦法硬着頭皮查什麼原因,報表的SQL比較簡單,一個查:接受任務數表a, 一個查:完成任務數表b

        a和b表,都是直接計算的結果表。 

        第一步: 看看是否原始查詢報表的導致數據缺少,如join,left join登,去掉相關表的關聯,修改join如left join,看看數據是否有變化,

          修改完,數據還是沒變化,確認不是SQL關聯和join表的問題

        第二步: 單獨拿出執行的SQL,爲了取到合適的SQL,特意開了騰訊雲的雲審計,查詢後獲取完整的SQL,單獨查詢“”接收任務數“和“”完成任務數”,

         單獨查詢查出的數據和上面的顯示是一樣的,看計算的存儲過程,也複雜,找不到是存儲過程哪錯,怎麼知道計算數據是錯的。 怎麼處理?

         這就陷入的困境,不知道計算的數據哪個是錯的,可能2個多錯,可能其中只有一個錯的,怎麼排查?這時技術支持有提示新信息,感覺這個問題必須解決。

         弄了一陣子,沒有頭緒,感覺就煩,這個事情也沒什麼意思,都是多少年前的問題還遺留到現在出現,出現牴觸的心情。但是事情要解決!

         心靜了一下,分析了一下,2個數據到底是哪個出現問題,還是複雜的存儲過程計算邏輯有bug,先從哪裏入手? 

         這些數據,就這個完成任務數據大,是否可以先查這個任務完成數據,根據常識,先暫且認爲接收任務數是對的,先把完成任務完成數據排查清楚(計算清楚)

         接着就把計算完成任務數,計算SQL整理出來,使用最原始的SQL,查詢出結果,發現和計算的結果不一致,結果只有7600多,少於新任務數的7700多,更是少於計算的8400多的原來結果

         這樣確認了計算結果出現問題,就用原始的計算SQL,從新repalce into替換原來的老數據,查詢報表發現還是有問題,原來表中有2個日期(任務日期task_date,完成日期finish_date),我只通過finish_date寫入替換,歷史的數據task_date的確有些數據,但是這個都是完成歷史數據,和這個任務日期無關,查了一下,的確可以刪除掉,執行下面SQL清理垃圾數據OK 

delete from b where task_date>='2024-04-01' and task_date <= '2024-04-28' 

        執行後,報表的完成數據已經OK

    總結 

          1,   遇事情不要急躁和退卻,只會添加煩勞,對解決問題毫無幫助

          2,當不知道如何入手時,可以根據常識去判斷,從最容易出錯的地方入手,減少排查面

          3,使用了中間結果,可以直接用原始SQL數據查詢,跳過原始的複雜計算邏輯排查

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章