HANA CDS与ABAP CDS

如果你在网络或者SCN上面搜索CDS,即SAP的Core Data Services,你会很容易地找到类似“Core Data Services(CDS)是一个在SAP HANA中用于定义和消费富语义数据模型的基础架构”这样的句子。在另一方面,在ABAP字典中似乎也有一种叫做ABAP CDS的东西。它们有什么关系?让我们从ABAP(还有ABAP CDS)文档的作者的视角中看看这个问题。

原文标题:CDS – One Concept, Two Flavors

本文链接:http://www.cnblogs.com/hhelibeb/p/6647324.html

ABAP字典

为了开发应用,你需要有个东西来为数据建模。多年来,在ABAP的世界里,这意味着为了实现这个目的需要在ABAP应用服务器将ABAP字典作为建模工具。ABAP字典曾经是、现在也是一种平台无关的数据库表和视图的元数据存储库,并且可以在ABAP中通过OPEN SQL访问。数据库实体的定义由基于表单的ABAP字典工具处理,该过程发生在应用服务器,而相关的DDL(数据定义语言)经由DBI(数据库接口)被传递到数据库。你可以通过在SE11查看“数据库对象”查看。例如,对于视图,你可以看到相关的“CREATE VIEW”的DDL语句。对于ABAP程序来说,在ABAP字典中定义的实体充当着全局类型的角色,使得在ABAP中声明数据对象作为目标或者作为OPEN SQL中的DML(数据操纵语言)语句源变得简单起来。

HANA CDS

SAP HANA的到来,使得直接在数据库中开发应用成为了可能,这种开发不需使用应用服务器。这样也就产生了一个新需求:直接在数据库创建元数据模型存储库。因为在使用应用服务器上面的ABAP字典的时候,更多的是在UI上操作而不是使用原生SQL的CREATE TABLE和CREATE VIEW,特别是在有关在语义上进行纯技术定义的需求(?)。这就是SAP的Core Data Service存在的主要原因。

Core Data Service提供了一个基于SQL的DDL规范,通常可以在不同的平台上实现更多的可能性,比如注解/关联(association/associations)。在SAP HANA上,CDS提供了“定义数据持久化模型的构件”。CDS的DDL允许你通过包装相关的原生HANA SQL来定义数据库表,数据库视图、数据类型,并且通过语义属性增强它们。如果从ABAP程序员的视角来看,也许会有人说:好吧,这是一个基于源代码HANA数据库的字典工具。不过这样说就太短视了。

ABAP CDS vs. HANA CDS

有了ABAP CDS和HANACDS,我们就有了基于同一规范的两个实现。这两者是十分相似的,但是并不100%等同。如果你知道CDS的DDL,你应当可以理解两种不同风格下的CDS实体的定义。但是在规则上,你并不能从ABAP不加修改地复制DDL源放到HANA上,反之亦然。HANA CDS的实现和ABAP CDS的实现正在以不同的优先级推进。这就是为什么像“New Core Data Services Features in SAP HANA 1.0 SPS 10”这样的的博客会面向直接在SAP HANA上工作的开发者。ABAP开发者们则不得不在“ABAP News”这样的博客里寻找相关内容。

另一方面,由于HANA CDS只作用在SAP HANA上,ABAP CDS则是开放的,因此,ABAP CDS中存在着某些在HANA CDS中不存在的限制(出于同样的原因,OPEN SQL也比原生SQL的限制更多)。内建函数就是个好例子。ABAP CDS中的像CURRENCY_CONVERSION一样的内建函数必须在任何数据库平台可用,并且——这点非常重要——必须在所有平台有相同的表现。表达式也是这样,比如算术表达式,聚合或者CAST表达式。在ABAP CDS中想要发布这样的一个功能,必须让所有的平台都加进去。这是多么大的一个任务!而且这也是ABAP CDS至今不能提供SAP HANA的所有SQL功能的原因(但是这项工作还在进行...)。另一方面,它是开放的!因此也有某些ABAP特性例如客户端处理、表缓存目前在HANA CDS中不可用,但是在ABAP中可以使用。

结论

SAP的Core Data Services提供了一个单一的数据建模基础架构的概念,它在SAP HANA和ABAP应用服务器中都得到了实现。两个实现的设计原理是相同的,不过由于各自所在的环境不同也有一些不同,它们的风格也自然有所不同。

注意

