카피북 파서 참조

Mainframe Connector는 다음과 같은 두 가지 버전의 카피북 파서를 지원합니다.

  • 네이티브 카피북 파서: 네이티브 카피북 파서는 ANTLR4 기반 파서를 구현하고 COBOL 카피북을 지원하며 파서의 권장 버전입니다.
  • 레거시 카피북 파서: 레거시 카피북 파서는 매우 제한된 메모장 형식을 지원하는 이전 버전의 파서입니다.

카피북을 기준으로 사용할 파서를 정의할 수 있습니다. 사용할 파서를 정의하는 방법에 대한 자세한 내용은 카피북 파서 정의를 참조하세요.

네이티브 카피북 파서

네이티브 카피북 파서는 최신 버전의 파서이며 기본적으로 사용됩니다. 네이티브 카피북 파서는 ANTLR4 기반 파서를 구현하고 COBOL 카피북을 지원합니다.

이 섹션에는 네이티브 카피북 파서에서 실행하는 사전 처리 작업이 나와 있습니다. 또한 네이티브 카피북 파서에서 지원하는 데이터 유형과 사용 시 제한사항을 간략히 설명합니다.

사전 처리

카피북을 파싱하기 전에 네이티브 카피북 파서는 데이터를 사전 처리하고 다음 작업을 수행합니다.

  • 주석 줄을 삭제합니다.
  • 줄 연속을 해결합니다.
  • 행 번호 영역과 열 73 영역을 비웁니다.
  • EJECT, SPACE, TITLE와 같은 프리프로세서별 문을 보존합니다. 이러한 필드는 파싱되지만 무시됩니다. COPY REPLACING에서 사용할 수 있는 전처리기 매개변수가 포함된 카피북은 기본 카피북 파서에서 지원되지 않습니다. 이러한 카피북에서 식별자는 콜론(:)으로 묶입니다.

지원되는 데이터 유형 및 제한사항

다음은 네이티브 카피북 파서에서 지원하는 데이터 유형과 사용 제한사항입니다.

  • 수준 66(ALIAS) 또는 77(STANDALONE)은 지원되지 않습니다.
  • PICTURE 필드만 사용하세요. 지원되는 PICTURE 필드는 다음과 같습니다.
    • Pic A, Pic, B, Pic G(DBCS), Pic N(국가 또는 DBCS), Pic U(UTF8), Pic X, 영역 십진수(최대 정밀도 38, 최대 배율 38)
  • IBM 16진수 부동 소수점(HFP)이 지원됩니다.
  • REDEFINES는 지원되지 않습니다.
  • 다음 COMP 필드만 사용하세요. ALIGN 및 OCCURS는 지원되지 않습니다.
    • COMP
    • COMP4
    • 바이너리
    • COMP3
    • PACKED-DECIMAL
  • DATE 및 TIMESTAMP가 지원됩니다.
  • null 표시기가 지원됩니다.
  • 더블 바이트 문자 집합(DBCS) 필드 Pic G 및 Pic N이 지원되며 현재 지원 중단된 Pic T 대신 사용해야 합니다. USAGE DISPLAY-1을 지정하지 않고 Pic N 필드를 DBCS로 사용하려면 NSYMBOL 환경 변수를 DBCS로 설정해야 합니다. 기본적으로 NSYMBOLNATIONAL로 설정되어 USAGE NATIONALUSAGE 절이 없는 Pic N 필드로 설정합니다. NSYMBOLNATIONAL 또는 DBCS로만 설정할 수 있습니다.
  • 가변 길이 문자 문자열이 지원됩니다.
  • SIGN 절이 지원됩니다.
  • 모든 필드를 양쪽 맞춤 적용하고 단일 들여쓰기 수준을 사용해야 합니다.
  • 댓글이 지원됩니다.

날짜 및 타임스탬프 필드 지원

Mainframe Connector는 BigQuery 안팎으로 날짜 및 타임스탬프 데이터를 이동하는 것을 지원합니다. 이렇게 하려면 SUFFIX 단어로 시작하는 환경 변수를 다음 형식으로 정의해야 합니다.

