Mainframe Connector は、キューに入れられた順次アクセス方式(QSAM)フラット ファイルを Google Cloud 互換形式にコード変換します。また、qsam
コマンドを使用してその逆の変換も行います。qsam
コマンドは、次のトランスコード オペレーションを実行します。
qsam decode
コマンドは、メインフレーム データを Google Cloudにデコードします。qsam encode
コマンドは、メインフレームに Google Cloud データをエンコードします。
これらのオペレーションは対称変換を実行します。つまり、同じデータを Google Cloudとの間で移動します。COBOL データ構造定義を使用して、コピーブック ファイル内の QSAM ファイルの構造を定義できます。Mainframe Connector トランスコーダ構成ファイルを使用して、高度な変換を定義することもできます。次の図は、これらのオペレーションについて詳しく説明しています。


このページでは、qsam decode
コマンドと qsam encode
コマンドを使用したコード変換プロセスの概要、メインフレーム データの物理型と論理型、Optimized Row Columnar(ORC)と BigQuery 型のマッピングについて説明します。
物理的なタイプ
物理タイプは、フィールドデータがディスクに配置される方法を定義します。物理型は Mainframe Connector 論理型に変換され、データベース型(ORC または BigQuery)にマッピングできます。
英数字フィールド
英数字フィールドは、英数字の文字列を処理するために使用されます。データは文字列として扱われ、拡張バイナリ コード 10 進数交換コード(EBCDIC)などの特定のエンコードで文字列として保存されます。英数字フィールドのエンコードまたはデコード中にエラーが発生しても、トランスコード処理は終了しません。代わりに、エラーが発生した位置にエンコード用の SUB
文字が配置され、トランスコード処理が続行されます。
画像記号 | 画像の属性 | 論理型 |
---|---|---|
A、B、G、N、U、X、9 | DISPLAY、DISPLAY-1、NATIONAL、UTF-8 | 文字列 |
例
01 REC 02 STR PIC X(10) 02 NATIONAL PIC N(10) 02 UTF8 PIC U(1) USAGE UTF-8
エンコード形式
英数字フィールドは次のようにエンコードされます。
- X フィールドのデフォルトは EBCDIC エンコード
- 国別(N)フィールドは、デフォルトで Unicode 変換形式 16 ビット(UTF-16 BE)エンコードになります。
- UTF8 フィールドのデフォルトは Unicode Transformation Format-8(UTF-8)エンコードです
Mainframe Connector は、ほとんどのシングルバイト文字セット(SBCS)とダブルバイト文字セット(DBCS)のエンコードをサポートしています。必要に応じて、独自の カスタム SBCS エンコードを定義することもできます。
バイナリ フィールド(計算)
バイナリ フィールドは、符号付きまたは符号なしのビッグ エンディアン整数として保存されます。Mainframe Connector では、バイナリ フィールドは常に、符号付き 64 ビット整数として論理的に保存されます。したがって、符号なし長整数入力では下位 63 ビットのみを使用する必要があります。使用しない場合、トランスコード プロセスは失敗します。
画像記号 | 画像の属性 | 論理型 |
---|---|---|
S、9 | COMP、コンピューティング | long(64 ビット符号付き整数) |
例
01 REC 02 INT PIC S9(8) COMP
16 進浮動小数点フィールド(COMP-1、COMP-2)
16 進数浮動小数点(HFP)フィールドは完全にサポートされています。Mainframe Connector は、HFP フィールドに単精度と倍精度の両方の形式を使用します。
画像記号 | 画像の属性 | 論理型 |
---|---|---|
COMP-1、COMP-2 | ダブル(64 ビット符号付き浮動小数点) |
例
01 REC 03 HFP-SINGLE COMP-1. 03 HFP-DOUBLE COMP-2.
パック 10 進数フィールド(COMP-3)
パックされた小数フィールドは完全にサポートされています。トランスコード プロセス中に、Mainframe Connector は指定された精度とスケールに基づいて、最もパフォーマンスの高い論理型を選択します。
画像記号 | 画像の属性 | 論理型 |
---|---|---|
S、9、V | COMP-3 | Long(符号付き 64 ビット整数)、BigInteger、Decimal64、BigDecimal |
例
01 REC 02 DEC PIC S9(2)V9(8) COMP-3
ゾーン付き小数フィールド(DISPLAY)
ゾーン付き小数フィールドは完全にサポートされています。トランスコード プロセス中に、Mainframe Connector は指定された精度とスケールに基づいて、最もパフォーマンスの高い論理型を選択します。
画像記号 | 画像の属性 | 論理型 |
---|---|---|
S、9、V | ディスプレイ | Long(符号付き 64 ビット整数)、BigInteger、Decimal64、BigDecimal |
例
01 REC 02 DEC PIC S9(2)V9(8) DISPLAY
リスト(OCCURS)
リストは、同じタイプの要素を順序立てて集めたものです。Mainframe Connector は、次のタイプのリストをサポートしています。
固定リスト
固定リストは、リストに含まれるアイテムの正確な数(アイテム数)が事前にわかっていて、この数が常に同じである場合に使用されます。固定リストのアイテムのサイズは可変です。
固定リストは、コピーブックで次のように定義されます。
01 REC.
02 LIST OCCURS 5 TIMES PIC X(1).
02 FLD PIC X(5).
次の図は、アイテム数が 5 の固定リストのレイアウトを示しています。

