qsam コマンド リファレンス

Mainframe Connector は、キューに入れられた順次アクセス方式(QSAM)フラット ファイルを Google Cloud 互換形式にコード変換します。また、qsam コマンドを使用してその逆の変換も行います。qsam コマンドは、次のトランスコード オペレーションを実行します。

  • qsam decode コマンドは、メインフレーム データを Google Cloudにデコードします。
  • qsam encode コマンドは、メインフレームに Google Cloud データをエンコードします。

これらのオペレーションは対称変換を実行します。つまり、同じデータを Google Cloudとの間で移動します。COBOL データ構造定義を使用して、コピーブック ファイル内の QSAM ファイルの構造を定義できます。Mainframe Connector トランスコーダ構成ファイルを使用して、高度な変換を定義することもできます。次の図は、これらのオペレーションについて詳しく説明しています。

メインフレーム データを Google Cloudにデコードする
メインフレーム データを Google Cloudにデコードする
 Google Cloudからメインフレーム データをエンコードする
メインフレームに Google Cloud データをエンコードする

このページでは、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_0field_1 などの接尾辞が付きます。データを読み取るときに、このようなフィールドの 1 つのみに値が割り当てられます。
タイムスタンプ TIMESTAMP

フィールドのスコープ

フィールドが次のいずれかである場合、そのフィールドは別のフィールドのスコープ内と見なされます。

  • それを必要とするフィールドの前に定義されている兄弟フィールド。
  • 親レコード内のフィールドで、それを必要とするフィールドの前に定義されているもの。