このページでは、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 ワークフローを自分で設定する必要があります。
始める前に
- Mainframe Connector を Cloud Run にデプロイする。
- Mainframe Connector で使用するサービス アカウントを作成するか、既存のサービス アカウントを特定します。このサービス アカウントには、Cloud Storage バケット、BigQuery データセット、使用するその他の Google Cloud リソースにアクセスするための権限が必要です。
- 作成したサービス アカウントに Cloud Run 起動元のロールが割り当てられていることを確認します。
- メインフレーム データが QSAM ファイルとして Google Cloud ですでに使用可能であることを確認します。
Cloud Run のスタンドアロン モードで Mainframe Connector を使用してデータをコード変換する
スタンドアロン モードで Mainframe Connector を使用してデータをコード変換する手順は次のとおりです。
データセットを読み取り、ORC 形式にコード変換して Cloud Storage にアップロードするコマンドを含む YAML ファイルを作成します。入力データセットは、固定または可変レコード長の QSAM ファイルである必要があります。次の YAML サンプル ファイルを使用して、データセットを読み取り、ORC 形式にコード変換し、Cloud Storage にアップロードできます。
次のサンプルでは、INFILE データセットからデータを読み取り、COPYBOOK DD からレコード レイアウトを読み取ります。
environmentVariables: - name: "INFILE" value: <var>"INFILE"</var> - name: "INFILE_DSN" value: <var>"INFILE_DSN"</var> - name: "GCSDSNURI" value: <var>"INFILE_DSN_FILEPATH"</var> - name: "COPYBOOK" value: <var>"COPYBOOK_FILEPATH"</var> - name: "LOG_PROJECT" value: <var>"LOG_PROJECT"</var> - 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 でサポートされている環境変数の一覧については、環境変数をご覧ください。
このプロセスで実行されたコマンドをログに記録するには、負荷統計情報を有効にすることができます。
次のコマンドを使用して
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 ファイルの場所に置き換えます。
次のコマンドを使用して、新しいジョブをデプロイします。
gcloud run jobs replace job.yaml
次のコマンドを使用してジョブを実行します。
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 ファイルに記載されている手順です。
environmentVariables:
- name: "COPYBOOK"
value: "<var>COPYBOOK_FILEPATH</var>"
- name: "LOG_PROJECT"
value: "<var>LOG_PROJECT</var>"
- name: "IBM_JAVA_OPTIONS"
value: "-XX:+UseContainerSupport"
command:
bq export --project_id="<var>PROJECT_NAME</var>" --location=<var>LOCATION</var> --sql="select * from project.dataset.table" --bucket="<var>BUCKET</var>"
次のように置き換えます。
COPYBOOK_FILEPATH
: コピーブック DD のパス。LOG_PROJECT
: ログ プロジェクトの名前。PROJECT_NAME
: クエリを実行するプロジェクトの名前。LOCATION
: クエリを実行するロケーション。データに近いロケーションでクエリを実行することをおすすめします。BUCKET
: 出力バイナリ ファイルを含む Cloud Storage バケット。
YAML ファイルの例を次に示します。
environmentVariables:
- name: "COPYBOOK"
value: "gs://inputbucket/copybook.cpy"
- name: "LOG_PROJECT"
value: "the log project"
- name: "IBM_JAVA_OPTIONS"
value: "-XX:+UseContainerSupport"
command:
bq export --project_id="<var>PROJECT_NAME</var>" --location=US --sql="select * from project.dataset.table" --bucket="<var>BUCKET</var>"