メインフレーム上でローカルにコード変換されたデータを Google Cloud に移動します。

このページでは、メインフレームのデータをメインフレーム上でローカルにサポートされている形式にコード変換してから、コンテンツを BigQuery に移動する方法について説明します。トランスコードとは、情報をある形式のコード表現から別の形式のコード表現に変換するプロセスです。このページでは、Mainframe Connector を使用してメインフレーム データを最適化された行の列(ORC)にコード変換し、そのデータを Cloud Storage に保存する方法について説明します。

Mainframe Connector には、メインフレーム上でメインフレーム データをローカルにコード変換する 3 つの方法があります。

qsam コマンドと vsam コマンドの利点

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

始める前に

プロシージャ ライブラリ(PROCLIB)として使用するメインフレーム パーティション分割データセットに Mainframe Connector をインストールします。

メインフレーム上でローカルにコード変換されたデータを Google Cloudに移動する

メインフレームでデータをローカルにコード変換してから BigQuery に移動するには、次のタスクを行う必要があります。

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

以降のセクションでは、メインフレームでローカルにトランスコードされたデータを qsam コマンドまたは vsam コマンドgsutil cp コマンドを使用して Google Cloud に移動する方法について詳しく説明します。

qsam コマンドと vsam コマンドを使用してローカルでトランスコードする

