독립형 모드에서 Mainframe Connector 실행

Mainframe Connector 버전 5.13.0 이상에서는 Google Cloud에서 Mainframe Connector를 독립형 작업으로 실행할 수 있습니다. 이 기능을 사용하면 Mainframe Connector를 컨테이너화된 일괄 작업(예: Cloud Run 작업, Google Kubernetes Engine 작업 또는 Docker 컨테이너 내)으로 실행할 수 있습니다. 이 옵션을 사용하면 메인프레임에 Mainframe Connector를 로컬로 설치하지 않아도 되며, 메인프레임 큐에 추가된 순차 액세스 메서드(QSAM) 파일 파싱을 기존 추출, 변환, 로드(ETL) 워크플로에 더 쉽게 통합할 수 있습니다.

Mainframe Connector의 독립형 버전을 사용하는 경우 QSAM 파일을 Google Cloud 에 로드하는 ETL 워크플로를 직접 설정해야 합니다.

시작하기 전에

  • Cloud Run에 Mainframe Connector를 배포합니다.
  • 서비스 계정을 만들거나 Mainframe Connector에 사용할 기존 서비스 계정을 식별합니다. 이 서비스 계정에는 Cloud Storage 버킷, BigQuery 데이터 세트, 사용하려는 기타 Google Cloud 리소스에 액세스할 수 있는 권한이 있어야 합니다.
  • 생성한 서비스 계정에 Cloud Run 호출자 역할이 할당되어 있는지 확인합니다.
  • 메인프레임 데이터가 이미 Google Cloud 에서 QSAM 파일로 제공되는지 확인합니다.

Cloud Run의 독립형 모드에서 Mainframe Connector를 사용하여 데이터 트랜스코딩

Mainframe Connector는 Google Cloud에서 Mainframe Connector를 독립형 작업으로 실행할 수 있는 두 가지 방법을 제공합니다.

qsam 명령어의 장점

qsam 명령어는 다음과 같은 이점을 제공합니다.

  • OCCURS 절 (목록), REDEFINES 절, 중첩 레코드를 비롯한 복합 데이터 유형 지원 이러한 데이터 유형에 대한 자세한 내용은 qsamvsam 트랜스코딩 참조를 참고하세요.
  • 트랜스코더 구성 파일을 통한 트랜스코딩 프로세스 구성 지원 이 기능을 사용하면 데이터를 Google Cloud로 디코딩하고 데이터를 메인프레임으로 다시 인코딩할 때 유연성이 높아집니다.
  • 오류 검사에 사용할 수 있는 트랜스코딩 오류 테이블인 스필오버 데이터 세트 생성을 지원합니다.
  • 여러 입력 및 출력 형식 지원 이 기능을 사용하면 다양한 데이터 웨어하우스로 데이터를 로드할 수 있습니다.

qsam 명령어를 사용하여 독립형 모드에서 Mainframe Connector 실행

