Configuração do transcodificador

É possível configurar o transcodificador do Mainframe Connector adicionando a configuração necessária em um arquivo JSON. Esse arquivo é chamado de arquivo de configuração do transcodificador. Defina a configuração conforme especificado na seção Configuração. Os comandos qsam encode e qsam decode usam o arquivo de configuração do transcodificador para realizar a transcodificação de dados.

Nesta página, descrevemos as várias maneiras de configurar o transcodificador do Mainframe Connector.

Configuração

O objeto Configuration é a raiz da configuração do transcodificador. Ele contém todas as opções de configuração do transcodificador.

Representação 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
}
Campos
defaults

object (DefaultsSection)

Especifique modificadores de campo padrão para arquétipos do Cobol.

field_suffixes

object (FieldSuffix)

Especifique sufixos de campo.

field_overrides

object (FieldOverride)

Especifique substituições de campo.

transformations

object (Transformation)

Especifique transformações de campo.

schema_validation_mode

enum (SchemaValidationMode)

Especifique o modo de validação de esquema.

header_records_to_skip

long

Especifique o número de primeiros registros a serem ignorados.

record_filter_condition

string

Especifique uma condição de filtro para registros.

O filtro aceita os seguintes operadores:

  • Operadores de comparação: `==`, `!=`, `<`, `<=`, `>`, `>=`.
  • Operadores lógicos: `&&` (AND), `||` (OR).
  • Contenção de lista: `in` (para verificar se um valor está presente em uma variável de lista).
  • Operadores aritméticos: `+`, `-`, `*`, `/`, `%`.
  • Funções de string e lista:
    • size(): retorna o comprimento de uma string ou lista.
    • contains(substring): verifica se uma string contém uma substring especificada.
As comparações e operações precisam ser realizadas entre variáveis ou constantes do mesmo tipo de dados.

Exemplo:

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

DefaultsSection

O objeto DefaultsSection pode ser usado para especificar modificações padrão por tipos de Cobol. Elas são aplicadas antes de qualquer modificação de sufixo ou substituição.

Representação 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)
}
Campos
alpha_numeric_display

object (FieldModifier)

Especifique padrões para campos alfanuméricos (PIC X).

numeric_display

object (FieldModifier)

Especifique os padrões para campos de exibição numérica (decimal zonado).

binary

object (FieldModifier)

Especifique os padrões para campos de número binário (COMP).

packed_decimal

object (FieldModifier)

Especifique os padrões para campos decimais compactados (COMP-3).

national

object (FieldModifier)

Especifique os padrões para campos nacionais (PIC N).

utf8

object (FieldModifier)

Especifique os padrões para campos UTF-8 (PIC U).

dbcs

object (FieldModifier)

Padrão para campos dbcs (DISPLAY-1).

hexadecimal_floating_point

object (FieldModifier)

Padrão para campos de ponto flutuante hexadecimal (COMP-1, COMP-2).

FieldSuffix

Os sufixos de campo se aplicam a todos os campos que têm um sufixo.

Os campos são correspondidos se terminarem com um hífen (-) ou sublinhado (_) seguido pelo sufixo.

Os sufixos não diferenciam maiúsculas de minúsculas.

O modificador FieldSuffix é aplicado depois do modificador FieldOverride.

Por exemplo, o modificador definido para o sufixo NID será aplicado ao campo chamado FLD-NID, mas não ao campo FUNID.

Representação JSON
{
    "suffix": string,
    "is_inverse": boolean,
    "modifier": object (FieldModifier)
}
Campos
suffix

string

O campo com esse sufixo terá o modificador aplicado.

is_inverse

boolean

Especifique se o modificador é um modificador de campo inverso ou não. Um modificador de campo inverso aplica o modificador em outro campo que tem o mesmo nome do campo com o modificador, mas sem ele. Por exemplo, se os campos FLD-NID e FLD existirem no mesmo registro, o modificador será aplicado a FLD.

Ao usar um modificador de campo inverso, o identificador especial $self pode ser usado sempre que um nome de campo pode ser usado tradicionalmente para se referir ao campo com o sufixo.

Por exemplo, para criar um campo indicador de nulo, use o modificador de campo null_if com is_inverse definido como true. Consulte NullIf para mais informações.