SUFFIX_SUFFIX_STRING="command --format FORMAT --timezone TIMEZONE"

다음 목록에서는 형식을 자세히 설명합니다.

  • SUFFIX_SUFFIX_STRING: 날짜 및 타임스탬프 데이터를 정의하는 데 사용할 수 있는 환경 변수입니다. SUFFIX_STRING 이름은 복사본에서 필드 이름의 서픽스로 사용될 경우 날짜 또는 타임스탬프로 해석되어야 하는 서픽스 -SUFFIX_STRING 또는 _SUFFIX_STRING에 해당합니다. SUFFIX_STRING에 하이픈이나 밑줄이 포함되어 있지 않은지 확인합니다.
  • command: 필드를 파싱하는 데 사용해야 하는 디코더를 정의합니다. 지원되는 명령어는 date-convertertimestamp-converter입니다.
  • --format: 날짜 또는 타임스탬프의 형식을 정의하는 파라미터입니다. 쉼표로 구분하여 최대 5개의 서로 다른 형식을 지정할 수 있습니다. 지정된 입력과 일치하는 형식이 여러 개인 경우 일치하는 첫 번째 형식이 BigQuery에 로드하는 데 사용됩니다. 내보내기에 여러 형식을 지정하면 첫 번째 형식만 사용됩니다. 유효한 형식에 관한 자세한 내용은 지원되는 날짜 및 타임스탬프 형식을 참고하세요.
  • --timezone: TIMESTAMP 유형의 선택적 매개변수입니다. 기본 시간대는 UTC입니다. 지원되는 시간대 형식에 관한 자세한 내용은 지원되는 시간대 형식을 참고하세요.
  • --omitsuffix(선택사항): 이 매개변수를 지정하면 -SUFFIX_STRING 또는 _SUFFIX_STRING이 BigQuery에 표시되는 필드 이름에서 삭제됩니다.

SUFFIX_SUFFIX_STRING에 별칭을 추가하려면 환경 변수 SUFFIX_SUFFIX_ALIAS=$SUFFIX_SUFFIX_STRING을 설정하면 됩니다.

예를 들면 다음과 같습니다.

  • 환경 변수를 SUFFIX_DT8="date-converter --format yyyyMMdd"로 정의하면 서픽스가 -DT8 또는 _DT8인 필드는 BigQuery에서 DATE 유형 필드가 되고 패턴은 yyyyMMdd가 됩니다.
  • 환경 변수를 SUFFIX_DT10="date-converter --format MM-dd-yyyy"로 정의하면 서픽스가 -DT10 또는 _DT10인 필드는 BigQuery에서 DATE 유형 필드가 되고 패턴은 MM-dd-yyyy가 됩니다.
  • 환경 변수를 SUFFIX_DT="date-converter --format 'MM-dd-yyyy,MM/dd/yyyy'"로 정의하면 서픽스가 -DT 또는 _DT인 필드는 BigQuery에서 DATE 유형 필드가 되며 패턴은 MM-dd-yyyy 또는 MM/dd/yyyy가 될 수 있습니다.
  • 환경 변수 두 개를 SUFFIX_TIMESTAMP="timestamp-converter --format yyyy-MM-dd SUFFIX_TIMESTAMP=timestamp-converter --format 'yyyy-MM-dd HH.mm.ss.SSSSSS' --timezone America/New_York"SUFFIX_TS=$SUFFIX_TIMESTAMP로 정의하는 경우 서픽스(-TIMESTAMP, _TIMESTAMP, -TS 또는 _TS) 중 하나는 BigQuery의 TIMESTAMP 유형 필드가 되고, 패턴은 시간대가 America/New_Yorkyyyy-MM-dd HH:mm:ss.SSSSSS입니다.

null 표시기 지원

Mainframe Connector는 버전 5.13.0부터 null 표시기를 지원합니다. null 표시기는 SUFFIX 단어로 시작하는 환경 변수를 다음 형식으로 정의해야 합니다.

