天天看點

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,然後讓它把模型交給你。

HANA CDS與ABAP CDS
HANA CDS與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源代碼。

HANA CDS與ABAP CDS

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

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

HANA CDS與ABAP CDS

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/

繼續閱讀