Suite on HANA[SoH]之ABAP直接调用HANA模型

阅读更多

在前一篇blog,我介绍了在NW7.4出现之前是如何用ABAP与HANA结合开发应用。虽然通过简单地对比我们已经看到了性能的巨大提升,但是,依然有一些问题:

 

  • 使用ADBC繁琐,麻烦
  • HANA特有的模型对象没办法天然地与ABAP结合

 

那么这篇blog里我要介绍NW 7.4新引入的一种DDIC对象,可以让我们像访问普通DDIC表/视图那样访问HANA的模型。

还是回到之前的那个简单地业务场景,计算距离交货日期的汇总天数。我们通过HANA特有的函数,利用ADBC写了SQL,这样我们已经大幅地缩减了执行时间,但是4~5倍的样子似乎并不像SAP说得那么厉害,而且ADBC写起来太麻烦了。

 

那么我们首先在HANA层面解决这个问题:

HANA叫做内存内计算,所以我们利用calculated attribute将距离交货日期作为一个calculated attribute创建出来。由于我的场景过于简单,只有一张表,所以不适用于analytic view或者calculation view,我们这里只要选用attribute view作为模型类型。

 

 

这样一来我们可以将open_days作为数据库表字段一样做SUM就可以得到我们想要的结果了。

那么下面我们就利用NW7.4的新的DDIC对象 external view建立一个ABAP到HANA模型之间的桥梁,把HANA模型变得像ABAP DDIC对象一样易于访问。

 

 

 

创建的过程直观且简单,只需要命名external view的名字以及连接的HANA view就可以了。需要强调的是,这个过程只能在eclipse的ABAP开发环境中进行,SAPGUI的ABAP编辑器并没有提供创建的功能。但是创建成功的对象在eclipse环境和SAPGUI SE11中都可以访问,在SAPGUI SE11中还可以浏览数据。

 

现在我们从ABAP里,利用OPEN-SQL像访问普通的DDIC对象一样获得结果吧。整个ABAP代码,与使用ADBC相比变得异常简洁。

data open_days type i.

select sum( open_days ) into open_days from ZV_SO_OPENDAYS.

WRITE: ‘Total number of open days: ‘ , open_days.

 

我们对运行结果也进行了profiling,如下:

 

神马,0.19秒? 是的,提高了52倍。这还是在我们只用到了JOIN ENGINE和CALC ENGINE的情况下。如果一个复杂的场景,彻底发挥HANA CALC ENGINE/OLAP ENGINE的威力,将erp跑在HANA的优势和好处就完全体现出来了。

 

性能本身就是成本!更佳的性能已经是一种低成本的体现。

你可能感兴趣的:(abap,on,hana)