您可以通过在 JSON 文件中添加所需的配置来配置 Mainframe Connector 转码器。此文件称为转码器配置文件。您必须按照配置部分中所述的方式定义配置。qsam encode
和 qsam decode
命令使用转码器配置文件执行数据转码。
本页介绍了配置 Mainframe Connector 转码器的各种方法。
配置
Configuration
对象是转码器配置的根。其中包含转码器的所有配置选项。
JSON 表示法 |
---|
{ "defaults": object ( |
字段 | |
---|---|
defaults |
为 Cobol 原型指定默认字段修饰符。 |
field_suffixes |
指定字段后缀。 |
field_overrides |
指定字段替换项。 |
transformations |
指定字段转换。 |
schema_validation_mode |
指定架构验证模式。 |
DefaultsSection
DefaultsSection
对象可用于按 Cobol 类型指定默认修改。这些规则会在任何后缀或替换项修改之前应用。
JSON 表示法 |
---|
{ "alpha_numeric_display": object ( |
字段 | |
---|---|
alpha_numeric_display |
为字母数字 (PIC X) 字段指定默认值。 |
numeric_display |
为数字显示(带区分符的小数)字段指定默认值。 |
binary |
为二进制数 (COMP) 字段指定默认值。 |
packed_decimal |
为压缩十进制 (COMP-3) 字段指定默认值。 |
national |
为国家/地区 (PIC N) 字段指定默认值。 |
utf8 |
为 UTF-8 (PIC U) 字段指定默认值。 |
dbcs |
dbcs(DISPLAY-1)字段的默认值。 |
hexadecimal_floating_point |
十六进制浮点数 (COMP-1、COMP-2) 字段的默认值。 |
FieldSuffix
字段后缀适用于所有带后缀的字段。
如果字段以连字符 (-
) 或下划线 (_
) 结尾,后跟后缀,则会被匹配。
后缀不区分大小写。
FieldSuffix
修饰符是在 FieldOverride
修饰符后面应用的。
例如,为后缀 NID
定义的修饰符将应用于名为 FLD-NID
的字段,但不会应用于字段 FUNID
。
JSON 表示法 |
---|
{ "suffix": string, "is_inverse": boolean, "modifier": object ( |
字段 | |
---|---|
suffix |
系统会对带有此后缀的字段应用修饰符。 |
is_inverse |
指定修饰符是否为反向字段修饰符。
反向字段修饰符会将修饰符应用于与带修饰符的字段同名的另一个字段,但不带修饰符。例如,如果同一记录中同时存在 使用反向字段修饰符时,每当字段名称传统上可用于引用带有后缀的字段时,都可以使用特殊标识符 例如,如需创建 null 指示器字段,您可以使用 |
modifier |
指定要应用于匹配字段的修饰符。 |
FieldOverride
替换或修改指定字段的解码和编码链。
JSON 表示法 |
---|
{ "field": string, "modifier": object ( |
字段 | |
---|---|
field |
指定要应用修饰符的字段的名称。 |
modifier |
指定要应用于匹配字段的修饰符。 |
转换
视图转换用于修改表与 QSAM 文件之间的关系。 转换始终从数据的角度表述。 该概念类似于 BigQuery 中的视图表。
JSON 表示法 |
---|
{ "exclude": object ( |
字段 | |
---|---|
exclude |
|
unnest |
|
move |
|
rename |
|
FieldModifier
借助字段修饰符,您可以修改特定字段的编码或解码。请注意,并非所有修饰符都适用于所有字段。如需了解详情,请参阅特定修饰符的文档。
JSON 表示法 |
---|
{ "filler": object ( |
字段 | |
---|---|
filler |
将字段从处理和输出中排除。 |
null_if |
根据另一个字段的值有条件地将字段设置为 null。 |
format_date |
将字符串字段格式化为日期。 |
chain |
将多个修饰符链接起来,以便按顺序应用。 |
zoned_decimal |
替换了带区位的十进制字段的默认配置。 |
binary |
替换二进制数字字段的默认配置。 |
packed_decimal |
替换了打包的十进制字段的默认配置。 |
null_if_invalid |
如果发生转码错误,将该字段设置为 null,以防止记录溢出。 |
bytes |
将字段视为字节的原始序列,忽略之前的类型信息。 |
varlen |
将记录设置为可变长度字段。 |
string |
替换字符串字段的默认配置。 |
null_if_empty |
如果字段的内容被视为空,则将其设置为 null。 |
format_timestamp |
将字符串字段格式化为时间戳。 |
hfp |
将该字段解读为十六进制浮点数 (HFP)。 |
decode_as_null |
定义必须如何解码 null 值。 |
encode_null_as |
定义必须如何编码 null 值。 |
排除
从生成的表格中排除某个字段,但仍要进行解码或编码。 如果字段不需要传输到表,但需要进行转码,则此方法非常有用。例如,可以从表中省略 null 指示器或长度字段。
如需完全跳过转码,请应用填充修饰符。
JSON 表示法 |
---|
{ "field": string |
字段 | |
---|---|
field |
指定要排除的字段。 |
展开
展开该字段。
JSON 表示法 |
---|
{ "field": string, "format": string |
字段 | |
---|---|
field |
指定要展开的字段 |
format |
指定新的字段格式。
对于非嵌套结构体, 对于非嵌套数组和列表, |
移动
移动记录中的字段。
JSON 表示法 |
---|
{ "field": string, "offset": int |
字段 | |
---|---|
field |
指定要移动的字段。 |
offset |
指定字段需要向前或向后移动的位数。 |
重命名
根据正则表达式匹配重命名一个或多个字段。
例如,如需将所有连字符替换为下划线,请使用以下 JSON 格式:{"find": "\\-", "replace":"_"}
。
JSON 表示法 |
---|
{ "find": string, "replace": string |
字段 | |
---|---|
find |
指定 Java 正则表达式模式,以标识要重命名的字段。 系统会将模式与完整字段名称进行匹配。如果模式与字段名称的任何部分匹配,则该字段将被视为匹配。 示例:
|
replace |
指定匹配字段的新名称。 您可以使用 示例:
|
填充程序
指定在处理期间将忽略某个字段。 系统不会从输入中解码该字段,也不会将其编码为输出,并且会在解码过程中将其从生成的架构和数据表中排除。 您可以将此修饰符应用于具有已知静态大小的任何字段。
提供一个空的 JSON 对象,如下所示:
JSON 表示法 |
---|
{ |
NullIf
如果某个条件满足,将某个字段设置为 null。您必须指定 null_value
和/或 non_null_value
。
如需创建 null 指示器字段,您可以将 FieldSuffix
与 null_if
字段修饰符搭配使用,并将 is_inverse
设置为 true
,如以下示例所示:
示例:null 指示器
如需创建 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
空值指示器。
JSON 表示法 |
---|
{ "target_field": string, "null_value": string, "null_values": string, "non_null_value": string, "non_null_values": string |
字段 | |
---|---|
target_field |
指定要检查其值的字段。该字段必须在范围内。 |
null_value |
指定后,如果 |
null_values |
指定后,如果 |
non_null_value |
如果指定了此字段,如果 |
non_null_values |
如果指定了此属性,并且 |
FormatDate
使用某种受支持的格式将字符串格式化为日期。 您只能将此修饰符应用于大小固定的字段。 在解码过程中,系统会按顺序测试格式,直到某种格式与字符串匹配为止。 在编码过程中,系统会使用第一个格式,而忽略其余格式。
JSON 表示法 |
---|
{ "formats": object ( |
字段 | |
---|---|
formats |
日期格式列表。 |
ModifierChain
指定修饰符链以串联应用多个修饰符。修饰符会按指定的顺序应用。
JSON 表示法 |
---|
{ "modifiers": object ( |
字段 | |
---|---|
modifiers |
指定要应用的修饰符列表。 |
ZonedDecimal
设置与时区小数的编码和解码相关的各种选项。 您只能对小数字段应用此修饰符。
JSON 表示法 |
---|
{ "logical_type": enum ( |
字段 | |
---|---|
logical_type |
指定解码或编码字段时要使用的逻辑类型。 |
encoding |
字段的编码方式。 |
二进制
忽略所有之前的修饰符,并将此字段视为二进制数。
JSON 表示法 |
---|
{ "signedness": enum ( |
字段 | |
---|---|
signedness |
数字的符号。 |
PackedDecimal
将此字段设置为 PackedDecimal。
JSON 表示法 |
---|
{ "logical_type": enum ( |
字段 | |
---|---|
logical_type |
替换逻辑类型。 默认情况下,Mainframe 连接器会根据精度和小数位数使用最佳逻辑类型。 |
NullIfInvalid
如果转码失败,则将值视为 null。 您只能将此修饰符应用于大小固定的字段。 系统会忽略该错误,并且不会将其记录在溢出数据集中。 在解码过程中,此记录的此字段的值将为 null。 在编码过程中,如果无法写入数据,则整个字段将填充 null 字节。
提供一个空的 JSON 对象,如下所示:
JSON 表示法 |
---|
{ |
字节
将该字段视为原始字节序列。 此修饰符会替换任何之前的类型信息,导致字段的原始字节数据保持不变,而不会进行特定的字符编码或数字解读。 您可以将此修饰符应用于任何字段,无论其原始类型或大小如何。
提供一个空的 JSON 对象,如下所示:
JSON 表示法 |
---|
{ |
VarLen
表示可变长度字段。
可变长度字段包含三个部分:
- 包含两个子字段的组项。
- 组项中的字段,包含交易数据的长度。
- 组项中包含数据的字段。
可变长度字段的名称将是组名称。
提供一个空的 JSON 对象,如下所示:
JSON 表示法 |
---|
{ |
字符串
设置与字符串解码和编码相关的各种选项。 只能应用于字符串字段。
JSON 表示法 |
---|
{ "encoding": string, "trim_suffix": boolean, "pad_char": string |
字段 | |
---|---|
encoding |
字段的编码方式。 |
trim_suffix |
设置为 true 时,系统会修剪字符串末尾的所有空格。 trim_suffix 仅影响解码,编码会忽略 trim_suffix。 请注意,仅由空格组成的字符串将变为空字符串。 |
pad_char |
使用 |
NullIfEmpty
如果该字段中的所有字节均为 0,则应将该字段设置为 null。
提供一个空的 JSON 对象,如下所示:
JSON 表示法 |
---|
{ |
FormatTimestamp
使用提供的格式之一将字符串格式化为时间戳。 这只能应用于大小固定的字段。 在解码期间,系统会按顺序测试格式,直到某种格式与字符串匹配为止。 在编码期间,系统会使用第一个格式,并忽略其余格式。
JSON 表示法 |
---|
{ "formats": object ( |
字段 | |
---|---|
formats |
时间戳格式列表。 |
HFP
将此字段设置为十六进制浮点数。
提供一个空的 JSON 对象,如下所示:
JSON 表示法 |
---|
{ |
DecodeAsNull
定义在解码过程中如何解读 null 值。由于 COBOL 不支持原生 null,因此此参数用于指定必须视为 null 的值。
JSON 表示法 |
---|
{ "values": string, "hex_bytes": string |
字段 | |
---|---|
values |
字符串表示形式的列表。将字段初始解码为字符串形式后,如果字段的内容与其中任何值匹配,则将被视为 null。 |
hex_bytes |
单个字节的十六进制表示法列表。
如果字段包含任何这些字节的重复,则会被视为 null。
例如,对于所有高值,使用 |
EncodeNullAs
定义编码过程中 null 值的表示方式。
JSON 表示法 |
---|
{ "value": string, "hex_byte": string |
字段 | |
---|---|
value |
当源值为 null 时,编码此特定值。 验证字符串是否适用于字段的类型。 |
hex_byte |
当源值为 null 时,编码此特定字节序列(表示为十六进制字符串)。例如,将两个字节字段的 |
DateTimeFormat
将字段转换为日期时使用的大小和格式。
JSON 表示法 |
---|
{ "size": int, "pattern": string |
字段 | |
---|---|
size |
指定此模式适用的字段的大小。 |
pattern |
指定日期格式设置模式。 如需详细了解有效的格式设置模式,请参阅 DateTimeFormatter 类。 |
BinarySignedness
要为十进制字段使用的逻辑类型。
枚举 | |
---|---|
UNSPECIFIED |
根据比例和精度使用最优类型。 |
SIGNED |
使用 64 位存储值。 此修饰符仅适用于精度小于或等于 18 且标度为 0 的数字。 |
UNSIGNED |
使用 64 位存储值。 此修饰符仅适用于精度小于或等于 18 的数字。 |
SchemaValidationMode
指定在编译副本簿时要使用的架构验证模式。此模式用于验证与特定目标数据格式的兼容性。
枚举 | |
---|---|
DEFAULT |
默认架构验证模式。 此模式用于验证副本集中是否包含唯一的字段名称。 |
BIG_QUERY |
用于 BigQuery 兼容性的架构验证模式。 此模式会扩展默认验证,以验证副本簿的架构是否与 BigQuery 的数据类型兼容。 |
ZonedDecimalEncoding
指定在解码或编码时区数值字段时要使用的编码。
枚举 | |
---|---|
UNSPECIFIED |
保留修饰符链中指定的编码。
如果未指定修饰符,则系统会使用 EBCDIC 。 |
EBCDIC |
使用 EBCDIC 编码。 |
ASCII |
使用 ASCII 编码。 |
DecimalLogicalType
要为十进制字段使用的逻辑类型。
枚举 | |
---|---|
AUTO |
根据比例和精度使用最优类型。 |
LONG |
使用 64 位存储值。 此修饰符仅适用于精度小于或等于 18 且标度为 0 的数字。 |
DECIMAL64 |
使用 64 位存储值。 此修饰符仅适用于精度小于或等于 18 的数字。 |
BIG_DECIMAL |
将值存储为无边界小数值。这是速度最慢的选项,但支持任意精度、任意规模的任何小数。 |
BIG_INTEGER |
将值存储为无上限的整数值。这是速度最慢的选项,但支持任何精度的任何整数。 |