中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么用ABAP的新關鍵字REDUCE完成實際工作任務

發布時間:2021-12-29 17:16:00 來源:億速云 閱讀:170 作者:iii 欄目:服務器

這篇文章主要介紹“怎么用ABAP的新關鍵字REDUCE完成實際工作任務”,在日常操作中,相信很多人在怎么用ABAP的新關鍵字REDUCE完成實際工作任務問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”怎么用ABAP的新關鍵字REDUCE完成實際工作任務”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

看一個具體的例子:ABAP 740里的一個新關鍵字REDUCE. 這個關鍵字的作用和在大規模數據集并行計算領域里廣泛使用的"Map-Reduce"編程模型中的Reduce操作類似,可以按照字面意思理解為“歸約”。

下圖是Map Reduce框架的工作步驟,統計一個海量輸入數據集(比如大于1TB)中的單詞出現次數。作為ABAP開發人員,我們沒必要了解Map Reduce框架的每個執行步驟,只需緊盯框架的輸入,以及執行結果就行了。

怎么用ABAP的新關鍵字REDUCE完成實際工作任務

回到Jerry接受的實際工作任務。德國同事讓Jerry在某個CRM測試系統上做個統計,列出在數據庫表CRM_JSTO里,OBTYP(Object Type)和STSMA(Status Schema)這兩列擁有相同值的內表行的個數。大家可以把"OBTYP和STSMA兩列具有相同值的內表行"類比成上圖中重復出現的單詞。

下圖是CRM_JSTO的部分行:

怎么用ABAP的新關鍵字REDUCE完成實際工作任務

下圖是Jerry完成的任務: 測試系統上內表一共有55多萬行,其中有90279行,只維護了OBTYP為TGP,而沒有維護STSMA. 排名第二的是COH和CRMLEAD的組合,出現了78722次。

怎么用ABAP的新關鍵字REDUCE完成實際工作任務

稍稍做過一些ABAP開發的朋友們,一定會立即寫出下面的代碼:

怎么用ABAP的新關鍵字REDUCE完成實際工作任務

利用SELECT COUNT直接在數據庫層完成統計工作。這也是SAP推薦的做法,所謂Code pusudown準則,即能放到HANA數據庫層面進行的操作,就盡量放進去,以充分利用HANA強大的計算能力。在數據庫能夠完成計算邏輯的前提下,盡量避免把計算邏輯放到Netweaver ABAP應用層去做。

怎么用ABAP的新關鍵字REDUCE完成實際工作任務

不過,我們也需要注意到這種方式的局限性。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的新關鍵字REDUCE完成實際工作任務

ABAP的LOOP AT GROUP BY這個關鍵字組合簡直就像是為這個需求量身定做一般:給GROUP BY指定obtyp和stsma這兩列,然后LOOP AT會自動將輸入內表的行記錄根據這兩列的值進行分組,每組行記錄的個數通過關鍵字GROUP SIZE自動計算出來,每組各自的obtyp和stsma的值,以及組內行記錄的條目數,存儲在REFERENCE INTO指定的變量group_ref里。ABAP顧問需要做的事情,只是簡單地把這些結果存儲到輸出內表即可。

怎么用ABAP的新關鍵字REDUCE完成實際工作任務

第二種辦法,就是本文標題所述,使用ABAP 740新的REDUCE關鍵字:

怎么用ABAP的新關鍵字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完成實際工作任務

到此,關于“怎么用ABAP的新關鍵字REDUCE完成實際工作任務”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

两当县| 临沂市| 同仁县| 湖口县| 南岸区| 阿克陶县| 平罗县| 迭部县| 百色市| 沂源县| 大宁县| 蒲江县| 兰考县| 夹江县| 扎赉特旗| 博白县| 吉木乃县| 宁陵县| 简阳市| 额敏县| 墨江| 利津县| 平乐县| 拉孜县| 玛纳斯县| 阿克陶县| 科尔| 澄江县| 石阡县| 翁源县| 武城县| 大安市| 福鼎市| 屏边| 凌云县| 淮滨县| 涿州市| 旅游| 钦州市| 扶余县| 聂荣县|