トランスコーダの構成

JSON ファイルに必要な構成を追加することで、Mainframe Connector トランスコーダを構成できます。このファイルは、トランスコーダ構成ファイルと呼ばれます。構成セクションで指定されているように構成を定義する必要があります。qsam encode コマンドと qsam decode コマンドは、トランスコーダー構成ファイルを使用してデータ トランスコードを実行します。

このページでは、Mainframe Connector トランスコーダを構成するさまざまな方法について説明します。

構成

Configuration オブジェクトは、トランスコーダー構成のルートです。これには、トランスコーダのすべての構成オプションが含まれています。

JSON 表現
{
    "defaults": object (DefaultsSection),
    "field_suffixes": object (FieldSuffix),
    "field_overrides": object (FieldOverride),
    "transformations": object (Transformation),
    "schema_validation_mode": enum (SchemaValidationMode),
    "header_records_to_skip": long,
    "record_filter_condition": string
}
フィールド
defaults

object (DefaultsSection)

Cobol アーキタイプのデフォルトのフィールド修飾子を指定します。

field_suffixes

object (FieldSuffix)

フィールドの接尾辞を指定します。

field_overrides

object (FieldOverride)

フィールドのオーバーライドを指定します。

transformations

object (Transformation)

フィールド変換を指定します。

schema_validation_mode

enum (SchemaValidationMode)

スキーマ検証モードを指定します。

header_records_to_skip

long

スキップする最初のレコードの数を指定します。

record_filter_condition

string

レコードのフィルタ条件を指定します。

フィルタは次の演算子をサポートしています。

  • 比較演算子: `==`, `!=`, `<`, `<=`, `>`, `>=`.
  • 論理演算子: `&&` (AND), `||` (OR).
  • リストの包含: `in`(値がリスト変数に存在するかどうかを確認する場合)。
  • 算術演算子: `+`, `-`, `*`, `/`, `%`.
  • 文字列関数とリスト関数:
    • size(): 文字列またはリストの長さを返します。
    • contains(substring): 文字列に指定された部分文字列が含まれているかどうかを確認します。
比較と演算は、同じデータ型の変数または定数間で行う必要があります。

例:

"record_filter_condition": "(DATE > '2025-01-12' ) && ((SCORE_A + SCORE_B) > 134)

DefaultsSection

DefaultsSection オブジェクトを使用して、COBOL 型ごとにデフォルトの変更を指定できます。これらは、接尾辞やオーバーライドの変更の前に適用されます。

JSON 表現
{
    "alpha_numeric_display": object (FieldModifier),
    "numeric_display": object (FieldModifier),
    "binary": object (FieldModifier),
    "packed_decimal": object (FieldModifier),
    "national": object (FieldModifier),
    "utf8": object (FieldModifier),
    "dbcs": object (FieldModifier),
    "hexadecimal_floating_point": object (FieldModifier)
}
フィールド
alpha_numeric_display

object (FieldModifier)

英数字(PIC X)フィールドのデフォルト値を指定します。

numeric_display

object (FieldModifier)

数値表示(ゾーン 10 進数)フィールドのデフォルトを指定します。

binary

object (FieldModifier)

バイナリ数(COMP)フィールドのデフォルトを指定します。

packed_decimal

object (FieldModifier)

パック 10 進数(COMP-3)フィールドのデフォルト値を指定します。

national

object (FieldModifier)

国別(PIC N)フィールドのデフォルト値を指定します。

utf8

object (FieldModifier)

UTF-8(PIC U)フィールドのデフォルトを指定します。

dbcs

object (FieldModifier)

dbcs(DISPLAY-1)フィールドのデフォルト。

hexadecimal_floating_point

object (FieldModifier)

16 進浮動小数点(COMP-1、COMP-2)フィールドのデフォルト。

FieldSuffix

フィールド接尾辞は、接尾辞を持つすべてのフィールドに適用されます。

