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 CDS教程:http://www.cnblogs.com/hhelibeb/tag/abap%20cds/

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規范,通常可以在不同的平台上實現更多的可能性,比如注解/關聯(annotations/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中可以使用。

(譯者注:在ABAP 7.53后,Open SQL更名為ABAP SQL,未來將在某些方面只支持HANA而不支持各種其它數據庫)

結論

SAP的Core Data Services提供了一個單一的數據建模基礎架構的概念,它在SAP HANA和ABAP應用服務器中都得到了實現。兩個實現的設計原理是相同的,不過由於各自所在的環境不同也有一些不同,它們的風格也自然有所不同。

注意

據我所知,至今還沒有一個SAP HANA之外的數據庫平台原生實現了CDS。為了在其他數據庫中建模,你當然可以在ABAP字典中使用ABAP CDS,然后讓它把模型交給你。

 

 

 

參考:CDS - Core Data Services

     Introduction to CDS on HANA and ABAP part 1

     ABAP on SAP HANA. Part IV. Core Data Services

          ABAP on SAP HANA

 

Q & A

什么時候需要CDS?

這取決於可重用性。 如果是只需要一次的功能,則無需創建CDS視圖。 我們可以在Open SQL中使用Joins,SQL表達式,子查詢等方式來進行此代碼下推。 但是如果我們想要重用一個視圖,需要超過Open SQL的CDS的語義或技術能力(SAP試圖讓二者擁有相同的能力,但Open SQL的進展可能會稍慢)或者我們只想將完整的數據模型下推數據庫,則需要CDS。

ABAP CDS和HANA CDS各自的使用場景?

如果你獨立運行SAP HANA,或者是side-by-side場景(頂部沒有ABAP棧),則無法使用ABAP CDS,必須使用HANA CDS。

如果HANA數據庫之上有一個ABAP棧(ABAP應用服務器使用HANA數據庫作為主數據庫),那么:

i)如果要用Open SQL訪問CDS entity,或者把它作為類型使用,或者如果要在ABAP中使用CDS注解,則必須使用ABAP CDS。

ii)如果不想通過ABAP訪問CDS entity,但想要像ABAP開發對象一樣傳輸和升級它們,則可以使用ABAP CDS。

iii)如果部用Open SQL訪問CDS entity,並且不想把它作為類型使用,則可以使用HANA CDS,它與SAP HANA的集成更好。 但是,只能使用Native SQL(ADBC,AMDP)等方式從ABAP進行訪問。

如何查找系統內全部的CDS視圖?

查看搜索TADIR,從中查詢PGMID = 'R3TR', OBJECT = 'DDLS'的條目。

可以看到它們所屬的包,也可以在ADT中看到DDL源代碼。

也可以查看表DDLDEPENDENCY,它包含所有DDL源的名字和CDS entity的名字。

在SE11中可以根據視圖名看到字段定義。

CDS的突出優點都有哪些?

1. 語義豐富的數據模型
2. 領域特定語言(DDL,QL,DCL)
3. 聲明式,接近概念性思維
4. 完全基於SQL
5. 可直接在CDS中使用“標准SQL”功能(如連接,聯合,內置函數)
6. 兼容各種數據庫
7. 生成和管理的SQL視圖
8. SAP HANA中的本機集成
9. 可以作為不同特定領域框架的共同基礎,例如 UI,Analytics,Odata,BW。
10. 代碼下推
11. 表函數
12. 豐富的內置SQL函數
13. 可擴展
14. 模型級別上的擴展
15. 元模型層面上的注釋
16. 可測試

ABAP CDS比Open SQL(ABAP SQL)更快嗎?

並不,雖然某些文章提出ABAP CDS的性能由於Open SQL,但稍加辨別便可以知道其中的測試手法存在瑕疵。

實際上,它們在性能上幾乎沒有區別,這篇文章給出了相關討論:A kill to an ABAP CDS View?

 

我(翻譯的)的ABAP CDS教程合集:http://www.cnblogs.com/hhelibeb/tag/abap%20cds/

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM