ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • SAP ABAP 호출 구조 정리 — Entity · Query Provider · AMDP
    SAP 2026. 5. 12. 18:50

     

     

    SAP ABAP 호출 구조 정리 — Entity · Query Provider · AMDP

    1. 기본 호출 구조 — Entity → Query Provider → AMDP Procedure

    Entity에서 AMDP까지 호출되는 전체 구조가 어떻게 되나요?

    S/4HANA OData/RAP 기반 개발에서 데이터를 조회할 때의 기본 호출 경로는 다음과 같습니다

    ① Entity ② Query Provider ③ AMDP Procedure

    전체 흐름은 ABAP 영역DB 영역(SAP HANA)으로 구분됩니다.

    ① Entity ABAP

    OData Service 또는 RAP Business Object로 외부 Fiori/API 요청이 진입하는 지점입니다. 클라이언트의 SELECT 요청을 받아 Query Provider로 위임합니다.

    ② Query Provider ABAP

    Entity에 @ObjectModel.query.implementedBy 어노테이션으로 연결된 ABAP 클래스입니다. IF_SADL_GW_QUERY_REQUEST~SELECT 메서드를 구현하며, 실제 데이터 조회 로직을 담당합니다.

    " Query Provider 클래스 예시
    CLASS zcl_my_query_provider DEFINITION PUBLIC.
      INTERFACES if_sadl_gw_query_request.
    ENDCLASS.
    
    CLASS zcl_my_query_provider IMPLEMENTATION.
      METHOD if_sadl_gw_query_request~select.
        " AMDP 호출 또는 Open SQL 처리
      ENDMETHOD.
    ENDCLASS.

    ③ AMDP Procedure DB

    Query Provider에서 AMDP 메서드를 호출하면 로직이 SAP HANA로 push-down됩니다. SQLScript가 HANA 엔진 위에서 네이티브로 실행되므로 대용량 데이터 처리 성능이 뛰어납니다.

    " AMDP Procedure 정의 예시
    CLASS zcl_my_amdp DEFINITION PUBLIC.
      INTERFACES if_amdp_marker_hdb.
      CLASS-METHODS get_data
        IMPORTING VALUE(iv_bukrs) TYPE bukrs
        EXPORTING VALUE(et_result) TYPE ltt_result.
    ENDCLASS.
    
    CLASS zcl_my_amdp IMPLEMENTATION.
      METHOD get_data
          BY DATABASE PROCEDURE FOR HDB LANGUAGE SQLSCRIPT.
        et_result = SELECT bukrs, belnr, dmbtr
                    FROM   bkpf
                    WHERE  bukrs = :iv_bukrs;
      ENDMETHOD.
    ENDCLASS.
    💡 AMDP Procedure는 OUT 파라미터(테이블)로 결과를 반환합니다. ABAP 코드에서 메서드 호출 후 반환된 테이블을 직접 사용할 수 있습니다.

    2. Query Provider에서의 두 가지 호출 경로 — Open SQL vs AMDP

    Query Provider 안에서 Open SQL로 호출하면 AMDP 호출과 어떻게 다른가요?

    Query Provider 내에서 데이터를 가져오는 방식은 크게 두 가지입니다. 두 경로는 DB 영역 경계를 넘는 방식이 다릅니다.

    Query Provider Open SQL (DBI 변환) HANA SQL 실행
    Query Provider AMDP Interface AMDP Procedure (SQLScript)

    경로 비교

    구분 Open SQL 경로 AMDP 직접 호출 경로
    실행 방식 ABAP DBI가 Native SQL로 변환 후 실행 SQLScript가 HANA에서 직접 실행 (push-down)
    오버헤드 DBI 변환 오버헤드 존재 변환 없음, 최소 오버헤드
    적합한 쿼리 단순 필터링, CDS View 조회 복잡한 집계, Window Function, 대용량 JOIN
    CDS View 활용 가능 (FROM절에 CDS View 지정) 가능 (TABLE FUNCTION 방식으로)
    코드 복잡도 낮음 (ABAP SELECT 문법) 높음 (SQLScript 작성 필요)
    성능 (대용량) 보통 우수

    Open SQL 방식 예시

    METHOD if_sadl_gw_query_request~select.
      " CDS View 또는 테이블을 Open SQL로 직접 조회
      SELECT bukrs, belnr, dmbtr
        FROM zi_my_cds_view    " CDS Interface View
        WHERE bukrs = @lv_bukrs
        INTO TABLE @DATA(lt_result).
    ENDMETHOD.

    AMDP 직접 호출 방식 예시

    METHOD if_sadl_gw_query_request~select.
      " AMDP 메서드 직접 호출 → HANA push-down
      zcl_my_amdp=>get_data(
        EXPORTING iv_bukrs  = lv_bukrs
        IMPORTING et_result = DATA(lt_result)
      ).
    ENDMETHOD.
    💡 선택 기준: 단순 파라미터 필터 + CDS View 조회라면 Open SQL, 복잡한 집계·Window Function·대용량 JOIN이라면 AMDP가 적합합니다.
    ⚠️ Open SQL은 ABAP DBI를 거치므로 복잡한 SQLScript 문법(SERIES_GENERATE, HIERARCHY 등)을 직접 사용할 수 없습니다. 이런 기능이 필요한 경우 AMDP를 사용해야 합니다.

    3. TABLE FUNCTION 호출 구조 — CDS View를 통한 위임

    TABLE FUNCTION은 AMDP Procedure와 어떻게 다르게 호출되나요?

    AMDP TABLE FUNCTION의 핵심은 CDS View의 FROM절에 직접 사용할 수 있다는 점입니다. Query Provider 입장에서는 Open SQL로 CDS View를 조회하는 것처럼 보이지만, 내부적으로는 HANA SQLScript가 실행됩니다.

    ① Entity ② Query Provider ③ CDS View (AMDP-backed) ④ TABLE FUNCTION

    ③ CDS View (AMDP-backed) ABAP

    CDS View의 FROM절에 AMDP 클래스의 TABLE FUNCTION을 지정합니다. 이를 통해 HANA 네이티브 로직이 Open SQL처럼 추상화됩니다.

    -- CDS View 정의 (AMDP TABLE FUNCTION 참조)
    @AbapCatalog.sqlViewName: 'ZV_MY_VIEW'
    @ObjectModel.query.implementedBy: 'ABAP:ZCL_MY_AMDP'
    define view ZI_MY_AMDP_VIEW
      with parameters
        p_bukrs : bukrs
    as select from ZCL_MY_AMDP( p_bukrs = :p_bukrs ) as tf
    {
      tf.bukrs,
      tf.belnr,
      tf.dmbtr
    }

    ④ TABLE FUNCTION DB

    AMDP 클래스 내에 BY DATABASE FUNCTION FOR HDB로 선언합니다. TABULAR RESULT를 반환하므로 FROM절 데이터 소스로 활용할 수 있습니다.

    " AMDP TABLE FUNCTION 정의
    CLASS zcl_my_amdp DEFINITION PUBLIC.
      INTERFACES if_amdp_marker_hdb.
      CLASS-METHODS get_data
        IMPORTING VALUE(p_bukrs) TYPE bukrs
        RETURNING VALUE(result)  TYPE ltt_result.
    ENDCLASS.
    
    CLASS zcl_my_amdp IMPLEMENTATION.
      METHOD get_data
          BY DATABASE FUNCTION FOR HDB LANGUAGE SQLSCRIPT
          OPTIONS READ-ONLY.
        RETURN SELECT bukrs, belnr, dmbtr,
                      SUM(dmbtr) OVER (PARTITION BY bukrs) AS total
               FROM   bkpf
               WHERE  bukrs = :p_bukrs;
      ENDMETHOD.
    ENDCLASS.

    AMDP Procedure vs TABLE FUNCTION 비교

    구분 AMDP Procedure AMDP TABLE FUNCTION
    선언 키워드 BY DATABASE PROCEDURE BY DATABASE FUNCTION
    결과 반환 방식 EXPORTING OUT 파라미터 (테이블) RETURNING TABULAR RESULT
    CDS View FROM절 사용 불가 가능 ✓
    Open SQL FROM절 사용 불가 SELECT * FROM tf(...) 가능 ✓
    DML 처리 (INSERT/UPDATE) 가능 불가 (READ-ONLY)
    주요 활용 복잡한 데이터 가공, 다중 결과셋 CDS View 데이터 소스, Query Provider 통합
    💡 TABLE FUNCTION의 핵심 장점: CDS View로 감싸면 Query Provider에서 Open SQL처럼 단순하게 호출할 수 있으면서, 실제로는 HANA SQLScript (Window Function, SERIES_GENERATE 등)의 강력한 기능을 모두 활용할 수 있습니다.
    ⚠️ TABLE FUNCTION은 OPTIONS READ-ONLY가 필수입니다. 데이터 변경(INSERT/UPDATE/DELETE)이 필요한 경우에는 반드시 PROCEDURE를 사용해야 합니다.

    Query Provider에서 TABLE FUNCTION 활용 시 체크리스트

    • AMDP 클래스에 IF_AMDP_MARKER_HDB 인터페이스 선언
    • TABLE FUNCTION 메서드에 OPTIONS READ-ONLY 지정
    • CDS View FROM절에 AMDP_CLASS( param = :param ) 형식으로 참조
    • CDS View에 @ObjectModel.query.implementedBy 또는 파라미터 바인딩 확인
    • Query Provider에서 CDS View를 Open SQL로 SELECT 구현
    • RETURNING 타입(ltt_result)과 CDS View 필드 구조 일치 여부 확인

    4. 호출 방식 선택 가이드

    상황 권장 방식 이유
    단순 파라미터 필터 + 기존 CDS View 조회 Open SQL 구현 단순, 유지보수 용이
    복잡한 집계 / Window Function AMDP Procedure HANA push-down으로 성능 최적
    Query Provider + CDS View 통합 구조 TABLE FUNCTION + CDS View Open SQL로 추상화, 레이어 분리
    데이터 변경 포함 (INSERT/UPDATE) AMDP Procedure TABLE FUNCTION은 READ-ONLY
    HANA 전용 함수 (SERIES, HIERARCHY) AMDP (Procedure 또는 TABLE FUNCTION) Open SQL에서 미지원
    #SAP #ABAP #AMDP #QueryProvider #TableFunction #CDSView #OpenSQL #S4HANA #OData #RAP

     

     

Designed by Tistory.