modifier

object (FieldModifier)

Especifique o modificador a ser aplicado aos campos correspondentes.

FieldOverride

Substitui ou modifica a cadeia de decodificação e codificação do campo especificado.

Representação JSON
{
    "field": string,
    "modifier": object (FieldModifier)
}
Campos
field

string

Especifique o nome do campo a que o modificador será aplicado.

modifier

object (FieldModifier)

Especifique o modificador a ser aplicado ao campo correspondente.

Transformação

As transformações de visualização são usadas para modificar a relação entre a tabela e o arquivo QSAM. As transformações são sempre expressas do ponto de vista dos dados. O conceito é semelhante ao das tabelas de visualização no BigQuery.

Representação JSON
{
    "exclude": object (Exclude),
    "unnest": object (Unnest),
    "move": object (Move),
    "rename": object (Rename)
}
Campos
exclude

object (Exclude)

unnest

object (Unnest)

move

object (Move)

rename

object (Rename)

FieldModifier

Um modificador de campo permite modificar a codificação ou decodificação de um campo específico. Nem todos os modificadores podem ser aplicados a todos os campos. Consulte a documentação para mais informações sobre os modificadores específicos.

Representação 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)
}
Campos
filler

object (Filler)

Exclui o campo do processamento e da saída.

null_if

object (NullIf)

Define condicionalmente o campo como nulo com base no valor de outro campo.

format_date

object (FormatDate)

Formata um campo de string como uma data.

chain

object (ModifierChain)

Encadeia vários modificadores para serem aplicados em sequência.

zoned_decimal

object (ZonedDecimal)

Substitui a configuração padrão para campos decimais zonados.

binary

object (Binary)

Substitui a configuração padrão para campos numéricos binários.

packed_decimal

object (PackedDecimal)

Substitui a configuração padrão para campos decimais compactados.

null_if_invalid

object (NullIfInvalid)

Define o campo como nulo se ocorrer um erro de transcodificação, evitando o transbordamento de registros.

bytes

object (Bytes)

Trata o campo como uma sequência bruta de bytes, ignorando as informações de tipo anteriores.

varlen

object (VarLen)

Defina o registro como um campo de comprimento variável.

string

object (String)

Substitui a configuração padrão dos campos de string.

null_if_empty

object (NullIfEmpty)

Define o campo como nulo se o conteúdo for considerado vazio.

format_timestamp

object (FormatTimestamp)

Formata um campo de string como um carimbo de data e hora.

hfp

object (HFP)

Interpreta o campo como um número hexadecimal de ponto flutuante (HFP).

decode_as_null

object (DecodeAsNull)

Define como os valores nulos precisam ser decodificados.

encode_null_as

object (EncodeNullAs)

Define como os valores nulos precisam ser codificados.

Excluir

Exclui um campo da tabela resultante, mas ainda passa por decodificação ou codificação. Isso é útil quando o campo não precisa ser transferido para a tabela, mas é necessário para a transcodificação. Por exemplo, indicadores nulos ou campos de comprimento podem ser omitidos da tabela.

Para evitar a transcodificação, aplique o modificador de preenchimento.

Representação JSON
{
    "field": string
}
Campos
field

string

Especifique o campo a ser excluído.

Unnest

Remova o aninhamento do campo.

Representação JSON
{
    "field": string,
    "format": string
}
Campos
field

string

Especifique o campo a ser desagrupado

format

string

Especifique o novo formato do campo.

O ${parent} será lançado com o nome do campo sendo desagrupado.

Para structs não aninhadas, ${field} é substituído pelo nome do campo de structs.

Para matrizes e listas não aninhadas, ${index} é substituído pelos índices da matriz.

Mover

Mova um campo no registro.

Representação JSON
{
    "field": string,
    "offset": int
}
Campos
field

string

Especifique o campo a ser movido.

offset

int

Especifique o número de casas para frente ou para trás que o campo precisa ser movido.

Renomear

Renomeie um ou mais campos com base em uma correspondência de expressão regular.

Por exemplo, para substituir todos os hífens por sublinhados, use o seguinte formato JSON: {"find": "\\-", "replace":"_"}.