フィールドは、末尾がハイフン(-)またはアンダースコア(_)で、その後に接尾辞が続く場合に一致します。

接尾辞では大文字と小文字が区別されません。

FieldSuffix 修飾子は、FieldOverride 修飾子の後に適用されます。

たとえば、接尾辞 NID に定義された修飾子は、FLD-NID という名前のフィールドに適用されますが、FUNID というフィールドには適用されません。

JSON 表現
{
    "suffix": string,
    "is_inverse": boolean,
    "modifier": object (FieldModifier)
}
フィールド
suffix

string

この接尾辞が付いたフィールドには、修飾子が適用されます。

is_inverse

boolean

修飾子が逆フィールド修飾子かどうかを指定します。逆フィールド修飾子は、修飾子なしのフィールドと同じ名前の別のフィールドに修飾子を適用します。たとえば、同じレコードに FLD-NID フィールドと FLD フィールドの両方が存在する場合、修飾子は FLD に適用されます。

逆フィールド修飾子を使用する場合、フィールド名を使用してサフィックス付きのフィールドを参照できるときはいつでも、特別な識別子 $self を使用できます。

たとえば、null インジケーター フィールドを作成するには、is_inversetrue に設定して null_if フィールド修飾子を使用します。詳しくは、NullIf をご覧ください。

modifier

object (FieldModifier)

一致するフィールドに適用する修飾子を指定します。

FieldOverride

指定されたフィールドのデコード チェーンとエンコード チェーンをオーバーライドまたは変更します。

JSON 表現
{
    "field": string,
    "modifier": object (FieldModifier)
}
フィールド
field

string

修飾子を適用するフィールドの名前を指定します。

modifier

object (FieldModifier)

一致するフィールドに適用する修飾子を指定します。

変換

ビュー変換は、テーブルと QSAM ファイルの関係を変更するために使用されます。変換は常にデータの視点から表現されます。このコンセプトは、BigQuery のビューテーブルに似ています。

JSON 表現
{
    "exclude": object (Exclude),
    "unnest": object (Unnest),
    "move": object (Move),
    "rename": object (Rename)
}
フィールド
exclude

object (Exclude)

unnest

object (Unnest)

move

object (Move)

rename

object (Rename)

FieldModifier

フィールド修飾子を使用すると、特定のフィールドのエンコードまたはデコードを変更できます。すべての修飾子をすべてのフィールドに適用できるわけではありません。特定の修飾子については、ドキュメントをご覧ください。

JSON 表現
{
    "filler": object (Filler),
    "null_if": object (NullIf),
    "format_date": object (FormatDate),
    "chain": object (ModifierChain),
    "zoned_decimal": object (ZonedDecimal),
    "binary": object (Binary),
    "packed_decimal": object (PackedDecimal),
    "null_if_invalid": object (NullIfInvalid),
    "bytes": object (Bytes),
    "varlen": object (VarLen),
    "string": object (String),
    "null_if_empty": object (NullIfEmpty),
    "format_timestamp": object (FormatTimestamp),
    "hfp": object (HFP),
    "decode_as_null": object (DecodeAsNull),
    "encode_null_as": object (EncodeNullAs)
}
フィールド
filler

object (Filler)

フィールドを処理と出力から除外します。

null_if

object (NullIf)

別のフィールドの値に基づいて、フィールドを条件付きで null に設定します。

format_date

object (FormatDate)

文字列フィールドを日付としてフォーマットします。

chain

object (ModifierChain)

複数の修飾子を連鎖させて、順番に適用します。

zoned_decimal

object (ZonedDecimal)

ゾーン付き 10 進数フィールドのデフォルト構成をオーバーライドします。

binary

object (Binary)

バイナリ数値フィールドのデフォルト構成をオーバーライドします。

packed_decimal

object (PackedDecimal)

パック 10 進数フィールドのデフォルト構成をオーバーライドします。

null_if_invalid

object (NullIfInvalid)

