這篇文章主要介紹“怎么用ABAP的新關(guān)鍵字REDUCE完成實際工作任務(wù)”,在日常操作中,相信很多人在怎么用ABAP的新關(guān)鍵字REDUCE完成實際工作任務(wù)問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”怎么用ABAP的新關(guān)鍵字REDUCE完成實際工作任務(wù)”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!
創(chuàng)新互聯(lián)專注于交口企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站,商城網(wǎng)站制作。交口網(wǎng)站建設(shè)公司,為交口等地區(qū)提供建站服務(wù)。全流程按需策劃,專業(yè)設(shè)計,全程項目跟蹤,創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務(wù)看一個具體的例子:ABAP 740里的一個新關(guān)鍵字REDUCE. 這個關(guān)鍵字的作用和在大規(guī)模數(shù)據(jù)集并行計算領(lǐng)域里廣泛使用的"Map-Reduce"編程模型中的Reduce操作類似,可以按照字面意思理解為“歸約”。
下圖是Map Reduce框架的工作步驟,統(tǒng)計一個海量輸入數(shù)據(jù)集(比如大于1TB)中的單詞出現(xiàn)次數(shù)。作為ABAP開發(fā)人員,我們沒必要了解Map Reduce框架的每個執(zhí)行步驟,只需緊盯框架的輸入,以及執(zhí)行結(jié)果就行了。
回到Jerry接受的實際工作任務(wù)。德國同事讓Jerry在某個CRM測試系統(tǒng)上做個統(tǒng)計,列出在數(shù)據(jù)庫表CRM_JSTO里,OBTYP(Object Type)和STSMA(Status Schema)這兩列擁有相同值的內(nèi)表行的個數(shù)。大家可以把"OBTYP和STSMA兩列具有相同值的內(nèi)表行"類比成上圖中重復(fù)出現(xiàn)的單詞。
下圖是CRM_JSTO的部分行:
下圖是Jerry完成的任務(wù): 測試系統(tǒng)上內(nèi)表一共有55多萬行,其中有90279行,只維護(hù)了OBTYP為TGP,而沒有維護(hù)STSMA. 排名第二的是COH和CRMLEAD的組合,出現(xiàn)了78722次。
稍稍做過一些ABAP開發(fā)的朋友們,一定會立即寫出下面的代碼:
利用SELECT COUNT直接在數(shù)據(jù)庫層完成統(tǒng)計工作。這也是SAP推薦的做法,所謂Code pusudown準(zhǔn)則,即能放到HANA數(shù)據(jù)庫層面進(jìn)行的操作,就盡量放進(jìn)去,以充分利用HANA強大的計算能力。在數(shù)據(jù)庫能夠完成計算邏輯的前提下,盡量避免把計算邏輯放到Netweaver ABAP應(yīng)用層去做。
不過,我們也需要注意到這種方式的局限性。Jerry之前曾經(jīng)引用過SAP CTO的名言:
There is no future with ABAP alone
There is no future in SAP without ABAP
未來的ABAP會走向開放,互聯(lián)的道路。回到這個需求本身,假設(shè)待檢索的輸入數(shù)據(jù)不是從ABAP數(shù)據(jù)庫表中來,而是來自HTTP請求,或者第三方系統(tǒng)發(fā)過來的IDOC,此時我們無法再使用OPEN SQL本身的SELECT COUNT操作,而只能在ABAP應(yīng)用層解決這個問題。
所謂技多不壓身,Jerry這里介紹兩種用ABAP完成這個需求的方式。
第一種方式比較傳統(tǒng),實現(xiàn)在方法get_result_traditional_way里:
ABAP的LOOP AT GROUP BY這個關(guān)鍵字組合簡直就像是為這個需求量身定做一般:給GROUP BY指定obtyp和stsma這兩列,然后LOOP AT會自動將輸入內(nèi)表的行記錄根據(jù)這兩列的值進(jìn)行分組,每組行記錄的個數(shù)通過關(guān)鍵字GROUP SIZE自動計算出來,每組各自的obtyp和stsma的值,以及組內(nèi)行記錄的條目數(shù),存儲在REFERENCE INTO指定的變量group_ref里。ABAP顧問需要做的事情,只是簡單地把這些結(jié)果存儲到輸出內(nèi)表即可。
第二種辦法,就是本文標(biāo)題所述,使用ABAP 740新的REDUCE關(guān)鍵字:
上面的代碼乍一看可能覺得有點晦澀,但仔細(xì)閱讀后發(fā)現(xiàn)這種方式本質(zhì)上也采用了和方法一LOOP AT GROUP BY同樣的分組策略——根據(jù)obtyp和stsma分組,這些子組通過變量
總結(jié)和比較一下這三種實現(xiàn)方式:當(dāng)待統(tǒng)計的數(shù)據(jù)源為ABAP數(shù)據(jù)庫表時,一定優(yōu)先選用OPEN SQL的方式,使計算邏輯在數(shù)據(jù)庫層完成,以獲得最佳的性能。
當(dāng)數(shù)據(jù)源并非ABAP數(shù)據(jù)庫表,而分組統(tǒng)計的需求為簡單的計數(shù)操作(COUNT)時, 優(yōu)先用LOOP AT ... GROUP BY ... GROUP SIZE,使得計數(shù)操作通過GROUP SIZE在ABAP kernel完成,以獲得較好的性能。
當(dāng)數(shù)據(jù)源并非ABAP數(shù)據(jù)庫表,而分組統(tǒng)計的需求為自定義的邏輯時,用本文介紹的第三種REDUCE解法,將自定義統(tǒng)計邏輯寫在第11行的NEXT關(guān)鍵字后。
這三種解法的性能依次遞減,不過適用的場合和靈活程度依次遞增。
LOOP AT ... GROUP BY ... GROUP SIZE,在Jerry的服務(wù)器上處理55萬條記錄,用了0.3秒,而REDUCE則需花費0.8秒。
到此,關(guān)于“怎么用ABAP的新關(guān)鍵字REDUCE完成實際工作任務(wù)”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>
網(wǎng)頁標(biāo)題:怎么用ABAP的新關(guān)鍵字REDUCE完成實際工作任務(wù)-創(chuàng)新互聯(lián)
文章位置:http://weahome.cn/article/jises.html