動的リスト
動的リストは、リストに含まれるアイテムの最大数が事前にわかっている場合に使用します。ただし、実際の商品アイテム数は不明で、別のフィールドによって異なります。動的リストのアイテムのサイズは可変です。
動的リストのプロパティは次のとおりです。
- 長さフィールドは、精度を失うことなく整数に変換できます。
- length フィールドはスコープ内にある必要があります。
- 最小アイテム数は、コード変換プロセスでは適用されません。
動的リストは、コピーブックで次のように定義されます。
01 REC.
02 LEN PIC S9(2) BINARY.
02 LIST OCCURS 1 TO 5 TIMES
DEPENDING ON LEN PIC X(1).
02 FLD PIC X(5).
次の図は、アイテムの最大数が 5 個の動的リストのレイアウトを示しています。

圧縮された動的リスト
圧縮された動的リストは、リストに含まれるアイテムの最大数が別のフィールドに依存し、アイテムが圧縮されている場合に使用されます。
圧縮された動的リストのプロパティは次のとおりです。
- 長さフィールドは、精度を失うことなく整数に変換できます。
- length フィールドはスコープ内にある必要があります。
- 最小アイテム数は、コード変換プロセスでは適用されません。
圧縮された動的リストは、コピーブックで次のように定義されます。
01 REC.
02 LEN PIC S9(2) BINARY.
02 LIST OCCURS UNBOUNDED
DEPENDING ON LEN PIC X(1).
02 FLD PIC X(5).
次の図は、圧縮された動的リストのレイアウトを示しています。

再定義(REDEFINES)
再定義は、同じデータに複数のデコード方法を指定できる COBOL 機能です。デコード プロセス中に、再定義が結果テーブルに追加列として表示され、データが複数回デコードされます。
再定義のプロパティは次のとおりです。
- 同じ基になるデータに対する再定義は兄弟フィールドではないため、相互のスコープにはありません。
- 再定義されたフィールドは、宣言されたときではなく、基になるフィールドがデコードされたときにデコードされます。基になるフィールドは、再定義されたフィールドのスコープも決定します。
- 再定義されたフィールドはすべて同じサイズで、固定サイズにする必要があります。つまり、再定義されたフィールドでは、可変長テキスト フィールドと圧縮された動的リストを使用できません。
再定義は、コピーブックで次のように定義されます。
01 Rec.
05 Field-1 PIC X(100).
05 Group-1 REDEFINES Field-1.
10 Field-2 PIC 9(4) comp-3.
10 Field-3 PIC X(96).
05 Group-2 REDEFINES Field-1.
10 Field-4 PIC 9(4) comp-5.
10 Field-5 PIC X(50).
10 Field-6 PIC X(46).
次の図は、再定義されたフィールドのレイアウトを示しています。