qsam 명령어를 사용하여 독립형 모드에서 Mainframe Connector를 사용하여 데이터를 트랜스코딩하려면 다음 단계를 따르세요.

  1. 다음을 실행하는 명령어가 포함된 YAML 파일을 만듭니다.

    입력 데이터 세트는 레코드 길이가 고정되었거나 가변적인 QSAM 파일이어야 합니다. 다음 샘플 YAML 파일을 사용하여 데이터 세트를 읽고 ORC 형식으로 트랜스코딩한 후 Cloud Storage에 업로드할 수 있습니다.

    다음 샘플에서는 INFILE, OUTFILE, COPYBOOK, TRANSCODE_CONFIGURATION에 Cloud Storage DataPath를 사용합니다.

    environmentVariables:
    - name: "INFILE"
      value: "INFILE"
    - name: "OUTFILE"
      value: "OUTFILE"
    - name: "COPYBOOK"
      value: "COPYBOOK"
    - name: "TRANSCODE_CONFIGURATION"
      value: "TRANSCODE_CONFIGURATION"
    - name: "LOG_PROJECT"
      value: "LOG_PROJECT"
    - name: "IBM_JAVA_OPTIONS"
      value: "-XX:+UseContainerSupport"
    
    command:
      qsam decode $INFILE $OUTFILE
      --copybook $COPYBOOK
      --transcode-configuration ${TRANSCODE_CONFIGURATION}
      --output-format orc
      --parallelism 8
      --chunk-size "512Mib"
    

    다음을 바꿉니다.

    • INFILE: 입력 파일의 이름입니다.
    • OUTFILE: 출력 파일의 이름입니다.
    • COPYBOOK_PATH: 카피북 DD의 경로입니다.
    • TRANSCODE_CONFIGURATION_PATH: 트랜스코딩 구성 파일의 경로입니다.
    • LOG_PROJECT: 로그 프로젝트의 이름입니다.

    다음은 YAML 파일 예시입니다.

    environmentVariables:
    - name: "INFILE"
      value: "gs://my_bucket/my/input.dat"
    - name: "OUTFILE"
      value: "gs://my_bucket/my/output.orc"
    - name: "COPYBOOK"
      value: "gs://my_bucket/my/copybook.cpy"
    - name: "TRANSCODE_CONFIGURATION"
      value: "gs://my_bucket/my/transcode-configuration-file.json"
    - name: "LOG_PROJECT"
      value: "the log project"
    - name: "IBM_JAVA_OPTIONS"
      value: "-XX:+UseContainerSupport"
    command:
      qsam decode $INFILE $OUTFILE
      --copybook $COPYBOOK
      --transcode-configuration ${TRANSCODE_CONFIGURATION}
      --output-format orc
      --parallelism 8
      --chunk-size "512Mib"
    
  2. 다음 명령어를 사용하여 job.yaml 파일을 만듭니다.

    kind: Job
    metadata:
      name: JOB
    spec:
      template:
        spec:
          template:
            spec:
              containers:
              - image: IMAGE
                command:
                - bash
                - /opt/mainframe-connector/standalone.sh
                - --argsFrom
                - LOCATION_OF_THE_COMMAND_YAML_FILE
    

    다음을 바꿉니다.

    • JOB: Cloud Run 작업의 이름 작업 이름은 49자(영문 기준) 이하여야 하며 리전 및 프로젝트별로 고유해야 합니다.
    • IMAGE: 작업 컨테이너 이미지의 URL(예: us-docker.pkg.dev/cloudrun/container/job:latest)
    • LOCATION_OF_THE_COMMAND_YAML_FILE: 이전 단계에서 만든 YAML 파일의 위치입니다.
  3. 다음 명령어를 사용하여 새 작업을 배포합니다.

    gcloud run jobs replace job.yaml
    
  4. 다음 명령어를 사용하여 작업을 실행합니다.

    gcloud run jobs execute JOB_NAME

    JOB_NAME을 작업 이름으로 바꿉니다.

Cloud Run 작업 만들기 및 실행에 대한 자세한 내용은 새 작업 만들기작업 실행을 참조하세요.

gsutil cp 명령어를 사용하여 독립형 모드에서 Mainframe Connector 실행