トランスコーディング エラーが発生した場合、フィールドを null に設定して、レコードのスピルオーバーを防ぎます。

bytes

object (Bytes)

フィールドをバイトの未加工のシーケンスとして扱い、以前の型情報を無視します。

varlen

object (VarLen)

レコードを可変長フィールドとして設定します。

string

object (String)

文字列フィールドのデフォルト構成をオーバーライドします。

null_if_empty

object (NullIfEmpty)

コンテンツが空と見なされる場合、フィールドを null に設定します。

format_timestamp

object (FormatTimestamp)

文字列フィールドをタイムスタンプとしてフォーマットします。

hfp

object (HFP)

フィールドを 16 進浮動小数点(HFP)数として解釈します。

decode_as_null

object (DecodeAsNull)

null 値のデコード方法を定義します。

encode_null_as

object (EncodeNullAs)

null 値のエンコード方法を定義します。

除外

結果のテーブルからフィールドを除外しますが、デコードまたはエンコードは行います。これは、フィールドをテーブルに転送する必要はないが、トランスコードには必要である場合に便利です。たとえば、テーブルから null インジケーターや長さフィールドを省略できます。

トランスコードを完全にバイパスするには、フィラー修飾子を適用します。

JSON 表現
{
    "field": string
}
フィールド
field

string

除外するフィールドを指定します。

Unnest

フィールドのネストを解除します。

JSON 表現
{
    "field": string,
    "format": string
}
フィールド
field

string

ネスト解除するフィールドを指定する

format

string

新しいフィールド形式を指定します。

${parent} は、ネスト解除されるフィールドの名前でリリースされます。

ネストされていない構造体の場合、${field} は構造体フィールドの名前に置き換えられます。

ネストされていない配列とリストの場合、${index} は配列のインデックスに置き換えられます。

移動

レコード内のフィールドを移動します。

JSON 表現
{
    "field": string,
    "offset": int
}
フィールド
field

string

移動するフィールドを指定します。

offset

int

フィールドを移動する場所の数を前方または後方に指定します。

名前を変更

正規表現の一致に基づいて 1 つ以上のフィールドの名前を変更します。

たとえば、すべてのハイフンをアンダースコアに置き換えるには、次の JSON 形式を使用します。 {"find": "\\-", "replace":"_"}

JSON 表現
{
    "find": string,
    "replace": string
}
フィールド
find

string

名前を変更するフィールドを識別する Java 正規表現パターンを指定します。

パターンは完全なフィールド名と照合されます。パターンがフィールド名の一部と一致する場合、フィールドは一致と見なされます。

例:

  • "\\-"(ハイフンを含む任意のフィールドに一致)
  • "^field_name$"(名前が field_name と完全に一致するフィールドと一致)
  • "^field_(.*)$"field_ で始まる任意のフィールドに一致し、残りをキャプチャします)
  • "part_of_name"part_of_name を含む任意のフィールドと一致)

replace

string

一致したフィールドの新しい名前を指定します。

find 正規表現のキャプチャ グループは、$1$2 などの後方参照を使用して replace 文字列で使用できます。これにより、元のフィールド名の一部に基づいて、より複雑な変換が可能になります。

例:

  • "new_field_name"(フィールドを固定名に置き換えます)
  • "new_$1"find の最初のキャプチャ グループを使用)
  • "${1}_new"(キャプチャ グループの代替構文)
  • "prefix_$1_suffix"(キャプチャ グループを使用して接頭辞/接尾辞を追加します)

フィラー

処理中にフィールドが無視されることを指定します。このフィールドは入力からデコードされず、出力にエンコードされません。また、デコード時に結果のスキーマとデータテーブルから除外されます。この修飾子は、静的で既知のサイズを持つ任意のフィールドに適用できます。

次のように空の JSON オブジェクトを指定します。

JSON 表現
{
}

NullIf

条件が満たされた場合にフィールドを null に設定します。null_valuenon_null_value、またはその両方を指定する必要があります。

