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

このページでは、メインフレームのデータをメインフレーム上でローカルに Optimized Row Columnar(ORC)形式にコード変換してから、コンテンツを BigQuery に移動する方法について説明します。

コード変換とは、情報をある形式のコーディング表現から別の形式(この場合は ORC など)に変換するプロセスです。ORC は、Apache Hadoop エコシステムで広く使用されているオープンソースの列指向のデータ形式であり、BigQuery でサポートされています。

始める前に

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

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

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

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

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

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

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

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

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

    Example JCL
    //STEP02 EXEC BQSH
    //STDIN DD *
    PROJECT=PROJECT_NAME
    bq load --project_id=$PROJECT \
      myproject:DATASET.TABLE \
      gs://bucket/tablename.orc/*
    /*
    

    以下を置き換えます。

    • 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 で記述されます。