gsutil cp 명령어를 사용하여 독립형 모드에서 Mainframe Connector를 사용하여 데이터를 트랜스코딩하려면 다음 단계를 따르세요.

  1. 다음을 실행하는 명령어가 포함된 YAML 파일을 만듭니다.

    • 데이터 세트 읽기
    • ORC로 트랜스코딩
    • Cloud Storage에 업로드

    입력 데이터 세트는 레코드 길이가 고정되었거나 가변적인 QSAM 파일이어야 합니다. 다음 샘플 YAML 파일을 사용하여 데이터 세트를 읽고 ORC 형식으로 트랜스코딩한 후 Cloud Storage에 업로드할 수 있습니다.

    다음 샘플에서는 INFILE 데이터 세트에서 데이터를 읽고 COPYBOOK DD에서 레코드 레이아웃을 읽습니다.

    environmentVariables:
    - name: "INFILE"
      value: "INFILE"
    - name: "INFILE_DSN"
      value: "INFILE_DSN"
    - name: "GCSDSNURI"
      value: "INFILE_DSN_FILEPATH"
    - name: "COPYBOOK"
      value: "COPYBOOK_FILEPATH"
    - name: "LOG_PROJECT"
      value: "LOG_PROJECT"
    - name: "IBM_JAVA_OPTIONS"
      value: "-XX:+UseContainerSupport"
    command:
      gsutil cp gs://outputbucket/output
      --parallelism 8
      --maxChunkSize "512Mib"
      --parser_type=copybook
    

    다음을 바꿉니다.

    • INFILE: 입력 파일의 이름입니다.
    • INFILE_DSN: 입력 데이터 소스 이름(DSN) 파일의 이름입니다.
    • INFILE_DSN_FILEPATH: 입력 DSN 파일의 경로입니다.
    • COPYBOOK_FILEPATH: 카피북 DD의 경로입니다.
    • LOG_PROJECT: 로그 프로젝트의 이름입니다.

    다음은 YAML 파일 예시입니다.

      environmentVariables:
      - name: "INFILE"
        value: "input.dat"
      - name: "INFILE_DSN"
        value: "input.dat"
      - name: "GCSDSNURI"
        value: "gs://inputbucket/inputfolder"
      - name: "COPYBOOK"
        value: "gs://inputbucket/copybook.cpy"
      - name: "LOG_PROJECT"
        value: "the log project"
      - name: "IBM_JAVA_OPTIONS"
        value: "-XX:+UseContainerSupport"
      command:
        gsutil cp gs://outputbucket/output
        --parallelism 8
        --maxChunkSize "512Mib"
        --parser_type=copybook
    

    Mainframe Connector에서 지원하는 환경 변수의 전체 목록은 환경 변수를 참조하세요.

    이 프로세스 중에 실행된 명령어를 로깅하려면 로드 통계를 사용 설정하면 됩니다.

  2. 다음 명령어를 사용하여 job.yaml 파일을 만듭니다.

    kind: Job
    metadata:
      name: JOB
    spec:
      template:
        spec:
          template:
            spec:
              containers:
              - image: IMAGE
                command:
                - bash
                - /opt/mainframe-connector/standalone.sh
                - --argsFrom
                - LOCATION_OF_THE_COMMAND_YAML_FILE
    

    다음을 바꿉니다.

    • JOB: Cloud Run 작업의 이름 작업 이름은 49자(영문 기준) 이하여야 하며 리전 및 프로젝트별로 고유해야 합니다.
    • IMAGE: 작업 컨테이너 이미지의 URL(예: us-docker.pkg.dev/cloudrun/container/job:latest)
    • LOCATION_OF_THE_COMMAND_YAML_FILE: 이전 단계에서 만든 YAML 파일의 위치입니다.
  3. 다음 명령어를 사용하여 새 작업을 배포합니다.

    gcloud run jobs replace job.yaml
    
  4. 다음 명령어를 사용하여 작업을 실행합니다.

    gcloud run jobs execute JOB_NAME

    JOB_NAME을 작업 이름으로 바꿉니다.

Cloud Run 작업 만들기 및 실행에 대한 자세한 내용은 새 작업 만들기작업 실행을 참조하세요.

BigQuery 테이블을 메인프레임 데이터 세트로 내보내기

다음과 같이 QUERY DD 파일에서 SQL 읽기를 실행하고 결과 데이터 세트를 Cloud Storage에 바이너리 파일로 내보내는 YAML 파일을 만들어 BigQuery 테이블을 메인프레임 데이터 세트로 내보낼 수 있습니다.

Cloud Run 작업을 만들고 실행하는 단계는 Cloud Run의 독립형 모드에서 Mainframe Connector를 사용하여 데이터 트랜스코딩 섹션에 설명된 것과 동일합니다. 유일한 차이점은 YAML 파일에 언급된 명령어입니다. Mainframe Connector는 BigQuery 테이블을 내보낼 수 있는 두 가지 방법을 제공합니다.

  • qsam 명령어 사용 (버전 5.16.0 이상)
  • bq export 명령어 사용

qsam 명령어 사용