null インジケーター フィールドを作成するには、次の例に示すように、null_if フィールド修飾子を含む FieldSuffix を使用し、is_inversetrue に設定します。

: Null-indicator

null インジケータ フィールドを作成するには、次のように null_if フィールド修飾子を使用します。

 {
  "field_suffixes": [
   {
     "suffix": "NID",
     "is_inverse": true,
     "modifier": {
     "null_if": {
       "null_value": "?",
       "target_field": "$self"
     }
    }
   }
  ]
 }

これにより、次のコピーブック スニペットに示すように、接尾辞 NID を持つすべてのフィールドが実質的に null インジケーターになります。

 01 REC.
   02 FIELD     PIC X(10).
   02 FIELD-NID PIC X(1).

: バイナリ null 指標

binary null インジケーター フィールドを作成するには、次のように binarynull_if フィールド修飾子を使用します。

 {
  "field_suffixes": [
   {
     "suffix": "NID",
     "modifier": {
       "binary": {}
     }
   },
   {
     "suffix": "NID",
     "is_inverse": true,
     "modifier": {
     "null_if": {
       "null_value": "15",
       "target_field": "$self"
     }
    }
   }
  ]
 }

これにより、接尾辞 NID を持つすべてのフィールドが、前の例と同じコピーブックを使用して、実質的に binary null インジケーターになります。

: バイトの null インジケーター

bytes null インジケータ フィールドを作成するには、次のように bytesnull_if のフィールド修飾子を使用します。null と null 以外の値は HEX として表されます。

 {
  "field_suffixes": [
   {
     "suffix": "NID",
     "modifier": {
       "bytes": {}
     }
   },
   {
     "suffix": "NID",
     "is_inverse": true,
     "modifier": {
     "null_if": {
       "null_value": "FF",
       "target_field": "$self"
     }
    }
   }
  ]
 }

これにより、接尾辞 NID を持つすべてのフィールドが、前の例と同じコピーブックを使用して、実質的に bytes null インジケーターになります。

JSON 表現
{
    "target_field": string,
    "null_value": string,
    "null_values": string,
    "non_null_value": string,
    "non_null_values": string
}
フィールド
target_field

string

値を確認するフィールドを指定します。フィールドはスコープ内にある必要があります。

null_value

string

指定された場合、target_field がこの値と等しいと、フィールドはデコードまたはエンコードされず、値は null に設定されます。

null_values

string

指定された場合、target_field がこれらの値のいずれかに等しいと、フィールドはデコードまたはエンコードされず、値は null に設定されます。

non_null_value

string

指定された場合、target_field がこの値と等しくない場合、フィールドはデコードまたはエンコードされず、値は null に設定されます。

non_null_values

string

指定された場合、target_field がこれらの値のいずれとも等しくない場合、フィールドはデコードまたはエンコードされず、値は null に設定されます。

FormatDate

サポートされている形式のいずれかを使用して、文字列を日付にフォーマットします。この修飾子は、サイズ指定されたフィールドにのみ適用できます。デコード プロセスでは、いずれかの形式が文字列と一致するまで、形式が順番にテストされます。エンコード プロセスでは、最初の形式が使用され、残りは無視されます。

JSON 表現
{
    "formats": object (DateTimeFormat)
}
フィールド
formats

object (DateTimeFormat)

日付形式のリスト。

ModifierChain

複数の修飾子を連続して適用する修飾子チェーンを指定します。修飾子は、指定された順序で適用されます。

JSON 表現
{
    "modifiers": object (FieldModifier)
}
フィールド
modifiers

object (FieldModifier)

適用する修飾子のリストを指定します。

ZonedDecimal

ゾーン 10 進数のエンコードとデコードに関連するさまざまなオプションを設定します。この修飾子は、10 進数フィールドにのみ適用できます。

JSON 表現
{
    "logical_type": enum (DecimalLogicalType),
    "encoding": enum (ZonedDecimalEncoding)
}
フィールド
logical_type

