您好,登錄后才能下訂單哦!
這篇文章主要介紹“怎么用ABAP的新關鍵字REDUCE完成實際工作任務”,在日常操作中,相信很多人在怎么用ABAP的新關鍵字REDUCE完成實際工作任務問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”怎么用ABAP的新關鍵字REDUCE完成實際工作任務”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
看一個具體的例子:ABAP 740里的一個新關鍵字REDUCE. 這個關鍵字的作用和在大規模數據集并行計算領域里廣泛使用的"Map-Reduce"編程模型中的Reduce操作類似,可以按照字面意思理解為“歸約”。
下圖是Map Reduce框架的工作步驟,統計一個海量輸入數據集(比如大于1TB)中的單詞出現次數。作為ABAP開發人員,我們沒必要了解Map Reduce框架的每個執行步驟,只需緊盯框架的輸入,以及執行結果就行了。
回到Jerry接受的實際工作任務。德國同事讓Jerry在某個CRM測試系統上做個統計,列出在數據庫表CRM_JSTO里,OBTYP(Object Type)和STSMA(Status Schema)這兩列擁有相同值的內表行的個數。大家可以把"OBTYP和STSMA兩列具有相同值的內表行"類比成上圖中重復出現的單詞。
下圖是CRM_JSTO的部分行:
下圖是Jerry完成的任務: 測試系統上內表一共有55多萬行,其中有90279行,只維護了OBTYP為TGP,而沒有維護STSMA. 排名第二的是COH和CRMLEAD的組合,出現了78722次。
稍稍做過一些ABAP開發的朋友們,一定會立即寫出下面的代碼:
利用SELECT COUNT直接在數據庫層完成統計工作。這也是SAP推薦的做法,所謂Code pusudown準則,即能放到HANA數據庫層面進行的操作,就盡量放進去,以充分利用HANA強大的計算能力。在數據庫能夠完成計算邏輯的前提下,盡量避免把計算邏輯放到Netweaver ABAP應用層去做。
不過,我們也需要注意到這種方式的局限性。Jerry之前曾經引用過SAP CTO的名言:
There is no future with ABAP alone
There is no future in SAP without ABAP
未來的ABAP會走向開放,互聯的道路。回到這個需求本身,假設待檢索的輸入數據不是從ABAP數據庫表中來,而是來自HTTP請求,或者第三方系統發過來的IDOC,此時我們無法再使用OPEN SQL本身的SELECT COUNT操作,而只能在ABAP應用層解決這個問題。
所謂技多不壓身,Jerry這里介紹兩種用ABAP完成這個需求的方式。
第一種方式比較傳統,實現在方法get_result_traditional_way里:
ABAP的LOOP AT GROUP BY這個關鍵字組合簡直就像是為這個需求量身定做一般:給GROUP BY指定obtyp和stsma這兩列,然后LOOP AT會自動將輸入內表的行記錄根據這兩列的值進行分組,每組行記錄的個數通過關鍵字GROUP SIZE自動計算出來,每組各自的obtyp和stsma的值,以及組內行記錄的條目數,存儲在REFERENCE INTO指定的變量group_ref里。ABAP顧問需要做的事情,只是簡單地把這些結果存儲到輸出內表即可。
第二種辦法,就是本文標題所述,使用ABAP 740新的REDUCE關鍵字:
上面的代碼乍一看可能覺得有點晦澀,但仔細閱讀后發現這種方式本質上也采用了和方法一LOOP AT GROUP BY同樣的分組策略——根據obtyp和stsma分組,這些子組通過變量<group_key>標識,然后通過第10行的REDUCE關鍵字,通過累加的方式,手動計算這個組的條目數——把一個大的輸入集根據GROUP BY指定的條件歸約成一個個規模更小的子集,然后分別針對子集進行計算——這就是REDUCE關鍵字通過字面含義傳遞給ABAP開發人員的處理思想。
總結和比較一下這三種實現方式:當待統計的數據源為ABAP數據庫表時,一定優先選用OPEN SQL的方式,使計算邏輯在數據庫層完成,以獲得最佳的性能。
當數據源并非ABAP數據庫表,而分組統計的需求為簡單的計數操作(COUNT)時, 優先用LOOP AT ... GROUP BY ... GROUP SIZE,使得計數操作通過GROUP SIZE在ABAP kernel完成,以獲得較好的性能。
當數據源并非ABAP數據庫表,而分組統計的需求為自定義的邏輯時,用本文介紹的第三種REDUCE解法,將自定義統計邏輯寫在第11行的NEXT關鍵字后。
這三種解法的性能依次遞減,不過適用的場合和靈活程度依次遞增。
LOOP AT ... GROUP BY ... GROUP SIZE,在Jerry的服務器上處理55萬條記錄,用了0.3秒,而REDUCE則需花費0.8秒。
到此,關于“怎么用ABAP的新關鍵字REDUCE完成實際工作任務”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。