据我所知,至今还没有一个SAP HANA之外的数据库平台原生实现了CDS。为了在其他数据库中建模,你当然可以在ABAP字典中使用ABAP CDS,然后让它把模型交给你。

时间: 2024-08-18 02:46:10

HANA CDS与ABAP CDS的相关文章

教程:基于访问控制的ABAP CDS视图权限

Hi! 对每一个CDS视图,我们都可以通过DCL(Data Control Language)定义访问控制.在这篇文章中,我会介绍ABAP CDS视图中非常重要的一面:权限管理. 本文的阐述基于我正在使用的S4/HANA 1610 on NW 7.51. 内容分为五个部分: 标准示例的访问控制. 基于PFCG权限创建一个简单的例子. 带有CUBE数据类别的CDS分析视图. CDS分析查询视图的访问控制. 权限对象的并集(UNION)或者交集(INTERSECTION). 本文链接:http://

ABAP CDS ON HANA-(5)テーブル結合ビュー

JOINs in CDS View In ABAP CDS, Join between two data sources is allowed. Allowed joins are:- Inner Join/Join Left Outer Join Right Outer Join The post shows a simple Inner Join between data sources form SCARR & SPFLI table. In HANA studio, open ABAP

使用ABAP CDS视图创建服务

介绍本文介绍使用ABAP Core Data Services创建OData服务的最快方法. 给出了有关@ OData.publish注释利用率,对数据源CDS实体的引用和从DDIC结构导入的详细信息. 自定义透明表数据上显示的创建,更新和删除操作只是为了简化文章,而不是将重点从OData服务创建转移到业务流程需求实现. “R”类型OData服务创建. 在ABAP CDS中使用@ OData.publish注释我们假设我们有下列数据表(可能在自定义命名空间中,只是为了简化演示案例并仅关注ODat

CDS测试框架介绍:如何为ABAP CDS Entities写测试

动机 现在大家都知道单元测试对我们代码的好处.并且我们都承认它是开发过程中不可或缺的一部分.但是在把代码切换到数据库的模式下的时候,我们被粗暴地打回了软件测试的黑暗年代...我们现在面临着逻辑下推到ABAP CDS entities后,代码要如何测试的难题. CDS Test Double Framework允许开发者们通过众所周知的ABAP Unit Test Framework自动化地测试CDS entities. 本文链接:http://www.cnblogs.com/hhelibeb/p

SAP ABAP CDS view里的注解在ABAP后台是如何被解析的?

我们在ABAP Development Tool里编写SAP CDS view,为视图维护这些以@开头的注解,同Java Spring里广泛应用的annotation一样,都是一种为development object维护元数据的方式. 如上图所示,我维护了五个不同的注解,一旦保存,这个cds view的源代码被发送到ABAP后台,通过CL_DD_DDL_HANDLER解析,DDL此处是Data Definition Language的缩写. 这个类的ANNOTATIONS字段包含了一个内表M_

ABAP CDS 替代对象(Replacement Objects)引起的数据错误

最近遇到了一个诡异的问题:从CDS视图中取得的数据,和从透明表中取得的数据,会有不同的值.在这里记录下问题的表现和解决方案,以供参考. 系统版本:S/4HANA OP1610 涉及表:MCHB 本文链接:http://www.cnblogs.com/hhelibeb/p/7346984.html 最近写了一个CDS视图: @AbapCatalog.sqlViewName: 'ZCI_TEST' @AbapCatalog.compiler.compareFilter: true @AccessCo

ABAP CDS ON HANA-(12)ODATA Service

Create a CDS view and we have the view type as ‘BASIC’ view To publish this as oData, add the annotation as: @OData.publish: true @AbapCatalog.sqlViewName: ‘ZFLIGHT_VW’ @AbapCatalog.compiler.compareFilter: true @AccessControl.authorizationCheck: #NOT

ABAP CDS ON HANA-(7)CDSビューでの集約

Aggregate expression in CDS View An aggregate expression calculates a single value from an operand operand by calling an aggregate function from multiple rows of a results set. They need Group By clause to aggregate values from multiple rows and  the

ABAP CDS ON HANA-(4)ヘッダー行編集

Explicit Name List use in CDS We create a simple  CDS View like below. @AbapCatalog.sqlViewName: ‘ZSFLIGHT_EXP’ @AbapCatalog.compiler.compareFilter: true @AccessControl.authorizationCheck: #NOT_REQUIRED @EndUserText.label: ‘Flight Information’ @VDM.v