enum (DecimalLogicalType)

フィールドのデコードまたはエンコード時に使用する論理型を指定します。

encoding

enum (ZonedDecimalEncoding)

フィールドがエンコードされるエンコード。

バイナリ

以前の修飾子を無視し、このフィールドをバイナリ数として扱います。

JSON 表現
{
    "signedness": enum (BinarySignedness)
}
フィールド
signedness

enum (BinarySignedness)

数値の符号付き。

PackedDecimal

このフィールドを PackedDecimal に設定します。

JSON 表現
{
    "logical_type": enum (DecimalLogicalType)
}
フィールド
logical_type

enum (DecimalLogicalType)

論理型をオーバーライドします。デフォルトでは、メインフレーム コネクタは精度とスケールに基づいて最適な論理型を使用します。

NullIfInvalid

トランスコードに失敗した場合は、値を null として扱います。この修飾子は、サイズ指定されたフィールドにのみ適用できます。エラーは無視され、スピルオーバー データセットに記録されません。デコード プロセス中、このレコードのこのフィールドの値は null になります。エンコード プロセス中にデータを書き込めない場合、フィールド全体が null バイトで埋められます。

次のように空の JSON オブジェクトを指定します。

JSON 表現
{
}

バイト

フィールドをバイトの未加工のシーケンスとして扱います。この修飾子は、以前の型情報をオーバーライドし、フィールドの未加工のバイトデータが特定の文字エンコードや数値解釈なしでそのまま保持されるようにします。この修飾子は、元の型やサイズに関係なく、任意のフィールドに適用できます。

次のように空の JSON オブジェクトを指定します。

JSON 表現
{
}

VarLen

可変長フィールドを表します。

可変長フィールドは 3 つの部分で構成されます。

  1. 2 つのサブフィールドを含むグループ項目。
  2. トランザクション データの長さを含むグループ アイテム内のフィールド。
  3. データを含むグループ アイテム内のフィールド。

可変長フィールドの名前はグループ名になります。

次のように空の JSON オブジェクトを指定します。

JSON 表現
{
}

文字列

文字列のデコードとエンコードに関連するさまざまなオプションを設定します。文字列フィールドにのみ適用できます。

JSON 表現
{
    "encoding": string,
    "trim_suffix": boolean,
    "pad_char": string
}
フィールド
encoding

string

フィールドがエンコードされるエンコード。

trim_suffix

boolean

true に設定すると、文字列の末尾にある空白が切り捨てられます。trim_suffix はデコードにのみ影響し、エンコードでは無視されます。空白のみで構成される文字列は空の文字列になります。

pad_char

string

設定すると、pad_char でパディング エクスポート文字列を設定します。設定する場合、pad_char の長さは 1 にする必要があります。pad_char はエンコードにのみ影響し、デコードでは無視されます。

NullIfEmpty

フィールド内のすべてのバイトが 0 の場合、フィールドは null に設定する必要があります。

次のように空の JSON オブジェクトを指定します。

JSON 表現
{
}

FormatTimestamp

指定された形式のいずれかを使用して、文字列をタイムスタンプにフォーマットします。これは、サイズ指定されたフィールドにのみ適用できます。デコード中、形式は、いずれかの形式が文字列と一致するまで順番にテストされます。エンコード時には、最初の形式が使用され、残りの形式は無視されます。

JSON 表現
{
    "formats": object (DateTimeFormat)
}
フィールド
formats

object (DateTimeFormat)

タイムスタンプ形式のリスト。

HFP

このフィールドを 16 進浮動小数点数として設定します。

次のように空の JSON オブジェクトを指定します。

JSON 表現
{
}

DecodeAsNull

デコード プロセスで null 値がどのように解釈されるかを定義します。COBOL は null をネイティブでサポートしていないため、このパラメータは null として扱う必要がある値を指定します。

JSON 表現
{
    "values": string,
    "hex_bytes": string
}
フィールド
values

