Google Cloud 上でメインフレーム データをリモートでコード変換する

メインフレーム上でローカルにデータのコード変換を行うのは CPU 使用率の高いプロセスであり、100 万命令/秒(MIPS)の高い消費につながります。これを回避するには、Cloud Run を使用して Google Cloud でメインフレーム データをリモートで移動してコード変換します。これにより、ビジネス クリティカルなタスクにメインフレームを解放し、MIPS の消費を削減できます。

次の図は、メインフレーム データを Cloud Storage バケットに移動し、Cloud Run を使用してデータを ORC 形式にコード変換してから、コンテンツを BigQuery に移動する方法を示しています。

メインフレーム データをリモートでコード変換する
メインフレーム データをリモートでコード変換する

始める前に

メインフレーム データを Google Cloud に移動し、Cloud Run を使用してリモートでコード変換する

メインフレーム データを Google Cloud に移動し、Cloud Run を使用してリモートでコード変換するには、次のタスクを行う必要があります。

  1. メインフレーム上のデータセットを読み取り、コード変換し、ORC 形式で Cloud Storage にアップロードします。コード変換は cp オペレーション中に行われます。このオペレーションでは、メインフレームの拡張バイナリ コード 10 進数交換コード(EBCDIC)データセットが、Cloud Storage バケットへのコピー中に UTF-8 の ORC 形式に変換されます。
  2. データセットを BigQuery テーブルに読み込みます。
  3. (省略可)BigQuery テーブルに対して SQL クエリを実行します。
  4. (省略可)BigQuery から Cloud Storage のバイナリ ファイルにデータをエクスポートします。

これらのタスクを実行する手順は次のとおりです。

  1. メインフレームで、次のようにメインフレーム上のデータセットを読み取り、ORC 形式にコード変換するジョブを作成します。INFILE データセットからデータを読み取り、COPYBOOK DD からレコード レイアウトを読み取ります。入力データセットは、固定または可変レコード長でキューに格納された順次アクセス方式(QSAM)ファイルである必要があります。

    Mainframe Connector でサポートされている環境変数の一覧については、環境変数をご覧ください。

    //STEP01 EXEC BQSH
    //INFILE DD DSN=<HLQ>.DATA.FILENAME,DISP=SHR
    //COPYBOOK DD DISP=SHR,DSN=<HLQ>.COPYBOOK.FILENAME
    //STDIN DD *
    gsutil cp --replace gs://mybucket/tablename.orc --remote \
      --remoteHost <mainframe-connector-url>.a.run.app \
      --remotePort 443
    /*
    

    このプロセスで実行されたコマンドをログに記録するには、負荷統計情報を有効にすることができます。

  2. (省略可)QUERY DD ファイルから SQL 読み取りを実行する BigQuery クエリジョブを作成して送信します。 通常、クエリは MERGE または SELECT INTO DML ステートメントであり、BigQuery テーブルが変換されます。Mainframe Connector は、ジョブ指標に記録しますが、クエリ結果をファイルに書き込みません。

    BigQuery にはさまざまな方法でクエリできます。インラインでクエリすることも、DD を使用して別のデータセットを使用してクエリすることもできます。DSN を使用して別のデータセットを使用してクエリすることもできます。

    Example JCL
    //STEP03 EXEC BQSH
    //QUERY DD DSN=<HLQ>.QUERY.FILENAME,DISP=SHR
    //STDIN DD *
    PROJECT=PROJECT_NAME
    LOCATION=LOCATION
    bq query --project_id=$PROJECT \
      --location=$LOCATION \
      --remoteHost <mainframe-connector-url>.a.run.app \
      --remotePort 443/*
    /*
    

    また、環境変数 BQ_QUERY_REMOTE_EXECUTION=true を設定する必要があります。

    次のように置き換えます。

    • PROJECT_NAME: クエリを実行するプロジェクトの名前。
    • LOCATION: クエリを実行するロケーション。データに近いロケーションでクエリを実行することをおすすめします。
  3. (省略可)QUERY DD ファイルから SQL 読み取りを実行し、結果のデータセットをバイナリ ファイルとして Cloud Storage にエクスポートするエクスポート ジョブを作成して送信します。

    Example JCL
    //STEP04 EXEC BQSH
    //OUTFILE DD DSN=<HLQ>.DATA.FILENAME,DISP=SHR
    //COPYBOOK DD DISP=SHR,DSN=<HLQ>.COPYBOOK.FILENAME
    //QUERY DD DSN=<HLQ>.QUERY.FILENAME,DISP=SHR
    //STDIN DD *
    PROJECT=PROJECT_NAME
    DATASET_ID=DATASET_ID
    DESTINATION_TABLE=DESTINATION_TABLE
    BUCKET=BUCKET
    bq export --project_id=$PROJECT \
      --dataset_id=$DATASET_ID \
      --destination_table=$DESTINATION_TABLE \
      --location="US" \
      --bucket=$BUCKET \
      --remoteHost <mainframe-connector-url>.a.run.app \
      --remotePort 443
    /*
    

    以下を置き換えます。

    • PROJECT_NAME: クエリを実行するプロジェクトの名前。
    • DATASET_ID: エクスポートするテーブルを含む BigQuery データセット ID。
    • DESTINATION_TABLE: エクスポートする BigQuery テーブル。
    • BUCKET: 出力バイナリ ファイルを含む Cloud Storage バケット。

次のステップ