このページでは、メインフレームのデータをメインフレーム上でローカルに サポートされている形式にコード変換してから、 コンテンツを BigQuery に移動する方法について説明します。コード変換とは、情報のコード表現形式を別の形式に変換するプロセスです。このページでは、Mainframe Connector を使用してメインフレーム データを Optimized Row Columnar(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 メインフレームにエンコードし直す際の柔軟性が向上します。
- スピルオーバー データセットの作成をサポートします。 これは、エラー検査に使用できるコード変換エラーのテーブルです。
- 複数の入力形式と出力形式をサポートします。 この機能により、さまざまなデータ ウェアハウスとの間でデータを読み込むことができます。
始める前に
Mainframe Connector を、プロシージャ ライブラリ (PROCLIB)として使用するメインフレーム パーティション分割データセットにインストールします。
メインフレーム上でローカルにコード変換されたデータを に移動する Google Cloud
メインフレーム上でローカルにデータをコード変換してから BigQuery に移動するには、次のタスクを行う必要があります。
- メインフレーム上のデータセットを読み取り、コード変換し、Cloud Storage に ORC 形式でアップロードします(
qsamまたはvsamコマンドでのみサポートされている他の形式については、TranscodeFormat をご覧ください)。コード変換は、qsam decode、vsam decode、またはgsutil cpオペレーション中に行われます(選択したコマンドに基づく)。このオペレーションでは、メインフレームの拡張バイナリ コード 10 進数交換コード(EBCDIC)データセットが、Cloud Storage バケットへのコピー中に UTF-8 の ORC 形式に変換されます。 - データセットを BigQuery テーブルに読み込みます。
- (省略可)BigQuery テーブルに対して SQL クエリを実行します。
- (省略可)BigQuery からメインフレームにデータをエクスポートします。
以降のセクションでは、メインフレーム上でローカルにコード変換されたデータを
に移動する方法について、 Google Cloud
qsam または vsam コマンドと
gsutil cp コマンドを使用して詳しく説明します。
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 /*入力データセットが固定長または可変レコード長の仮想記憶アクセス方式(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 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: クエリを実行するプロジェクトの名前。
(省略可) 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 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: クエリを実行するプロジェクトの名前。
(省略可) 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 \ --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_resultsがfalseの場合、または省略された場合、クエリ結果は匿名の一時テーブルに書き込まれます。
データは OUTFILE DD データセットにエクスポートされます。レコード レイアウトは COPYBOOK DD で記述されます。