목차

     

     

    SAP 테이블을 Hadoop(예: Impala, Hive)으로 이관할 때, SE11에서 테이블 구조를 조회하면 가끔 .APPEND, .INCLUDE로 시작하는 컬럼명을 볼 수 있습니다.


    이런 컬럼들은 헷갈리기 쉬운데, 왜 보이는지, 그리고 이관 시 포함해야 할지가 궁금해져서 끄적이는 게시글입니다.

     

    저만 몰랐다면 미안합니다 ;;

     


     

    SAP 테이블을 Hadoop(Impala, Hive 등)으로 이관할 때, .으로 시작하는 .APPEND, .INCLUDE, .APPEND STRUCTURE, .INCLUDE STRUCTURE 관련 컬럼이 SAP에서 보이지만,  실제 테이블에는 존재하지 않는 것처럼 보이는 현상은 ABAP Dictionary(DDIC) 구조상 일어나는 일입니다.

     

    결론부터 말하면 SAP 테이블 정의에 .APPEND로 되어 있지만 실제 컬럼이 아니라면, Hadoop 이관 시 넣을 필요 없습니다.

    쨖쨖쨖쨖

     

     

    그렇다면 ... why ... why ...? 

    🔍 왜 이런 일이 발생하나요?

    1. APPEND STRUCTURE / INCLUDE STRUCTURE는 "구조의 일부"일 뿐

    SAP에서는 하나의 테이블 정의에 여러 구조(structure)를 INCLUDE하거나 APPEND할 수 있습니다. 예를 들어:

    INCLUDE STRUCTURE CI_EKKODB.  " Append 구조
    

     

    이렇게 하면 CI_EKKODB라는 구조에 정의된 필드들이 실제 테이블의 필드로 확장되어 포함됩니다.


    하지만 표면상 테이블 정의서나 SE11에서 컬럼 목록을 조회하면 .APPEND, .INCLUDE로 표시되는 라인이 따로 보이기도 합니다. (주석처럼)

     

    2. SE11에서는 가시적으로만 보임

    • SE11에서 보면 .APPEND 또는 .INCLUDE 같은 행이 회색으로 나타나고 클릭하면 내부 구조로 들어가게 됩니다.
    • 실제 테이블의 컬럼 목록에는 이 구조 내부의 컬럼들이 평평(flat)하게 풀려서 포함됩니다.

     

    ✅ Hadoop 이관 시 체크할 것

    항목 설명
    .APPEND, .INCLUDE 컬럼 자체 ❌ 무시 (실제 컬럼 아님)
    해당 구조 안에 있는 진짜 필드들 ✅ 포함해서 이관해야 함
    구조 안에 구조가 중첩된 경우 ✅ 중첩 구조도 풀어서 이관해야 함
    SAP 추출 도구에서 .APPEND 같은 명칭이 필드명으로 나올 경우 ⚠️ 실제 필드인지 DD03L 등으로 검증 필요

     

     

     실무 팁

    • SAP ABAP Table Metadata 확인 테이블
      • DD03L – 실제 필드 목록 확인용
      • DD02L – 테이블 속성
      • DDIC, CI_* 구조는 SE11에서 확인 가능
    • Sqoop이나 ETL 툴에서 추출 시 필드 자동 매핑 기능 사용 시, .APPEND 자체가 필드로 나오는 경우가 있음 → 이건 제거해야 함

     

    ✍️ 예시: SAP SE11에서 보이는 정의

    Field Name Data Element Description
    .APPEND CI_EKKODB Custom fields
    ZZFIELD1 CHAR10 사용자정의필드1
    ZZFIELD2 CHAR5 사용자정의필드2

     

    → 이 중에서 .APPEND CI_EKKODB는 Hadoop 테이블에 넣지 않고, ZZFIELD1, ZZFIELD2만 실제 컬럼으로 생성해야 합니다.


    DD03L에서 컬럼 추출해서 실제 컬럼 리스트 필터링하는 SQL 쿼리

    SAP의 DDIC 메타테이블 중 DD03L은 테이블의 필드(컬럼) 정보를 담고 있는 핵심 테이블입니다.
    이 테이블에서 .APPEND, .INCLUDE 등 구조 정의만 있는 항목은 제외하고, 실제 테이블 컬럼만 추출하는 SQL 쿼리를 아래와 같습니다.

    SELECT
        tabname      AS table_name,     -- 테이블명
        fieldname    AS column_name,    -- 컬럼명
        position     AS col_position,   -- 컬럼 순서
        rollname     AS data_element,   -- 데이터 요소
        datatype,                       -- 물리적 데이터타입 (CHAR, NUMC 등)
        leng         AS length,         -- 길이
        decimals     AS decimals,       -- 소수점 자리수
        keyflag                          -- 키 여부 (P = Primary)
    FROM dd03l
    WHERE tabname = 'ZYOUR_TABLE_NAME'     -- ★ 여기에 대상 SAP 테이블명 입력
      AND as4local = 'A'                   -- 활성화된 필드만
      AND fieldname NOT LIKE '.%'         -- 구조 참조 (e.g. .APPEND, .INCLUDE) 제거
    ORDER BY position;

     


    SAP ABAP 내부 테이블 조작 및 구조 정의 키워드 5가지 정리

    SAP ABAP에서 자주 쓰이는 내부 테이블 조작 키워드 5가지인 APPEND, COLLECT, INSERT, MODIFY, INCLUDE에 대해 블로그에 올릴 수 있도록 목적/용도문법예시특징 비교를 중심으로 정리해보겠습니다.

     

    1. APPEND

     

    내부 테이블의 마지막에 데이터 행을 추가할 때 사용

     

     

    📌 문법

    APPEND <work_area> TO <internal_table>.
    

     

    📌 예시

    DATA: lt_emp TYPE TABLE OF zemployee,
          ls_emp TYPE zemployee.
    
    ls_emp-id = 'E001'.
    ls_emp-name = '홍길동'.
    
    APPEND ls_emp TO lt_emp.
    

     

    📌 특징

    • 항상 테이블 끝에 삽입
    • 중복 허용
    • 자동으로 테이블의 행 수 증가

     

    2. COLLECT

     

    중복된 키가 있으면 합산, 없으면 새 행 추가

     

     

    📌 문법

    COLLECT <work_area> INTO <internal_table>.
    

     

    📌 예시

    TYPES: BEGIN OF ty_sales,
             product TYPE char10,
             amount  TYPE i,
           END OF ty_sales.
    
    DATA: lt_sales TYPE TABLE OF ty_sales,
          ls_sales TYPE ty_sales.
    
    ls_sales-product = 'A001'.
    ls_sales-amount = 10.
    COLLECT ls_sales INTO lt_sales.
    
    ls_sales-product = 'A001'.
    ls_sales-amount = 5.
    COLLECT ls_sales INTO lt_sales.  " → A001 총 15로 합산
    

     

    📌 특징

    • 기본 키 기준으로 중복 체크
    • 숫자 필드는 자동으로 누적합
    • SORTED 또는 STANDARD 테이블에서 사용 가능

     

    3. INSERT

     

    특정 위치에 새로운 행을 삽입하거나, 키 기준 삽입 (SORTED TABLE)

     

     

    📌 문법

    INSERT <work_area> INTO <internal_table> [INDEX <n>].
    

     

    📌 예시

    DATA: lt_list TYPE TABLE OF string,
          lv_text TYPE string.
    
    lv_text = '첫번째'.
    INSERT lv_text INTO lt_list INDEX 1.  " 1번 인덱스에 삽입
    

     

    📌 특징

    • 인덱스를 지정할 수 있음
    • SORTED TABLE에서는 자동 정렬에 따라 위치 지정됨
    • HASHED TABLE에서는 사용 불가

     

     

    4. MODIFY

     

    기존 행을 수정하거나, 없으면 새 행 추가

     

     

    📌 문법

    MODIFY <internal_table> FROM <work_area> [INDEX <n>].
    

     

    📌 예시

    DATA: lt_emp TYPE TABLE OF zemployee,
          ls_emp TYPE zemployee.
    
    ls_emp-id = 'E001'.
    ls_emp-name = '김철수'.
    MODIFY lt_emp FROM ls_emp INDEX 1.  " 1번 행 수정
    

     

    📌 특징

    • INDEX 없으면 키를 기준으로 찾아 수정
    • 존재하지 않으면 새 행으로 추가됨 (STANDARD, SORTED TABLE만 가능)
    • HASHED TABLE은 키 기준으로만 수정 가능 (INDEX 사용 불가)

     

    5. INCLUDE

     

    구조 또는 테이블 정의 시, 다른 구조를 포함시킬 때 사용

     

     

    📌 문법

    TYPES: BEGIN OF ty_customer,
             name TYPE string,
             id   TYPE string,
             INCLUDE TYPE ty_address,
           END OF ty_customer.
    

     

    📌 예시

    TYPES: BEGIN OF ty_address,
             street TYPE string,
             city   TYPE string,
           END OF ty_address.
    
    TYPES: BEGIN OF ty_customer,
             name TYPE string,
             id   TYPE string,
             INCLUDE TYPE ty_address,
           END OF ty_customer.
    

     

    📌 특징

    • 코드 재사용에 유리
    • SAP Dictionary 테이블 정의 시 INCLUDE STRUCTURE로 사용됨

     

    🟨 기능별 요약 비교표

    키워드 주요 기능 중복 처리 사용 대상 기타 특징
    APPEND 행을 맨 끝에 추가 허용 STANDARD TABLE 자동 인덱스 증가
    COLLECT 동일 키 존재 시 숫자 필드 누적 누적 STANDARD / SORTED 집계용도로 유용
    INSERT 특정 인덱스 또는 키 기준으로 삽입 허용/자동 정렬 STANDARD / SORTED 인덱스 지정 가능
    MODIFY 키 또는 인덱스로 수정/없으면 추가 중복 허용 STANDARD / SORTED / HASHED 수정 + 삽입 역할
    INCLUDE 구조나 테이블 정의 시 재사용 해당 없음 STRUCTURE 필드 재사용

     


     

    ✍️ 마무리

    어쩌다 보니 SAP ABAP을 하나씩 뜯어보게 되었습니다. SAP 개발자는 아니지만, 아주 얕은 지식으로 빌빌대며 살펴보고 있는 응애입니다. 

    그럼... 아디오스 ^.- v

     

     

    .

    + Recent posts