Technology Blogs by SAP
Learn how to extend and personalize SAP applications. Follow the SAP technology blog for insights into SAP BTP, ABAP, SAP Analytics Cloud, SAP HANA, and more.
cancel
Showing results for 
Search instead for 
Did you mean: 
Former Member

重要链接:http://scn.sap.com/docs/DOC-35518
ABAP on SCN: http://scn.sap.com/community/abap
ADT on SCN: http://scn.sap.com/community/abap/eclipse

当2011年HANA刚发布时,大家争先恐后讨论的,SAP努力澄清的,是BW会不会消失。后来当roadmap渐渐清晰时,觉得当时描绘的ERP on HANA简直遥不可及,而BW on HANA也只是谨慎地期待。可是到今天,suite on HANA(SoH)已经大概发布了有半年时间了,而且也已经GA了好几个月了。SAP描绘的one box可能真的会实现。既然business suite跑在HANA上了,以前用ABAP开发的首先要更新知识了。在前一篇blog中,我们安装了开发工具。这一篇,let’s get our hands dirty,开始做点东西出来吧。

如果仅仅是让OPEN-SQL支持HANA,我想SAP早就可以发布SoH了。但是要想体现HANA的价值,一定要有一些不一样的,新的东西出来,比如:

  • 通过ABAP DDIC访问HANA视图
  • 集成ABAP与HANA SQLScript
  • 针对HANA的特殊语句,特别优化

在探讨里程碑NetWeaver 7.4之前,我们先回顾一下在这之前ABAP与HANA是如何结合的。我们知道SAP通过DBI作为数据库访问的接口,为每一个数据库开发对应DBSL,抽象出OPEN-SQL作为数据库访问语句,然后通过DBSL转换成底层数据库特定的SQL方言。在NW 7.4之前,我们就有两种方式访问HANA,而且是以前SAP就提供的技术:

  • EXEC SQL
  • ADBC类

它们都是用底层数据库的SQL直接与DB通讯的方法。Thomas的blog里面有介绍这两种方法的代码写出来是什么样子。

虽然我们都无数次地听到过SAP介绍基于HANA的应用开发范例:将耗费资源的逻辑下沉到数据库,减少应用服务器与DB之间的数据传递,但是可能很少有人去实际体验。在这个第二篇入门博客里,我做一个实验,我们一起来体验一下suite on HANA以后到底带来什么样的UX。

我们假设数据库有一张表,其中有一个时间字段,可以代表订单的交货时间(这里的假设是都是未交付订单,时间都在未来),那么我要计算所有订单交货时间据今天一共有多少天。我搜索的数据集为100万条记录。

在传统的ABAP开发里,由于通用性的要求,OPEN-SQL并不提供什么办法能让我们将这种计算推向DB层面。所以逻辑大概是:

SELECT

计算时间差.

汇总.

ENDSELECT

或者

SELECT.

LOOP 内表

计算时间差

汇总时间

ENDLOOP.

这里我要用到ABAP in Eclipse的一个功能来展示运算时间,叫做ABAP profiling

119

选择我们要运行的程序以后,便开始搜集相关的trace。运行结束后,我们可以双击trace打开如下一个结果:

29

好吧,我的示例代码写的不足够好,因为我选择了SELECT ENDSLECT的方式,导致DB时间占据了主要。如果我采取先放到内表的方式,可能演示效果更好一些。

不过,这个结果并没有什么意外的,DB时间占去了几乎所有运行时间。不到11s的运行时间,可以忍受,但是考虑到如此简单地一个功能,可能就无法忍受了。

那么我们将逻辑推向HANA,利用HANA计算出时间差汇总数据(你可以用SQL语句也可以使用存储过程,up to you)。我们可以利用HANA的DAYS_BETWEEN和SUM直接算出汇总数据。Profiling的结果如下:

37

时间骤降到了1.68秒。如果再经过调优,时间会更短。

所以ABAP on HANA的开发是混合模式的,当我们考虑到开发效率和通用性的时候,使用OPEN-SQL,但是这只会利用到一小部分HANA的功能,比如你在OPEN-SQL里做聚合的时候;但是当遇到某些特殊场景要做性能优先考虑的时候,我们会混合ABAP和HANA的开发,短时间内相应结果,给用户一个最佳的体验。

后续的blog,要说说NW 7.4的比较酷的东西了,怎么更方便的从ABAP调用HANA对象。

1 Comment