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

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

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

qsam コマンドと vsam コマンドのメリット

qsam コマンドと vsam コマンドには、次のようなメリットがあります。

始める前に

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

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

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

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

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

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
      /*
      
    • 入力データセットが固定長または可変レコード長の仮想記憶アクセス方式(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 load ジョブを作成して送信します。

    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 load ジョブを作成して送信します。

    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 \
      --allow_large_results \
      --location="US" \
      --remoteHost <mainframe-connector-url>.a.run.app \
      --remotePort 443
    /*
    

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

    • PROJECT_NAME: クエリを実行する Google Cloud プロジェクトの名前。
    • DATASET_ID: BigQuery データセット ID。SQL クエリでデータセットを明示的に指定していないテーブル名のフォールバック データセットとして使用されます。また、テーブル仕様でデータセットが明示的に定義されていない場合は、 DESTINATION_TABLEのロケーションを解決するために使用されます。
    • DESTINATION_TABLE: クエリ結果がエクスポートされる前に書き込まれる中間 BigQuery テーブル。これは、allow_large_results が設定されている場合にのみ使用されます。allow_large_resultsfalse の場合、または省略された場合、クエリ結果は匿名の一時テーブルに書き込まれます。

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