このページでは、メインフレームのデータをメインフレーム上でローカルに Optimized Row Columnar(ORC)形式にコード変換してから、コンテンツを BigQuery に移動する方法について説明します。
コード変換とは、情報をある形式のコーディング表現から別の形式(この場合は ORC など)に変換するプロセスです。ORC は、Apache Hadoop エコシステムで広く使用されているオープンソースの列指向のデータ形式であり、BigQuery でサポートされています。
始める前に
プロシージャ ライブラリ(PROCLIB)として使用するメインフレーム パーティション分割データセットに Mainframe Connector をインストールします。
メインフレーム上でローカルにコード変換されたデータを Google Cloud に移動する
メインフレームでローカルにデータをコード変換してから BigQuery に移動するには、次の作業を行う必要があります。
- メインフレーム上のデータセットを読み取り、コード変換し、ORC 形式で Cloud Storage にアップロードします。コード変換は
cp
オペレーション中に行われます。このオペレーションでは、メインフレームの拡張バイナリ コード 10 進数交換コード(EBCDIC)データセットが、Cloud Storage バケットへのコピー中に UTF-8 の ORC 形式に変換されます。 - データセットを BigQuery テーブルに読み込みます。
- (省略可)BigQuery テーブルに対して SQL クエリを実行します。
- (省略可)BigQuery からメインフレームに戻すようにデータをエクスポートします。
これらのタスクを実行する手順は次のとおりです。
次のように、メインフレーム上のデータセットを読み取り、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)を使用してこの入力を提供することもできます。これにより、記号の置換を簡単に管理できます。
このプロセスで実行されたコマンドをログに記録するには、負荷統計情報を有効にすることができます。
次のように、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
: クエリを実行するプロジェクトの名前。
(省略可)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 で記述されます。