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: 
Taesuk
Product and Topic Expert
Product and Topic Expert

HANA CDS는 두 가지 유형으로 구분이 될 수 있습니다. ABAP CDS 와 HANA Native CDS 로 구분되는데, ABAP CDS 는 ABAP 프로그램을 설계 및 개발하는 layer 에서 데이터 모델에 대한 추상화를 하여 모델 접근 편의성을 개선하고 물리적인 HANA View를 생성하는 역활을 하고 있습니다.

이번 블로그에서는 ABAP CDS 가 아닌 HANA Native CDS에 대하여 설명 드릴려고 합니다.

* DDL : Data Definition Language

* QL : Query Language

* EL : Expression Language

SAP 에서 HANA 기반의 여러 Cloud 서비스를 운영하고 있는데, 2주 간격으로 새로운 기능이 추가되거나 개선되고 있습니다. 새로운 기능 및 개선을 운영 시스템에 적용하기 위해서는 기존 데이터 모델에 대한 확장 또는 변경이 적용되어야 하고 기존 데이터도 보존되어야 합니다. 물론 매번 변경되는 모델에 대하여 별도의 프로그램을 개발하여 데이터를 백업하고, 모델을 변경하고, 데이터를 복원하는 일련의 과정들을 통해 적용할 수 있지만, 업데이트 주기가 2주 단위에서는 많은 노력이 필요하겠죠.

이러한 작업들을 자동화하기 위해서 데이터 모델을 추상화하여 자동적으로 DDL 생성하여 데이터베이스 엔티티를  생생, 변경 및 데이터를 보존하는 배포 기술이 필요합니다. 우선 이전 블로그에서 Import 했던 SHINE 을 통해 SAP HANA CDS 가 어떻게 활용되고 있는지 살표보도록 하겠습니다.

우선 HCP 의 MDC 가 멈춰있다면, 다시 실행하시고 SAP HANA Web-based Development Workbench 를 선택하여 Eclipse 대신 Workbench 를 실행합니다.


개발자 사용자로 로그인한 다음 Editor 를 실행

Workbench 화면이 열리시면,  contents 에서 sap->hana->democontent 가 SHINE  을 통해 새로 import 된 artifact 인 것을 확인할 수 있습니다.

CDS 부분은 여기서 epm->data 로 확장하면 관련 파일들을 확인할 수 있습니다.

해당 패키지 내에 여러 파일로 구성되어 있으며, 파일 확장자별로 다음 의미를 갖습니다.

.hdbschema :  HANA DB 에 스키마를 정의

.hdbdd : 테이블, 뷰 또는 인덱스를 정의

.hdbsequence : sequence 정의

우선 SAP_HANA_DEMO.hdbschema 파일을 살펴보도록 하겠습니다. 파일 내용은 아주 간단합니다. 다음과 같이 스키마명을 정의하며, 스키마 명이 파일명과 동일해야 합니다.

schema_name="SAP_HANA_DEMO";

만약 여기서 다른 이름의 .hdbschema 파일을 생성하고 동일한 명으로 파일 내에 스키마를 정의한 후 파일을 저장한다면, 새로운 스키마가 바로 SAP HANA 에 생성되도록 되어 있습니다. SQL 사용 없이 파일 정의로만 새로운 스키마를 생성하는 겁니다. 한 번 정의된 것을 Delivery Unit 으로 export  하여 다른  HANA  로 import 한면 바로 스키마가 생성되는 것입니다. 마찬가지로 .hdbdd 를 통해 테이블, 뷰, 인덱스 와 테이블간 관계를 정의하여 마찬가지로 SQL 없이 바로 생성하도록 되어 있는 것이죠.


다음은 EPM.hdbdd 파일을 살펴보도록 하겠습니다.

파일 상단에 namespace sap.hana.democontent.epm.data; 를 통해 파일의 패키지 위치를 표기하고 있어 파일 저장 위치와 동일해야 합니다.

다음은 @Schema를 통해 파일 내에 정의된 엔티티가 생성될 스키마를 정의하고 있습니다.