environmentVariables:
  - name: "QUERY"
    value: "QUERY_PATH"
  - name: "OUTFILE"
    value: "OUTFILE"
  - name: "COPYBOOK"
    value: "COPYBOOK_PATH"
  - name: "TRANSCODE_CONFIGURATION"
    value: "TRANSCODE_CONFIGURATION_PATH"
  - name: "PROJECT_ID"
    value: "PROJECT_ID"
  - name: "LOCATION"
    value: "LOCATION"
  - name: "LOG_PROJECT"
    value: "LOG_PROJECT"
  - name: "IBM_JAVA_OPTIONS"
    value: "-XX:+UseContainerSupport"
command:
qsam encode \
  $QUERY
  $OUTFILE
  --copybook ${COPYBOOK_PATH}
  --transcode-configuration ${TRANSCODE_CONFIGURATION_PATH}
  --input-format=BIGQUERY \
  --input-parameter project_id=${PROJECT_ID} \
  --input-parameter location=${LOCATION}

다음을 바꿉니다.

  • QUERY_PATH: 실행할 SQL 쿼리입니다. 쿼리 결과는 바이너리 파일로 인코딩됩니다.
  • OUTFILE: 출력 바이너리 파일이 포함될 Cloud Storage 버킷입니다.
  • COPYBOOK_PATH: 카피북 DD의 경로입니다.
  • TRANSCODE_CONFIGURATION_PATH: 트랜스코더 구성 파일의 경로입니다.
  • LOG_PROJECT: 로그 프로젝트의 이름입니다.
  • PROJECT_ID: 쿼리를 실행할 프로젝트 ID입니다.
  • LOCATION: 쿼리가 실행될 리전 또는 멀티 리전입니다. 데이터와 가까운 위치에서 쿼리를 실행하는 것이 좋습니다. 기본값은 미국입니다.

다음은 YAML 파일 예시입니다.

environmentVariables:
- name: "QUERY"
  value: "gs://my_bucket/my/input.sql"
- name: "OUTFILE"
  value: "gs://my_bucket/my/output.orc"
- name: "COPYBOOK"
  value: "gs://my_bucket/my/copybook.cpy"
- name: "TRANSCODE_CONFIGURATION"
  value: "gs://my_bucket/my/transcode-configuration-file.json"
- name: "PROJECT_ID"
  value: "my-project"
- name: "LOCATION"
  value: "US"
- name: "LOG_PROJECT"
  value: "my-log-project"
- name: "IBM_JAVA_OPTIONS"
  value: "-XX:+UseContainerSupport"
  command:
  qsam encode \
    $QUERY
    $OUTFILE
    --copybook ${COPYBOOK_PATH}
    --transcode-configuration ${TRANSCODE_CONFIGURATION_PATH}
    --input-format=BIGQUERY \
    --input-parameter project_id=${PROJECT_ID} \
    --input-parameter location=${LOCATION}

bq export 명령어 사용

environmentVariables:
- name: "COPYBOOK"
  value: "COPYBOOK_FILEPATH"
- name: "LOG_PROJECT"
  value: "LOG_PROJECT"
- name: "IBM_JAVA_OPTIONS"
  value: "-XX:+UseContainerSupport"
command:
  bq export --project_id="PROJECT_NAME" --location="LOCATION" --sql="select * from project.dataset.table" --bucket="BUCKET"

다음을 바꿉니다.

  • COPYBOOK_FILEPATH: 카피북 DD의 경로입니다.
  • LOG_PROJECT: 로그 프로젝트의 이름입니다.
  • PROJECT_NAME: 쿼리를 실행할 프로젝트의 이름입니다.
  • LOCATION: 쿼리가 실행될 위치입니다. 데이터와 가까운 위치에서 쿼리를 실행하는 것이 좋습니다.
  • BUCKET: 출력 바이너리 파일이 포함될 Cloud Storage URI입니다.

다음은 YAML 파일 예시입니다.

environmentVariables:
- name: "COPYBOOK"
  value: "gs://inputbucket/copybook.cpy"
- name: "LOG_PROJECT"
  value: "my-log-project"
- name: "IBM_JAVA_OPTIONS"
  value: "-XX:+UseContainerSupport"
command:
  bq export --project_id="my-project" --run_mode="gcsoutput" --location=US --sql="select * from project.dataset.table" --bucket="gs://outputbucket/data.dat"