トランスコーダの構成

Mainframe Connector トランスコーダを構成するには、必要な構成を JSON ファイルに追加します。このファイルは、トランスコーダ構成ファイルと呼ばれます。構成セクションで指定されているように構成を定義する必要があります。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)
}
フィールド
defaults

object (DefaultsSection)

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

field_suffixes

object (FieldSuffix)

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

field_overrides

object (FieldOverride)

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

transformations

object (Transformation)

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

schema_validation_mode

enum (SchemaValidationMode)

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

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)

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

binary

object (FieldModifier)

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

packed_decimal

object (FieldModifier)

パックされた小数(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)
}
フィールド
filler

object (Filler)

フィールドを無視して除外します。

null_if

object (NullIf)

条件で基になるフィールドの値を null に設定します。

format_date

object (FormatDate)

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

chain

object (ModifierChain)

複数の修飾子を連結する。

zoned_decimal

object (ZonedDecimal)

ゾーン付きフィールドの小数点の設定をオーバーライドします。

binary

object (Binary)

バイナリ フィールドの構成をオーバーライドします。

packed_decimal

object (PackedDecimal)

パックされた小数フィールドの構成をオーバーライドします。

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 進数浮動小数点数に設定します。

除外

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

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

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

string

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

ネストを解除

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

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

string

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

format

string

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

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

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

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

移動

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

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

string

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

offset

int

フィールドを移動する位置(前方または後方)の数を指定します。

名前を変更

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

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

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_value または non_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 インジケーター フィールドを作成するには、binary フィールド修飾子と null_if フィールド修飾子を使用します。

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

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

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

bytes null インジケーター フィールドを作成するには、bytes フィールド修飾子と null_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,
    "non_null_value": string
}
フィールド
target_field

string

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

null_value

string

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

non_null_value

string

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

FormatDate

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

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

object (DateTimeFormat)

日付形式のリスト。

ModifierChain

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

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

object (FieldModifier)

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

ZonedDecimal

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

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)

論理型をオーバーライドします。デフォルトでは、Mainframe Connector は精度とスケールに基づいて最適な論理型を使用します。

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 はデコードにのみ影響し、エンコードでは 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 表現
{
}

DateTimeFormat

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

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

int

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

pattern

string

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

BinarySignedness

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

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

DecimalLogicalType

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

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

ZonedDecimalEncoding

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

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

SchemaValidationMode

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

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