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.

Esta página descreve as várias maneiras de configurar o transcodiador do Mainframe Connector.

Configuração

O objeto Configuration é a raiz da configuração do transcodiador. 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)
}
Campos
defaults

object (DefaultsSection)

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

field_suffixes

object (FieldSuffix)

Especifique sufixos de campo.

field_overrides

object (FieldOverride)

Especifique substituições de campo.

transformations

object (Transformation)

Especifique as transformações de campo.

schema_validation_mode

enum (SchemaValidationMode)

Especifique o modo de validação do esquema.

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 padrões para campos de exibição numérica (decimais com zona).

binary

object (FieldModifier)

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

packed_decimal

object (FieldModifier)

Especifique padrões para campos de decimal compactado (COMP-3).

national

object (FieldModifier)

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

utf8

object (FieldModifier)

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

dbcs

object (FieldModifier)

Padrão para campos de 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 do sufixo.

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

O modificador FieldSuffix é aplicado após o modificador FieldOverride.

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

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

string

O modificador será aplicado ao campo com esse sufixo.

is_inverse

boolean

Especifique se o modificador é inverso ou não. Um modificador de campo inverso aplica o modificador em outro campo com o mesmo nome do campo com o modificador, mas sem o modificador. 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 de indicador 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

Substitua ou modifique 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 em 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 formuladas do ponto de vista dos dados. O conceito é semelhante às 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 dos modificadores específicos para mais informações.

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)
}
Campos
filler

object (Filler)

Ignorar e excluir o campo.

null_if

object (NullIf)

Defina o valor do campo principal como nulo em uma condição.

format_date

object (FormatDate)

Formatar um campo de string como data.

chain

object (ModifierChain)

Encadear vários modificadores.

zoned_decimal

object (ZonedDecimal)

Substituir a configuração decimal de campo com zona.

binary

object (Binary)

Modifique a configuração do campo binário.

packed_decimal

object (PackedDecimal)

Substitua a configuração do campo decimal empacotado.

null_if_invalid

object (NullIfInvalid)

Defina o campo como nulo em vez de mostrar a linha em caso de erro.

bytes

object (Bytes)

Campo "Override bytes".

varlen

object (VarLen)

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

string

object (String)

Substituir a configuração do campo de string.

null_if_empty

object (NullIfEmpty)

Defina o valor do campo principal como nulo se ele estiver vazio.

format_timestamp

object (FormatTimestamp)

Formate um campo de string como carimbo de data/hora.

hfp

object (HFP)

Defina este campo como um ponto flutuante hexadecimal.

Excluir

Excluir um campo da tabela resultante, mas ainda passar 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, campos de indicador nulo ou de comprimento podem ser omitidos da tabela.

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

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

string

Especifique o campo a ser excluído.

Desfazer aninhamento

Desfaça o aninhamento do campo.

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

string

Especificar o campo a ser desaninhado

format

string

Especifique o novo formato de campo.

O ${parent} será liberado com o nome do campo que está sendo desencapsulado.

Para structs não aninhadas, ${field} é substituído pelo nome do campo 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, para onde 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 hifens 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 ao 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 com 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 dos campos correspondentes.

Os grupos de captura da expressão regular find podem ser usados na string replace usando 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)

Enchimento

Especifica que um campo não será decodificado nem codificado. Além disso, ele também será excluído da tabela resultante durante o processo de decodificação. É possível aplicar esse modificador a qualquer campo com um tamanho 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 de indicador nulo, use um FieldSuffix com um modificador de campo null_if e defina is_inverse como true, conforme mostrado nos exemplos abaixo:

Exemplo: indicador nulo

Para criar um campo indicador 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 sintetizador de código abaixo:

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

Exemplo: indicador nulo binário

Para criar um campo de indicador 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 indicadores nulos binary usando o mesmo modelo do exemplo anterior.

Exemplo: Bytes null-indicator

Para criar um campo indicador nulo bytes, podemos usar os modificadores de campo bytes e null_if, como este. 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 um indicador nulo bytes usando o mesmo modelo do exemplo anterior.

Representação JSON
{
    "target_field": string,
    "null_value": string,
    "non_null_value": 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.

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.

FormatDate

Formata uma string para uma data usando um dos formatos aceitos. Esse modificador só pode ser aplicado a campos de tamanho. 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 com zona. Esse modificador só pode ser aplicado a 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 usada para o campo.

Binário

Ignora todos os modificadores anteriores e trata esse campo como um número binário.

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

enum (BinarySignedness)

A assinatura do número.

PackedDecimal

Defina esse campo como 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. Esse modificador só pode ser aplicado a campos de tamanho. O erro é ignorado e não é registrado no conjunto de dados de spillover. 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, o campo inteiro será preenchido com bytes nulos.

Forneça um objeto JSON vazio da seguinte maneira:

Representação JSON
{
}

Bytes

Ignora a cadeia de modificadores e trata os dados como bytes brutos. Esse modificador pode ser aplicado a campos de qualquer tamanho.

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 a duração 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 em um campo de string.

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

string

A codificação usada para o campo.

trim_suffix

boolean

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

pad_char

string

Quando o padding é definido, as strings de exportação são exportadas 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 no campo forem 0.

Forneça um objeto JSON vazio da seguinte maneira:

Representação JSON
{
}

FormatTimestamp

Formate uma string para um carimbo de data/hora usando um dos formatos fornecidos. Isso só pode ser aplicado a campos de tamanho. 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
{
}

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

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

BinarySignedness

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

Enums
UNSPECIFIED Use o tipo mais ideal com base na escala e na precisão.
SIGNED Use 64 bits para armazenar o valor. Esse modificador só funciona para números com precisão menor ou igual a 18 e 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.

Enums
AUTO Use o tipo mais ideal com base na escala e na precisão.
LONG Use 64 bits para armazenar o valor. Esse modificador só funciona para números com precisão menor ou igual a 18 e 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 valor decimal ilimitado. Essa é a opção mais lenta, mas oferece suporte a qualquer decimal de qualquer precisão em qualquer escala.
BIG_INTEGER Armazene o valor como um valor inteiro sem limites. Essa é a opção mais lenta, mas oferece suporte a qualquer número inteiro de qualquer precisão.

ZonedDecimalEncoding

Especifica a codificação a ser usada ao decodificar ou codificar um campo decimal com zona.

Enums
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.

SchemaValidationMode

O modo de validação do esquema usado durante a compilação do modelo. Esse modo garante a compatibilidade com um formato de dados de destino específico.

Enums
DEFAULT Modo de validação de esquema padrão. Esse modo garante nomes de campo exclusivos no modelo.
BIG_QUERY Modo de validação de esquema para compatibilidade com o BigQuery. Esse modo estende a validação padrão para garantir que o esquema do copybook seja compatível com os tipos de dados do BigQuery.