再定義は、次のような一般的な方法を含め、さまざまな方法で使用できます。
同じデータを 2 つの異なる方法で表示する: これは、再定義を使用する最も一般的な方法です。エンコード プロセスでは、データが入力される順序は定義されていないため、エクスポート時に BigQuery のデータの整合性が維持されるようにする必要があります。
例
01 REC. 02 FULL-NAME PIC X(12). 02 NAME REDEFINES FULL-NAME. 05 FIRST-NAME PIC X(6). 05 LAST-NAME PIC X(6).
タグ付きユニオンを使用する: タグ付きユニオンは、フィールドに応じてレコードのデータの解釈の 1 つだけが必要な場合に、再定義を使用する一般的な方法です。null インジケーターを使用すると、不要な解釈を null としてマークできます。また、null インジケータが遅延評価されるため、解析されなくなります。タグ付きユニオンのプロパティは次のとおりです。
- 複数の再定義が定義されている場合、エンコード プロセスは失敗します。
- 等価性と非等価性のチェックのみが実装されています。
例
01 REC. 05 TYPE PIC X(5). 05 DATA PIC X(100). 05 VARIANT-1 REDEFINES DATA. 10 Field-2 PIC 9(4) comp-3. 10 Field-3 PIC X(96). 05 VARIANT-2 REDEFINES DATA. 10 Field-4 PIC 9(4) comp-5. 10 Field-5 PIC X(50). 10 Field-6 PIC X(46).
タグ付きユニオンを実装するには、次の例を使用します。
{ "field_override": [ { "field": "VARIANT-1", "modifier": { "null_if": { "target_field": "TYPE", "non_null_value": "VAR1" } } }, { "field": "VARIANT-2", "modifier": { "null_if": { "target_field": "TYPE", "non_null_value": "VAR2" } } } ], "transformations": [ { "field": "DATA", "transformation": { "exclude": {}} } ] }
論理型
複数の形式間でデータをトランスコードするために、Mainframe Connector はすべてのデータを論理型に基づく中間表現(IR)に変換します。入力形式と出力形式は、データが論理型との間で変換される方法を定義します。次の表に、Mainframe Connector でサポートされているすべての論理型を示します。
論理型 | 説明 |
---|---|
長い | 符号付き 64 ビット数を表します。 |
文字列 | 特定のエンコードに関係のない Unicode 文字の文字列を表します。有効な Unicode コードポイントはすべて表せます。ただし、一部の文字は、すべてのエンコード プロセスでエンコードできない場合があります。論理文字列は可変長です。 |
Decimal64 | 任意のスケールの 64 ビット符号付き整数に収まる範囲の 10 進数を表します。 |
BigInteger | 任意のサイズの整数を表します。 |
BigDecimal | 任意のスケールと精度の 10 進数を表します。 |
バイト | 可変サイズのバイト配列を表します。 |
日付 | 特定のタイムゾーンに依存しない日付を表します。 |
Double | IEEE 浮動小数点演算標準(IEEE 754)で説明されている倍精度浮動小数点数を表します。 |
リスト | 特定のタイプのアイテムのリストを表現します。リストには任意の数のアイテムを含めることができます。 |
記録 | さまざまなタイプの固定された一連のフィールドを表します。 |
タイムスタンプ | 特定のタイムゾーンに依存しないタイムスタンプを表します。 |
ORC 型のマッピング
次の表に、Mainframe Connector の論理型と ORC 型のマッピングを示します。
論理型 | ORC タイプ |
---|---|
長い | 64 ビット整数(bigint) |
文字列 | UTF-8 でエンコードされた文字列 |
Decimal64 | decimal64 |
BigInteger | decimal |
BigDecimal | decimal |
バイト | バイナリ blob |
日付 | 日付 |
Double | float64 |
リスト | list |
記録 | 構造体 |
タイムスタンプ | timestamp(ローカル タイムゾーンなし) |
BigQuery の型マッピング
次の表に、Mainframe Connector の論理型と BigQuery データ型のマッピングを示します。
論理型 | BigQuery のデータ型 | コメント |
---|---|---|
長い | INT64 | |
文字列 | STRING | |
Decimal64 | NUMERIC | |
BigInteger | NUMERIC | |
BigDecimal | NUMERIC | |
バイト | BYTES | |
日付 | DATE | |
Double | FLOAT64 | |
リスト | ARRAY | ネストされたリストとマップのリストはサポートされていません。 |
記録 | STRUCT | union に 1 つのバリアントしかない場合は、NULLABLE フィールドに変換されます。それ以外の場合は、union は NULLABLE フィールドのリストを持つ RECORD に変換されます。NULLABLE フィールドには、field_0 、field_1 などの接尾辞が付きます。データを読み取るときに、このようなフィールドの 1 つのみに値が割り当てられます。 |
タイムスタンプ | TIMESTAMP |
フィールドのスコープ
フィールドが次のいずれかである場合、そのフィールドは別のフィールドのスコープ内と見なされます。
- それを必要とするフィールドの前に定義されている兄弟フィールド。
- 親レコード内のフィールドで、それを必要とするフィールドの前に定義されているもの。