qsam コマンドまたは vsam コマンドを使用してメインフレーム データをメインフレーム上でローカルにコード変換するには、次の手順を行います。

  1. 次のコマンドに示すように、メインフレーム上のデータセットを読み取り、ORC 形式にコード変換するジョブを作成します。INFILE データセットからデータを読み取り、COPYBOOK DD からレコード レイアウトを読み取ります。

    --transcode-configuration 引数を使用してトランスコーダ構成ファイルを指定することで、Mainframe Connector のトランスコード プロセスのデフォルトの動作を変更できます。

    • 入力データセットが固定または可変レコード長のキューに格納された順次アクセス方式(QSAM)ファイルの場合は、次のコマンドを使用します。

      //STEP01 EXEC BQSH
      //INFILE DD DSN=<HLQ>.DATA.FILENAME,DISP=SHR
      //COPYBOOK DD DISP=SHR,DSN=<HLQ>.COPYBOOK.CPY
      //CONFIG DD DISP=SHR,DSN=<HLQ>.CONFIG.SETTINGS
      //STDIN DD *
      BUCKET=BUCKET_NAME
      qsam decode --copybook dd:COPYBOOK --transcode-configuration dd:CONFIG dd:INFILE gs://$BUCKET/tablename
      /*
      
    • 入力データセットが固定または可変レコード長の Virtual Storage Access Method(VSAM)ファイルの場合は、次のコマンドを使用します。

      //STEP01 EXEC BQSH
      //INFILE DD DSN=<HLQ>.DATA.FILENAME,DISP=SHR
      //COPYBOOK DD DISP=SHR,DSN=<HLQ>.COPYBOOK.CPY
      //CONFIG DD DISP=SHR,DSN=<HLQ>.CONFIG.SETTINGS
      //STDIN DD *
      BUCKET=BUCKET_NAME
      vsam decode --copybook dd:COPYBOOK --transcode-configuration dd:CONFIG dd:INFILE gs://$BUCKET/tablename
      /*
      

    BUCKET_NAME は、メインフレーム データのコピー先の Cloud Storage バケットの名前に置き換えます。

    各ジョブ制御言語(JCL)プロシージャでプロジェクト ID やバケット名などの変数を指定しないようにするには、BQSH PROCLIB に追加して、複数の JCL プロシージャで環境変数として参照します。このアプローチでは、環境固有の変数が環境の BQSH PROCLIB に設定されるため、本番環境と非本番環境間のシームレスな移行も実現できます。

    この例では、DD DataPath を使用して、コピーブック、入力、トランスコーディング構成のパスを指定します。その他のオプションについては、DataPath をご覧ください。

    このプロセスで実行されたコマンドをログに記録する場合は、読み込み統計情報を有効にできます。

  2. 次のように、tablename.orc から MY_DATASET.MY_TABLE に ORC ファイル パーティションを読み込む BigQuery 読み込みジョブを作成して送信します。

    Example JCL
    //STEP02 EXEC BQSH
    //STDIN DD *
    BUCKET=BUCKET_NAME
    PROJECT=PROJECT_NAME
    bq load --project_id=$PROJECT \
      myproject:MY_DATASET.MY_TABLE \
      gs://$BUCKET/tablename.orc/*
    /*
    

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

    • BUCKET_NAME: BigQuery に読み込む ORC ファイルを含む Cloud Storage バケットの名前。
    • PROJECT_NAME: クエリを実行するプロジェクトの名前。
  3. (省略可)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/*
    /*
    

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

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

    --transcode-configuration 引数を使用してトランスコーダ構成ファイルを指定すると、Mainframe Connector のトランスコード プロセスのデフォルトの動作を変更できます。

    //STEP04 EXEC BQSH
    //OUTFILE DD DSN=<HLQ>.DATA.FILENAME,DISP=SHR
    //COPYBOOK DD DISP=SHR,DSN=<HLQ>.COPYBOOK.CPY
    //CONFIG DD DISP=SHR,DSN=<HLQ>.CONFIG.SETTINGS
    //QUERY DD DSN=<HLQ>.QUERY.FILENAME,DISP=SHR
    //STDIN DD *
    
    PROJECT=PROJECT_NAME
    qsam encode \
      dd:QUERY
      dd:OUTFILE
      --copybook dd:COPYBOOK
      --transcode-configuration dd:CONFIG
      --input-format=BIGQUERY \
      --input-parameter project_id=PROJECT_NAME \
      --input-parameter location=LOCATION/*
    /*
    

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

    • PROJECT_NAME: クエリを実行するプロジェクトの名前。
    • LOCATION: クエリが実行されるロケーション。データの近くのロケーションでクエリを実行することをおすすめします。

    データは OUTFILE DD データセットにエクスポートされます。レコード レイアウトは COPYBOOK DD で記述されます。コピーブック、outfile、トランスコーディング構成パスのその他のオプションについては、DataPath をご覧ください。

gsutil cp コマンドを使用してローカルでトランスコードする

gsutil cp コマンドを使用してメインフレームでメインフレーム データをローカルでコード変換するには、次の手順を行います。

  1. 次のコマンドに示すように、メインフレーム上のデータセットを読み取り、ORC 形式にコード変換するジョブを作成します。INFILE データセットからデータを読み取り、COPYBOOK DD からレコード レイアウトを読み取ります。

    入力データセットは、固定または可変レコード長でキューに格納された順次アクセス方式(QSAM)ファイルである必要があります。

    //STEP01 EXEC BQSH
    //INFILE DD DSN=<HLQ>.DATA.FILENAME,DISP=SHR
    //COPYBOOK DD DISP=SHR,DSN=<HLQ>.COPYBOOK.FILENAME
    //STDIN DD *
    BUCKET=BUCKET_NAME
    gsutil cp --replace gs://$BUCKET/tablename.orc
    /*
    

    BUCKET_NAME は、メインフレーム データのコピー先の Cloud Storage バケットの名前に置き換えます。

    各 JCL プロシージャでプロジェクト ID やバケット名などの変数を指定しないようにするには、BQSH PROCLIB に変数を追加し、複数の JCL プロシージャで環境変数として参照します。このアプローチでは、環境固有の変数が環境の BQSH PROCLIB に設定されるため、本番環境と非本番環境間のシームレスな移行も実現できます。Mainframe Connector でサポートされている環境変数の一覧については、環境変数をご覧ください。

    この例では、標準入力(STDIN)がインストリーム データとして STDIN DD に提供されています。 または、データソース名(DSN)を使用してこの入力を指定することもできます。これにより、シンボルの置換を簡単に管理できます。

    このプロセスで実行されたコマンドをログに記録する場合は、読み込み統計情報を有効にできます。

  2. 次のように、tablename.orc から MY_DATASET.MY_TABLE に ORC ファイル パーティションを読み込む BigQuery 読み込みジョブを作成して送信します。

    Example JCL
    //STEP02 EXEC BQSH
    //STDIN DD *
    BUCKET=BUCKET_NAME
    PROJECT=PROJECT_NAME
    bq load --project_id=$PROJECT \
      myproject:MY_DATASET.MY_TABLE \
      gs://$BUCKET/tablename.orc/*
    /*
    

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

    • BUCKET_NAME: BigQuery に読み込む ORC ファイルを含む Cloud Storage バケットの名前。
    • PROJECT_NAME: クエリを実行するプロジェクトの名前。
  3. (省略可)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/*
    /*
    

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

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

    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
    bq export --project_id=$PROJECT \
      --dataset_id=$DATASET_ID \
      --destination_table=$DESTINATION_TABLE \
      --location="US" \
      --remoteHost <mainframe-connector-url>.a.run.app \
      --remotePort 443
    /*
    

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

    • PROJECT_NAME: クエリを実行するプロジェクトの名前。
    • DATASET_ID: エクスポートするテーブルを含む BigQuery データセット ID。
    • DESTINATION_TABLE: エクスポートする BigQuery テーブル。

    データは OUTFILE DD データセットにエクスポートされます。レコード レイアウトは COPYBOOK DD で記述されます。