SUFFIX_NULL_INDICATOR_NAME="command --null-value NULL_VALUE --not-null-value NOT_NULL_VALUE"

NULL_INDICATOR_NAME은 카피북에서 필드 이름의 서픽스로 사용될 경우 null 표시기로 해석되는 서픽스 -NULL_INDICATOR_NAME 또는 _NULL_INDICATOR_NAME에 해당합니다.

다음 목록에서는 이러한 환경 변수와 함께 사용할 수 있는 파라미터를 설명합니다.

  • command: 값은 null-indicator여야 합니다.
  • –null-value: 값 null indicator는 참조된 필드가 null임을 나타냅니다. --null-value 값은 문자열 또는 십진수여야 합니다.
  • –not-null-value: (선택사항) 지정된 경우 값 null indicator는 참조된 필드가 null이 아님을 나타냅니다. 이 파라미터가 설정되지 않은 경우 –value-null이 아닌 모든 값이 허용됩니다. –not-null-value 값은 문자열 또는 십진수여야 합니다.
  • –keep: (선택사항) 지정된 경우 null-indicator 필드는 최적화된 행 열 형식 (ORC) 파일 형식의 열로 유지됩니다. 기본적으로 이 필드는 ORC 형식으로 유지되지 않습니다.
  • -force-type: (선택사항) 필드를 각각 바이트 또는 바이너리로 디코딩하도록 강제하는 두 가지 옵션(bytesbinary)을 지원합니다. 바이트의 경우 nullnot-null 값은 HEX로 표현됩니다 (예: FA3AB5). 모든 FF 또는 모든 00와 동일한 HIGHLOW 상수를 사용할 수 있습니다. 바이너리의 경우 값은 일반 정수입니다.

null-indicator에 참조된 필드가 없으면 Mainframe Connector에 오류 메시지가 표시되고 파일 처리가 중지됩니다.

예를 들면 다음과 같습니다.

카피북 스니펫

10 COL1-NID1            PIC S9(4) USAGE COMP.
10 COL1                 PIC S9(6) USAGE COMP.

10 FIELD       PIC        X(10).
10 FIELD-NID2  PIC        X(1).

10 COL2       PIC        X(10).
10 COL2-NULL  PIC        X(1).

환경 변수 정의

SUFFIX_NID1="null-indicator --null-value -1 --not-null-value 0"
# Copybook fields with NID1 suffix null indicator configuration.
SUFFIX_NID2="null-indicator --null-value '?'"
# Copybook fields with NID2 suffix null indicator configuration.
SUFFIX_NULL="null-indicator --null-value '?' --keep"
# Copybook fields with NULL suffix null indicator configuration.

DBCS 필드 지원

DBCS 필드를 사용할 때는 다음 사항을 확인하세요.

  • PIC G 또는 Pic N DBCS 필드를 사용하는 경우 gsutil cp 또는 bq export 명령어를 사용할 때 encoding 옵션 또는 ENCODING 환경 변수에서 다음과 같은 유효한 멀티바이트 문자 집합(MBCS) 인코딩 중 하나를 제공해야 합니다.
    • x-IBM930
    • x-IBM933
    • x-IBM935
    • x-IBM937
    • x-IBM939
    • x-IBM942
    • x-IBM942C
    • x-IBM943
    • x-IBM943C
    • x-IBM949
    • x-IBM949C
    • x-IBM950
    • x-IBM964
    • x-IBM970
    • x-IBM1364
  • 카피북 필드에 DBCS 바이트만 포함되어 있지만 이러한 바이트가 시프트 아웃(0x0E) 및 시프트 인(0x0F)으로 둘러싸여 있지 않은 경우 이러한 바이트가 DBCS 바이트로 디코딩되도록 필드 이름에 서픽스 _DBCS를 추가해야 합니다.

