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

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

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 をスタンドアロン ジョブとして実行する方法が 2 つあります。

qsam コマンドのメリット

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

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

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

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

  1. 次の処理を行うコマンドを含む 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. 次の処理を行うコマンドを含む 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 テーブルをメインフレーム データセットにエクスポートする

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

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 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"