Representação JSON
{
    "find": string,
    "replace": string
}
Campos
find

string

Especifica um padrão de expressão regular Java para identificar os campos a serem renomeados.

O padrão é comparado com o nome completo do campo. Se o padrão corresponder a qualquer parte do nome do campo, ele será considerado uma correspondência.

Exemplos:

  • "\\-" (corresponde a qualquer campo que contenha um hífen)
  • "^field_name$" (corresponde a campos com o nome exato field_name)
  • "^field_(.*)$" (corresponde a qualquer campo que comece com field_ e captura o restante)
  • "part_of_name" (corresponde a qualquer campo que contenha part_of_name)

replace

string

Especifica o novo nome para os campos correspondentes.

Os grupos de captura da expressão regular find podem ser usados na string replace com referências anteriores como $1, $2. Isso permite transformações mais complexas com base em partes do nome do campo original.

Exemplos:

  • "new_field_name" (substitui o campo por um nome fixo)
  • "new_$1" (usa o primeiro grupo de captura de find)
  • "${1}_new" (sintaxe alternativa para grupos de captura)
  • "prefix_$1_suffix" (usa um grupo de captura e adiciona prefixos/sufixos)

Filler

Especifica que um campo será ignorado durante o processamento. O campo não será decodificado da entrada nem codificado para a saída e será excluído do esquema e da tabela de dados resultantes durante a decodificação. É possível aplicar esse modificador a qualquer campo com um tamanho estático conhecido.

Forneça um objeto JSON vazio da seguinte maneira:

Representação JSON
{
}

NullIf

Defina um campo como nulo se uma condição for atendida. É necessário especificar null_value, non_null_value ou ambos.

Para criar um campo indicador de nulo, use um FieldSuffix com um modificador de campo null_if e defina is_inverse como true, conforme mostrado nos exemplos a seguir:

Exemplo: indicador nulo

Para criar um campo indicador de nulo, podemos usar o modificador de campo null_if desta forma.

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

Isso permite que todos os campos com o sufixo NID sejam indicadores nulos, conforme mostrado no snippet de livro de cópias a seguir:

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

Exemplo: indicador binário de nulo

Para criar um campo indicador de nulo binary, podemos usar os modificadores de campo binary e null_if da seguinte maneira.

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

Isso permite que todos os campos com o sufixo NID sejam efetivamente indicadores nulos binary usando o mesmo livro de cópias do exemplo anterior.

Exemplo: indicador nulo de bytes

Para criar um campo indicador nulo bytes, podemos usar os modificadores de campo bytes e null_if desta forma. Os valores para nulo e não nulo são expressos como HEX.

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

Isso permite que todos os campos com o sufixo NID sejam efetivamente um indicador nulo bytes usando o mesmo copybook do exemplo anterior.

Representação JSON
{
    "target_field": string,
    "null_value": string,
    "null_values": string,
    "non_null_value": string,
    "non_null_values": string
}
Campos
target_field

string

Especifique o campo cujo valor você quer verificar. O campo precisa estar no escopo.

null_value

string

Quando especificado, se target_field for igual a esse valor, o campo não será decodificado nem codificado, e o valor será definido como nulo.

null_values

string

Quando especificado, se target_field for igual a qualquer um desses valores, o campo não será decodificado ou codificado, e o valor será definido como nulo.

non_null_value

string

Quando especificado, se target_field não for igual a esse valor, o campo não será decodificado nem codificado, e o valor será definido como nulo.

non_null_values

string

Quando especificado, se target_field não for igual a nenhum desses valores, o campo não será decodificado ou codificado, e o valor será definido como nulo.

FormatDate

Formata uma string como uma data usando um dos formatos compatíveis. Só é possível aplicar esse modificador a campos dimensionados. Durante o processo de decodificação, os formatos são testados em ordem até que um deles corresponda à string. Durante o processo de codificação, o primeiro formato é usado, e o restante é ignorado.

Representação JSON
{
    "formats": object (DateTimeFormat)
}
Campos
formats

object (DateTimeFormat)

Lista de formatos de data.

ModifierChain

Especifique uma cadeia de modificadores para aplicar vários modificadores em série. Os modificadores são aplicados na ordem em que são especificados.