예를 들어, 카피북 필드 03 FLD01 PIC N USAGE DISPLAY-1에 해당하는 데이터에 0x0E0x0F로 둘러싸여 있지 않은 x-IBM930 인코딩에 바이트 0x430xC5가 포함되어 있는 경우, DBCS 데이터를 올바르게 디코딩하려면 카피북 필드 이름을 03 FLD01-DBCS PIC N USAGE DISPLAY-1로 바꿔야 합니다.

가변 길이 문자 문자열 지원

네이티브 카피북 파서는 다음 struct 필드를 지원합니다.

  • 10 var
  • 15 var-LEN PIC 9(4) USAGE COMP
  • 15 var-TEXT PIC X(n)

struct 필드의 첫 번째 필드는 두 번째 필드인 문자열 필드의 길이입니다. 다음 그림과 같이 레코드 길이에 따라 레코드 끝에 패딩을 추가해야 할 수 있습니다.

가변 길이 문자 문자열에 추가된 패딩.
그림 1. 가변 길이 문자 문자열에 추가된 패딩.

Mainframe Connector는 BigQuery에 데이터를 저장하기 전에 변수 이름에서 접미사를 삭제합니다. 이 예에서 변수 이름은 var입니다.

struct 필드를 사용하려면 환경 변수 BQSH_FEATURE_VARIABLE_LENGTH_ENABLEDyes 또는 true로 설정합니다.

struct 필드를 사용할 때는 다음 사항을 확인하세요.

  • struct의 첫 번째 매개변수의 접미사는 -LEN입니다. 다른 서픽스를 사용하려면 사용하려는 서픽스로 환경 변수 BQSH_FEATURE_VARIABLE_LENGTH_LEN_SUFFIX를 설정해야 합니다.
  • struct의 두 번째 매개변수의 접미사는 -TEXT입니다. 다른 서픽스를 사용하려면 사용하려는 서픽스로 환경 변수 BQSH_FEATURE_VARIABLE_LENGTH_LEN_SUFFIX를 설정해야 합니다.

지원되지 않는 필드 및 구조

다음 섹션에서는 지원되지 않는 필드 및 구조를 설명합니다.

COBOL 생성물

COBOL 구성은 지원되지 않지만 이러한 구성을 코드북에 사용하면 Mainframe Connector에 오류가 표시됩니다.

  • dataAlignedClause
  • dataBlankWhenZeroClause
  • dataCommonOwnLocalClause
  • dataIntegerStringClause
  • dataJustifiedClause
  • dataOccursClause
  • dataReceivedByClause
  • dataRecordAreaClause
  • dataRenamesClause
  • dataSignClause
  • dataSynchronizedClause
  • dataThreadLocalClause
  • dataTypeClause
  • dataTypeDefClause
  • dataUsingClause

데이터 유형

COMP-1 및 COMP-2와 같은 COBOL 데이터 유형이 지원됩니다.

레거시 카피북 파서

레거시 카피북 파서는 비COBOL 기능을 지원하는 이전 버전의 파서입니다. DSL 기반 카피북을 사용하는 경우 네이티브 카피북 파서로 인해 오류가 발생할 수 있으므로 레거시 파서가 더 적합할 수 있습니다.

카피북 DD 사용 시 다음과 같은 제한사항이 있습니다.

  • 수준 66(ALIAS) 또는 77(STANDALONE)은 지원되지 않습니다.
  • REDEFINES는 지원되지 않습니다.
  • 주석 행은 지원되지 않습니다.
  • 이름이 DATE 또는 DT로 끝나는 길이 10의 필드는 날짜입니다. 이러한 필드는 디코딩이 다릅니다.
  • 다음 COMP 필드만 사용하세요. ALIGN 및 OCCURS는 지원되지 않습니다.
    • COMP
    • COMP4
    • 바이너리
    • COMP3
    • PACKED-DECIMAL
  • PICTURE 필드만 사용하세요. 필드 이름 바로 뒤의 같은 줄에 PICTURE 필드를 정의합니다.
  • 모든 필드를 양쪽 맞춤 적용하고 단일 수준을 사용해야 합니다. 주석은 지원되지 않습니다.
  • 1~6열에는 항상 공백이 포함되어야 합니다.