`
JerryWang_SAP
  • 浏览: 1050439 次
  • 性别: Icon_minigender_1
  • 来自: 成都
文章分类
社区版块
存档分类
最新评论

利用ABAP 740的新关键字REDUCE完成一个实际工作任务

阅读更多

ABAP 740从2013年发布至今已经过去很长的时间了,下面这张图来自SAP社区博客:

ABAP News for Release 7.40 – What is ABAP 7.40?

图中的ABAP 8.0, 即现在的SAP Cloud for Customer和Business By Design后台使用的ABAP版本NGAP - Next Generation ABAP Platform,里面存在不少只在8.0版本可用的关键字和语言特性。

因为C4C和BYD的ABAP后台,客户和partners们是无法访问的,所以咱们回到ABAP 740这个版本。从该版本开始,ABAP支持了很多新的关键字和语法特性,“看起来有点不像传统的ABAP编程语言了”。

本文咱们就来看一个具体的例子: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代码均可从我的SAP博客获得:

A real case to use REDUCE to finish a task in daily work

感谢阅读。

要获取更多Jerry的原创文章,请关注公众号"汪子熙"。

 

0
0
分享到:
评论

相关推荐

    abap关键字的查询帮助

    本文将深入探讨ABAP的关键字查询帮助,为初学者提供一个清晰的入门指南。 首先,理解ABAP的基本语法是至关重要的。ABAP的语法结构与许多其他编程语言相似,例如C或PASCAL,但它具有自己独特的特性。在ABAP中,...

    ABAP 740 新语法.pdf

    在SAP软件的各个版本中,ABAP7.40是一个重要的里程碑,因为它带来了一系列新的语法和特性,使开发者能够更加高效地编写代码,同时提升了程序的性能和可读性。以下是ABAP7.40新语法的一些主要知识点: 1. 内联声明...

    abap破解访问关键字

    ABAP 访问关键字破解 ABAP 访问关键字破解是指在 SAP 系统中,通过修改权限判断文件 LSKEYF00 中的判断参数的值,以达到绕过权限判断的目的。下面是破解步骤的详细分析: 一、去掉权限判断文件 LSKEYF00 的只读...

    ABAP开发账号访问关键字(ACCESS_KEY)获取方法

    在进行ABAP开发的过程中,为了确保系统的安全性与稳定性,SAP系统通常会要求开发者拥有一个有效的访问关键字(ACCESS_KEY),也被称为开发账号访问关键字。本文将详细介绍如何获取这一重要的访问关键字,包括其背景...

    ABAP开发账号访问关键字(ACCESSKEY)获取方法[收集].pdf

    ABAP开发账号访问关键字(ACCESS KEY)获取方法 ABAP是SAP公司开发的一种...因此,在ABAP开发中,获取访问关键字是一个非常重要的步骤,开发者需要掌握获取访问关键字的方法,以便快速地创建ABAP程序,提高开发效率。

    ABAP开发账号访问关键字(ACCESSKEY)获取方法定义.pdf

    ABAP开发账号访问关键字(ACCESSKEY)获取方法定义.pdf

    abap4开发宝典中文版

    ABAP/4开发宝典中文版是关于ABAP/4编程语言的手册。其目的在于: ...· 关于如何提高ABAP/4任务性能的技巧,请从“ABAP/4开发工作台”上选择事务SE30或“测试-&gt;运行时间分析”,然后单击“提示和技巧”。

    ABAP/4开发宝典中文版

    ABAP/4开发宝典中文版是关于ABAP/4编程语言的手册。其目的在于: ...· 关于如何提高ABAP/4任务性能的技巧,请从“ABAP/4开发工作台”上选择事务SE30或“测试-&gt;运行时间分析”,然后单击“提示和技巧”。

    ABAP∕4 用户中文指南

    ABAP/4用户指南是关于ABAP/4编程语言的手册。其目的在于: ...· 关于如何提高ABAP/4任务性能的技巧,请从“ABAP/4开发工作台”上选择事务SE30或“测试-&gt;运行时间分析”,然后单击“提示和技巧”。

    ABAP∕4 开发宝典中文版

    ABAP/4开发宝典中文版是关于ABAP/4编程语言的手册。其目的在于: ...· 关于如何提高ABAP/4任务性能的技巧,请从“ABAP/4开发工作台”上选择事务SE30或“测试-&gt;运行时间分析”,然后单击“提示和技巧”。

    abap7.4 新特性

    - **TechEd 2013 CD261**:这是一场关于如何利用 ABAP 7.40 编写高质量代码的技术讲座,对于深入理解新特性非常有帮助。 #### 结语 随着 ABAP 7.40 的发布,开发者迎来了许多激动人心的新特性。这些特性不仅提升了...

    ABAP 工作流配置示例

    本文将基于给定的“ABAP 工作流配置示例”,详细介绍如何在SAP ECC6环境下配置一个简单的工作流,实现当物料创建时触发工作流并让用户决定是否查看该物料的功能。 #### 二、准备工作 在进行工作流配置之前,确保...

    ABAP中文帮助 用户指南 PDF

    ABAP/4用户指南是关于ABAP/4编程语言的手册。其目的在于: 向新的ABAP/4程序员... 关于如何提高ABAP/4任务性能的技巧,请从“ABAP/4开发工作台”上选择事务SE30或“测试-&gt;运行时间分析”,然后 单击“提示和技巧”。

    非常全的 S4 ABAP 新语法(适用S4不适用ECC等老系统)

    2. **FIELD-SYMBOL**: FIELD-SYMBOLs是ABAP中的一个强大工具,它们代表其他变量或数据结构的引用,而不是实际存储数据。在S4中,FIELD-SYMBOLs可以用于处理动态数据或在不直接知道数据类型的场景下,如:`FIELD-...

    BC ABAP/4 用户指南

    关于如何 提高 ABAP/4 任务性能的 技巧,请从 “ABAP/4 开发工作台 ”上选择事 务 SE30 或“测试 -&gt; 运行时间分 析”,然后 单击“提示 和技巧”。 &lt;br&gt;Neither this documentation nor any part of it may be ...

    ABAP 通过程序中的关键字查找程序名和首次出现的行数

    ABAP程序 通过程序中的关键字查找程序名和首次出现的行数,双击程序名进入程序

    abap內表 工作区 的定义和区别

    1. **直接定义**:使用`BEGIN OF...END OF`关键字,可以定义一个包含多个字段的工作区。 ```abap DATA: BEGIN OF wa_ekbe, matnr TYPE mara-matnr, makt TYPEmakt-maktx, END OF wa_ekbe. ``` 2. **参照表或...

    ABAP中文帮助word版本

    为了提高ABAP/4任务的性能,用户可以从“ABAP/4开发工作台”选择事务SE30或“测试-&gt;运行时间分析”,并点击“提示和技巧”。 #### 五、SAP在线帮助约定与语法约定 SAP在线帮助中采用了特定的约定来区分屏幕文本、...

    ABAP 7.40 新特性及其改进

    主要内容涵盖了数据声明、内表操作、VALUE 关键字、FOR 运算符、字符串函数、字符串处理、CONV 和 REDUCE 运算符、前导零的添加与删除、Filter 运算符、分组统计、SQL 语句优化等方面的改进。 适合人群:具有ABAP ...

Global site tag (gtag.js) - Google Analytics