해당 파일의 모든 엔티티 정의는 context  로 묶여져 있으며, context 명은 파일명과 동일해야 하고 모든 엔티티 정의는 context 내에서 정의되어야 하는 것이죠. 파일 하나당 하나의 context 만 존재할 수 있습니다.

EPM.hdbdd 에서는  type 엔티티만 정의되어 있는데, 사용자가 특정 데이터 유형을 명명하여 정의하는 것이고, 여기서 EPM.hdbdd 는 테이블, 뷰 같은 엔티티가 없어 header 파일 역할이라고 보시면 됩니다. 만약 여기서 다른 이름의 .hdbschema 파일을 생성하고 동일한 명으로 파일 내에 스키마를 정의한 후 파일을 저장한다면, 새로운 스키마가 바로 SAP HANA 에 생성되도록 되어 있습니다. SQL 사용 없이 파일 정의로만 새로운 스키마를 생성하는 겁니다. 한 번 정의된 것을 Delivery Unit 으로 export  하여 다른  HANA  로 import 한면 바로 스키마가 생성되는 것입니다. 마찬가지로 .hdbdd 를 통해 테이블, 뷰, 인덱스 와 테이블간 관계를 정의하여 마찬가지로 SQL 없이 바로 생성하도록 되어 있는 것이죠.

다음은  UTIL.hdbdd 파일을 살펴보도록 하겠습니다.

  • 모든 .hdbdd 파일은 namespace 부터 정의
  • 이전 EPM.hdbdd 에 정의된 Type 을 참조하여 엔티티 생성이 필요하므로 using sap.hana.democontent.epm.data::EPM  으로 참조
    (패키지와 파일은 :: 로 구분하며, 확장자가 필요하지는 않음)
  • 하나의 context 로 모든 엔티티 정의를 내재
  • @Catalog.tableType : #COLUMN  정의를 통해 컬럼형 테이블 엔티티 생성을 의미
  • Entity Constants 를 통해 constants 라는 테이블을 생성하고 PK 는 domain, fixedvalue, language 를 모두 포함하는 복합키이며,  Language 의 경우 EPM  파일에 정의된 ABAPLanguage  Type 을 참조

그 외에도 View 를 정의할 수 있습니다.

각 엔티티가 정상적으로 생성되었는지 확인을 위해

이전 브라우저 Workbench 탭에서 Catalog 를 선택합니다.

SAP_HANA_DEMO 스키마를 확인합니다.

SAP_HANA_DEMO 스키마에서 테이블을 확인합니다.

다음은 hdbdd 파일에 정의된 테이블 엔티티가 컬럼 테이블로 생성되었음을 확인할 수 있습니다. 여기서 테이블명은  namespace::context.entity 로 되어 있는 것을 확인할 수 있습니다.

테이블 구조도 정의된 내용과 동일하게 생성된 것을 확인할 수 있습니다.

  • domain, fixedvalue 및  language 복합 PK 생성
  • 컬럼유형 동일하게 생성
    type MString : String(60);
    type ABAPLanguage : String(1);

동일하게 View 도 확인할 수 있습니다.

마지막으로 sap.hana.democontent.epm.data.loads 패키지를 선택하여 보시면

테이블 엔티티에 대한 초기 데이터 적재를 위한 csv 파일과 데이터 적재 파일을 테이블과 매핑 정보가 정의된 Util.hdbti 로 구성되어 있음을 확인할 수 있는데,

Util.hdbti 파일을 보시면, 각각의 cds table 엔티티에 대하여 csv 파일이 매핑되어 있어 delivery unit import 시점에 초기 데이터 적재하도록 되어 있습니다.

이상 간략하게 Core Data Services  에 대하여 설명 드렸고, 좀 더 자세한 내용은 SAP HANA Developer Guide for SAP HANA Studio

Creating the Persistence Model in Core Data Services 에서 상세 내용을 확인할 수 있습니다.

다음 블로그에서는 CDS 를 통해 엔티티 변경 및 엔티티간 관계 (Relationship) 정의를 통해 Join 생성에 대하여 알아보도록 하겠습니다.