Representação JSON
{
    "modifiers": object (FieldModifier)
}
Campos
modifiers

object (FieldModifier)

Especifique a lista de modificadores a serem aplicados.

ZonedDecimal

Define várias opções relacionadas à codificação e decodificação de decimais zonados. Só é possível aplicar esse modificador em um campo decimal.

Representação JSON
{
    "logical_type": enum (DecimalLogicalType),
    "encoding": enum (ZonedDecimalEncoding)
}
Campos
logical_type

enum (DecimalLogicalType)

Especifique o tipo lógico a ser usado ao decodificar ou codificar o campo.

encoding

enum (ZonedDecimalEncoding)

A codificação com que o campo é codificado.

Binário

Ignore os modificadores anteriores e trate este campo como um número binário.

Representação JSON
{
    "signedness": enum (BinarySignedness)
}
Campos
signedness

enum (BinarySignedness)

O sinal do número.

PackedDecimal

Defina esse campo como um PackedDecimal.

Representação JSON
{
    "logical_type": enum (DecimalLogicalType)
}
Campos
logical_type

enum (DecimalLogicalType)

Substitua o tipo lógico. Por padrão, o Mainframe Connector usa o tipo lógico ideal com base na precisão e na escala.

NullIfInvalid

Trata o valor como nulo se a transcodificação falhar. Só é possível aplicar esse modificador a campos dimensionados. O erro é ignorado e não é registrado no conjunto de dados de transbordamento. Durante o processo de decodificação, o valor desse campo será nulo para esse registro. Durante o processo de codificação, se os dados não puderem ser gravados, todo o campo será preenchido com bytes nulos.

Forneça um objeto JSON vazio da seguinte maneira:

Representação JSON
{
}

Bytes

Trata o campo como uma sequência bruta de bytes. Esse modificador substitui qualquer informação de tipo anterior, fazendo com que os dados de bytes brutos do campo sejam preservados sem codificação de caracteres específica ou interpretação numérica. É possível aplicar esse modificador a qualquer campo, independente do tipo ou tamanho original.

Forneça um objeto JSON vazio da seguinte maneira:

Representação JSON
{
}

VarLen

Representa um campo de comprimento variável.

Um campo de comprimento variável contém três partes:

  1. Um item de grupo que contém dois subcampos.
  2. Um campo no item do grupo que contém o comprimento dos dados da transação.
  3. Um campo no item do grupo que contém os dados.

O nome do campo de comprimento variável será o nome do grupo.

Forneça um objeto JSON vazio da seguinte maneira:

Representação JSON
{
}

String

Define as várias opções relacionadas à decodificação e codificação de strings. Só pode ser aplicado a um campo de string.

Representação JSON
{
    "encoding": string,
    "trim_suffix": boolean,
    "pad_char": string
}
Campos
encoding

string

A codificação com que o campo é codificado.

trim_suffix

boolean

Quando definido como "true", qualquer espaço em branco no final da string será removido. trim_suffix afeta apenas a decodificação. A codificação ignora trim_suffix. As strings que consistem apenas em espaços em branco se tornam strings vazias.

pad_char

string

Ao definir strings de exportação de padding com pad_char. Se definido, o comprimento de pad_char precisa ser 1. pad_char afeta apenas a codificação. A decodificação ignora pad_char.

NullIfEmpty

O campo precisa ser definido como nulo se todos os bytes nele forem 0.

Forneça um objeto JSON vazio da seguinte maneira:

Representação JSON
{
}

FormatTimestamp

Formata uma string em um carimbo de data/hora usando um dos formatos fornecidos. Isso só pode ser aplicado a campos dimensionados. Durante a decodificação, os formatos são testados em ordem até que um deles corresponda à string. Durante a codificação, o primeiro formato será usado, e o restante será ignorado.

Representação JSON
{
    "formats": object (DateTimeFormat)
}
Campos
formats

object (DateTimeFormat)

Lista de formatos de carimbo de data/hora.

HFP

Defina esse campo como "Ponto flutuante hexadecimal".

Forneça um objeto JSON vazio da seguinte maneira:

Representação JSON
{
}

DecodeAsNull

