このページでは、メインフレームのデータをメインフレーム上でローカルにサポートされている形式にコード変換してから、コンテンツを BigQuery に移動する方法について説明します。トランスコードとは、情報をある形式のコード表現から別の形式のコード表現に変換するプロセスです。このページでは、Mainframe Connector を使用してメインフレーム データを最適化された行の列(ORC)にコード変換し、そのデータを Cloud Storage に保存する方法について説明します。
Mainframe Connector には、メインフレーム上でメインフレーム データをローカルにコード変換する 3 つの方法があります。
qsam
コマンドを使用する(リリース 5.16.0 以降)vsam decode
コマンドを使用する(リリース 5.18.0 以降)gsutil cp
コマンドを使用する
qsam
コマンドと vsam
コマンドの利点
qsam
コマンドと vsam
コマンドには、次の利点があります。
- OCCURS 句(リスト)、REDEFINES 句、ネストされたレコードなど、複合データ型のサポート。これらのデータ型の詳細については、
qsam
とvsam
のトランスコーディング リファレンスをご覧ください。 - トランスコーダー構成ファイルによるトランスコード プロセスの構成のサポート。この機能により、データを Google Cloudにデコードし、データをメインフレームにエンコードし直す際の柔軟性が向上します。
- エラー検査に使用できるトランスコード エラーのテーブルであるスピルオーバー データセットの作成をサポートします。
- 複数の入力形式と出力形式をサポートします。この機能を使用すると、さまざまなデータ ウェアハウスとの間でデータを読み込むことができます。
始める前に
プロシージャ ライブラリ(PROCLIB)として使用するメインフレーム パーティション分割データセットに Mainframe Connector をインストールします。
メインフレーム上でローカルにコード変換されたデータを Google Cloudに移動する
メインフレームでデータをローカルにコード変換してから BigQuery に移動するには、次のタスクを行う必要があります。
- メインフレーム上のデータセットを読み取り、コード変換し、ORC 形式で Cloud Storage にアップロードします(
qsam
コマンドまたはvsam
コマンドでのみサポートされている他の形式については、TranscodeFormat をご覧ください)。コード変換は、qsam decode
、vsam decode
、gsutil cp
オペレーション(選択したコマンドに基づく)中に行われます。このオペレーションでは、メインフレームの拡張バイナリ コード 10 進数交換コード(EBCDIC)データセットが、Cloud Storage バケットへのコピー中に UTF-8 の ORC 形式に変換されます。 - データセットを BigQuery テーブルに読み込みます。
- (省略可)BigQuery テーブルで SQL クエリを実行します。
- (省略可)BigQuery からメインフレームにデータをエクスポートします。
以降のセクションでは、メインフレームでローカルにトランスコードされたデータを qsam
コマンドまたは vsam
コマンドと gsutil cp
コマンドを使用して Google Cloud に移動する方法について詳しく説明します。
qsam
コマンドと vsam
コマンドを使用してローカルでトランスコードする
qsam
コマンドまたは vsam
コマンドを使用してメインフレーム データをメインフレーム上でローカルにコード変換するには、次の手順を行います。
次のコマンドに示すように、メインフレーム上のデータセットを読み取り、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
をご覧ください。このプロセスで実行されたコマンドをログに記録する場合は、読み込み統計情報を有効にできます。
次のように、
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
: クエリを実行するプロジェクトの名前。
(省略可)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
: クエリが実行されるロケーション。データの近くのロケーションでクエリを実行することをおすすめします。
(省略可)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
コマンドを使用してメインフレームでメインフレーム データをローカルでコード変換するには、次の手順を行います。
次のコマンドに示すように、メインフレーム上のデータセットを読み取り、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)を使用してこの入力を指定することもできます。これにより、シンボルの置換を簡単に管理できます。
このプロセスで実行されたコマンドをログに記録する場合は、読み込み統計情報を有効にできます。
次のように、
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
: クエリを実行するプロジェクトの名前。
(省略可)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
: クエリが実行されるロケーション。データの近くのロケーションでクエリを実行することをおすすめします。
(省略可)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 で記述されます。