string

文字列表現のリスト。フィールドを文字列形式にデコードした後、フィールドの内容がこれらの値のいずれかと一致する場合、null として扱われます。

hex_bytes

string

1 バイトの 16 進数表現のリスト。フィールドにこれらのバイトのいずれかが含まれている場合、null として扱われます。たとえば、すべての高値に FF を使用し、すべての安値に 00 を使用します(空)。

EncodeNullAs

エンコード プロセスで null 値がどのように表されるかを定義します。

JSON 表現
{
    "value": string,
    "hex_byte": string
}
フィールド
value

string

ソース値が null の場合に、この特定の値がエンコードされます。文字列がフィールドの型に対して有効であることを確認します。

hex_byte

string

ソース値が null の場合は、この特定のバイト シーケンス(16 進数文字列で表される)をエンコードします。たとえば、2 バイトのフィールドの FF を高値に設定します。これは、サイズがわかっている任意のフィールドに適用できます。バイトは、基盤となるフィールドのサイズに合わせて繰り返されます。

DateTimeFormat

フィールドを日付に変換する際に使用するサイズとパターン。

JSON 表現
{
    "size": int,
    "pattern": string
}
フィールド
size

int

このパターンが適用されるフィールドのサイズを指定します。

pattern

string

日付フォーマッタ パターンを指定します。有効なフォーマッタ パターンの詳細については、クラス DateTimeFormatter をご覧ください。

ZonedDecimalEncoding

ゾーン付き 10 進数フィールドをデコードまたはエンコードするときに使用するエンコードを指定します。

列挙型
UNSPECIFIED 修飾子チェーンで指定されたエンコードを保持します。修飾子が指定されていない場合は、EBCDIC が使用されます。
EBCDIC EBCDIC エンコードを使用します。
ASCII ASCII エンコードを使用します。

BinarySignedness

10 進数フィールドに使用する論理型。

列挙型
UNSPECIFIED スケールと精度に基づいて最適な型を使用します。
SIGNED 値を保存するには 64 ビットを使用します。この修飾子は、精度が 18 以下で、スケールが 0 の数値に対してのみ機能します。
UNSIGNED 値を保存するには 64 ビットを使用します。この修飾子は、精度が 18 以下の数値に対してのみ機能します。

DecimalLogicalType

10 進数フィールドに使用する論理型。

列挙型
AUTO スケールと精度に基づいて最適な型を使用します。
LONG 値を保存するには 64 ビットを使用します。この修飾子は、精度が 18 以下で、スケールが 0 の数値に対してのみ機能します。
DECIMAL64 値を保存するには 64 ビットを使用します。この修飾子は、精度が 18 以下の数値に対してのみ機能します。
BIG_DECIMAL 値を無制限の小数値として保存します。これは最も遅いオプションですが、任意の精度で任意のスケールの任意の 10 進数をサポートします。
BIG_INTEGER 値を無制限の整数値として保存します。これは最も遅いオプションですが、任意の精度の任意の整数をサポートします。

SchemaValidationMode

コピーブックのコンパイル時に使用するスキーマ検証モードを指定します。このモードでは、特定のターゲット データ形式との互換性が検証されます。

列挙型
DEFAULT デフォルトのスキーマ検証モード。このモードでは、一意のフィールド名がコピーブックに含まれていることを確認します。
BIG_QUERY BigQuery の互換性のためのスキーマ検証モード。このモードでは、デフォルトの検証が拡張され、コピーブックのスキーマが BigQuery のデータ型と互換性があることが検証されます。
POSTGRES PostgreSQL との互換性のためのスキーマ検証モード。このモードでは、デフォルトの検証が拡張され、コピーブックのスキーマが PostgreSQL データ型と互換性があることが検証されます。
MYSQL MySQL 互換性のためのスキーマ検証モード。このモードでは、デフォルトの検証が拡張され、コピーブックのスキーマが MySQL データ型と互換性があることが検証されます。