Define como os valores nulos são interpretados durante o processo de decodificação. Como o COBOL não oferece suporte nativo a valores nulos, esse parâmetro especifica quais valores precisam ser tratados como nulos.

Representação JSON
{
    "values": string,
    "hex_bytes": string
}
Campos
values

string

Uma lista de representações de string. Depois da decodificação inicial do campo para a forma de string, se o conteúdo dele corresponder a algum desses valores, ele será tratado como nulo.

hex_bytes

string

Uma lista de representações hexadecimais de um único byte. Quando um campo contém repetições de qualquer um desses bytes, ele é tratado como nulo. Por exemplo, usando FF para todos os valores altos e 00 para todos os valores baixos (vazio).

EncodeNullAs

Define como os valores nulos são representados durante o processo de codificação.

Representação JSON
{
    "value": string,
    "hex_byte": string
}
Campos
value

string

Codifica esse valor específico quando o valor de origem é nulo. Verifique se a string é válida para o tipo do campo.

hex_byte

string

Codifique essa sequência de bytes específica (representada como uma string hexadecimal) quando o valor de origem for nulo. Por exemplo, FF para um campo de dois bytes para valores altos. É possível aplicar isso a qualquer campo com um tamanho conhecido. Os bytes são repetidos para corresponder ao tamanho do campo subjacente.

DateTimeFormat

Tamanho e padrão a serem usados ao converter o campo em uma data.

Representação JSON
{
    "size": int,
    "pattern": string
}
Campos
size

int

Especifique o tamanho do campo a que esse padrão se aplica.

pattern

string

Especifique o padrão do formatador de data. Para mais informações sobre padrões de formatadores válidos, consulte Classe DateTimeFormatter.

ZonedDecimalEncoding

Especifique a codificação a ser usada ao decodificar ou codificar um campo decimal zonado.

Tipos enumerados
UNSPECIFIED Mantenha a codificação especificada na cadeia de modificadores. Se nenhum modificador for especificado, EBCDIC será usado.
EBCDIC Use a codificação EBCDIC.
ASCII Use a codificação ASCII.

BinarySignedness

Tipo lógico a ser usado para um campo decimal.

Tipos enumerados
UNSPECIFIED Use o tipo mais adequado com base na escala e na precisão.
SIGNED Use 64 bits para armazenar o valor. Esse modificador só funciona para números cuja precisão é menor ou igual a 18 e a escala é 0.
UNSIGNED Use 64 bits para armazenar o valor. Esse modificador só funciona para números com precisão menor ou igual a 18.

DecimalLogicalType

Tipo lógico a ser usado para um campo decimal.

Tipos enumerados
AUTO Use o tipo mais adequado com base na escala e na precisão.
LONG Use 64 bits para armazenar o valor. Esse modificador só funciona para números cuja precisão é menor ou igual a 18 e a escala é 0.
DECIMAL64 Use 64 bits para armazenar o valor. Esse modificador só funciona para números com precisão menor ou igual a 18.
BIG_DECIMAL Armazene o valor como um decimal ilimitado. Essa é a opção mais lenta, mas aceita qualquer decimal de qualquer precisão em qualquer escala.
BIG_INTEGER Armazene o valor como um número inteiro sem limites. Essa é a opção mais lenta, mas aceita qualquer número inteiro de qualquer precisão.

SchemaValidationMode

Especifique o modo de validação de esquema a ser usado durante a compilação do copybook. Esse modo verifica a compatibilidade com um formato de dados de destino específico.

Tipos enumerados
DEFAULT Modo padrão de validação de esquema. Esse modo verifica se há nomes de campos exclusivos no copybook.
BIG_QUERY Modo de validação de esquema para compatibilidade com o BigQuery. Esse modo estende a validação padrão para verificar se o esquema do copybook é compatível com os tipos de dados do BigQuery.
POSTGRES Modo de validação de esquema para compatibilidade com PostgreSQL. Esse modo estende a validação padrão para verificar se o esquema do copybook é compatível com os tipos de dados do PostgreSQL.
MYSQL Modo de validação de esquema para compatibilidade com MySQL. Esse modo estende a validação padrão para verificar se o esquema do copybook é compatível com os tipos de dados do MySQL.