Mainframe Connector をスタンドアロン モードで実行する

このページでは、Cloud Run に Mainframe Connector をインストールし、データをコード変換して BigQuery に保存し、BigQuery からエクスポートする方法について説明します。

Mainframe Connector バージョン 5.13.0 以降では、Mainframe Connector を Google Cloudでスタンドアロン ジョブとして実行できます。この機能を使用すると、Mainframe Connector をコンテナ化されたバッチジョブとして実行できます。たとえば、Cloud Run ジョブ、Google Kubernetes Engine ジョブ、または Docker コンテナ内で実行できます。このオプションを使用すると、Mainframe Connector をメインフレームにローカルにインストールする必要がなくなります。また、メインフレームのキュー方式シーケンシャル アクセス メソッド(QSAM)ファイル解析を既存の抽出、変換、読み込み(ETL)ワークフローに簡単に統合できます。

Mainframe Connector のスタンドアロン バージョンを使用する場合は、QSAM ファイルを Google Cloud に読み込む ETL ワークフローを自分で設定する必要があります。

始める前に

  • Mainframe Connector を Cloud Run にデプロイする
  • Mainframe Connector で使用するサービス アカウントを作成するか、既存のサービス アカウントを特定します。このサービス アカウントには、Cloud Storage バケット、BigQuery データセット、使用するその他のリソースにアクセスするための権限が必要です。 Google Cloud
  • 作成したサービス アカウントに Cloud Run 起動元のロールが割り当てられていることを確認します。
  • メインフレーム データが QSAM ファイルとしてすでに使用可能であることを確認します。 Google Cloud

Cloud Run のスタンドアロン モードで Mainframe Connector を使用してデータをコード変換する

Mainframe Connector には、 Google Cloudで Mainframe Connector をスタンドアロン ジョブとして実行する 2 つの方法があります。

qsam コマンドのメリット

qsam コマンドには次のような利点があります。

  • OCCURS 句(リスト)、REDEFINES 句、ネストされたレコードなど、複合データ型をサポートしています。これらのデータ型の詳細については、qsam トランスコーディング リファレンスをご覧ください。
  • トランスコーダ構成ファイルを介して、トランスコーディング プロセスの構成をサポートします。これにより、データを Google Cloudにデコードし、データをメインフレームに戻すときに柔軟性が向上します。
  • エラー検査に使用できるトランスコーディング エラーのテーブルであるスピルオーバー データセットの作成をサポートします。

qsam コマンドを使用して Mainframe Connector をスタンドアロン モードで実行する

qsam コマンドを使用してスタンドアロン モードで Mainframe Connector を使用してデータをコード変換するには、次の操作を行います。

  1. データセットを読み取り、ORC 形式にコード変換して Cloud Storage にアップロードするコマンドを含む YAML ファイルを作成します。入力データセットは、固定または可変レコード長の QSAM ファイルである必要があります。次の YAML サンプル ファイルを使用して、データセットを読み取り、ORC 形式にコード変換し、Cloud Storage にアップロードできます。

    次のサンプルでは、INFILEOUTFILECOPYBOOKTRANSCODE_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. データセットを読み取り、ORC 形式にコード変換して Cloud Storage にアップロードするコマンドを含む YAML ファイルを作成します。入力データセットは、固定または可変レコード長の 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 テーブルをメインフレーム データセットにエクスポートする

BigQuery テーブルをメインフレーム データセットにエクスポートするには、QUERY DD ファイルから SQL 読み取りを実行する YAML ファイルを作成し、次のように結果のデータセットをバイナリ ファイルとして Cloud Storage にエクスポートします。

Cloud Run ジョブを作成して実行する手順は、Cloud Run のスタンドアロン モードで Mainframe Connector を使用してデータをコード変換するで説明されている手順と同じです。唯一の違いは、YAML ファイルに記載されている手順です。Mainframe Connector には、BigQuery テーブルをエクスポートする 2 つの方法があります。

  • 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: クエリが実行されるリージョンまたはマルチリージョン。データに近いロケーションでクエリを実行することをおすすめします。デフォルト値は US です。

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 バケット。

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="my-bucket"