Configuração do transcodificador

Pode configurar o transcodificador do Mainframe Connector adicionando a configuração necessária num ficheiro JSON. Este ficheiro é denominado ficheiro de configuração do transcodificador. Tem de definir a configuração conforme especificado na secção Configuração. Os comandos qsam encode e qsam decode usam o ficheiro de configuração do transcodificador para realizar a transcodificação de dados.

Esta página descreve as várias formas como pode configurar o transcodificador do conetor de mainframe.

Configuração

O objeto Configuration é a raiz da configuração do transcodificador. 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 predefinidos para arquétipos Cobol.

field_suffixes

object (FieldSuffix)

Especifique sufixos de campos.

field_overrides

object (FieldOverride)

Especifique substituições de campos.

transformations

object (Transformation)

Especifique as transformações de campos.

schema_validation_mode

enum (SchemaValidationMode)

Especifique o modo de validação do esquema.

DefaultsSection

O objeto DefaultsSection pode ser usado para especificar modificações predefinidas por tipos de COBOL. Estas alterações são aplicadas antes de quaisquer modificações de substituição ou sufixo.

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 predefinições para campos alfanuméricos (PIC X).

numeric_display

object (FieldModifier)

Especifique predefinições para campos de apresentação numérica (decimal zonado).

binary

object (FieldModifier)

Especifique predefinições para campos de números binários (COMP).

packed_decimal

object (FieldModifier)

Especifique os valores predefinidos para campos decimais compactados (COMP-3).

national

object (FieldModifier)

Especifique predefinições para campos nacionais (PIC N).

utf8

object (FieldModifier)

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

dbcs

object (FieldModifier)

Predefinição para campos dbcs (DISPLAY-1).

hexadecimal_floating_point

object (FieldModifier)

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

FieldSuffix

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

Os campos são correspondentes se terminarem com um hífen (-) ou um caráter de sublinhado (_) seguido do sufixo.

Os sufixos não são sensíveis a maiúsculas e minúsculas.

O modificador FieldSuffix é aplicado depois do modificador FieldOverride.

Por exemplo, o modificador definido para o sufixo NID é aplicado ao campo denominado 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 este sufixo terá o modificador aplicado.

is_inverse

boolean

Especificar se o modificador é um modificador de campo inverso ou não. Um modificador de campo inverso aplica o modificador a outro campo que tem o mesmo nome que o campo com o modificador sem o modificador. Por exemplo, se os campos FLD-NID e FLD existirem no mesmo registo, o modificador é aplicado a FLD.

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

Por exemplo, para criar um campo indicador nulo, pode usar 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 aplicar aos campos correspondentes.

FieldOverride

Substituir ou modificar a cadeia de descodificação e codificação para o campo especificado.

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

string

Especifique o nome do campo ao qual aplicar o modificador.

modifier

object (FieldModifier)

Especifique o modificador a aplicar ao campo correspondente.

Transformação

As transformações de visualização são usadas para modificar a relação entre a tabela e o ficheiro QSAM. As transformações são sempre formuladas 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-lhe modificar a codificação ou a descodificação de um campo específico. Tenha em atenção que 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),
    "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 a serem aplicados sequencialmente.

zoned_decimal

object (ZonedDecimal)

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

binary

object (Binary)

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

packed_decimal

object (PackedDecimal)

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

null_if_invalid

object (NullIfInvalid)

Define o campo como nulo se ocorrer um erro de transcodificação, o que impede o transbordo de registos.

bytes

object (Bytes)

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

varlen

object (VarLen)

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

string

object (String)

Substitui a configuração predefinida para campos de string.

null_if_empty

object (NullIfEmpty)

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

format_timestamp

object (FormatTimestamp)

Formata um campo de string como uma data/hora.

hfp

object (HFP)

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

decode_as_null

object (DecodeAsNull)

Define como os valores nulos têm de ser descodificados.

encode_null_as

object (EncodeNullAs)

Define como os valores nulos têm de ser codificados.

Excluir

Excluir um campo da tabela resultante, mas continuar a ser descodificado ou codificado. Isto é útil quando o campo não precisa de ser transferido para a tabela, mas é necessário para a transcodificação. Por exemplo, os campos de indicador nulo ou de comprimento podem ser omitidos da tabela.

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

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

string

Especifique o campo a excluir.

Unnest

Desaninhe o campo.

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

string

Especifique o campo a desagrupar

format

string

Especifique o novo formato do campo.

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

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

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

Mover

Mover um campo no registo.

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

string

Especifique o campo a mover.

offset

int

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

Mudar o nome

Mude o nome de um ou mais campos com base numa correspondência de expressão regular.

Por exemplo, para substituir todos os hífens por carateres de sublinhado, 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 renomear.

O padrão é comparado com o nome completo do campo. Se o padrão corresponder a qualquer parte do nome do campo, o campo é 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 todos os campos que começam por field_ e captura o resto)
  • "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 e $2. Isto 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)

Palavra desnecessária

Especifica que um campo vai ser ignorado durante o processamento. O campo não é descodificado a partir da entrada nem codificado para a saída e é excluído do esquema e da tabela de dados resultantes durante a descodificação. Pode aplicar este modificador a qualquer campo que tenha um tamanho conhecido estático.

Forneça um objeto JSON vazio da seguinte forma:

Representação JSON
{
}

NullIf

Definir um campo como nulo se uma condição for cumprida. Tem de especificar null_value ou non_null_value ou ambos.

Para criar um campo de indicador nulo, pode usar um FieldSuffix com um modificador de campo null_if e definir is_inverse como true, conforme mostrado nos exemplos seguintes:

Exemplo: indicador nulo

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

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

Isto permite que todos os campos com o sufixo NID sejam efetivamente indicadores nulos, conforme mostrado no seguinte fragmento do livro de cópias:

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

Exemplo: indicador nulo binário

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

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

Isto permite que todos os campos com o sufixo NID sejam efetivamente binary indicadores nulos que usam o mesmo livro de registo do exemplo anterior.

Exemplo: indicador nulo de bytes

Para criar um campo de bytesindicador nulo, podemos usar os modificadores de campo bytes e null_if da seguinte 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"
     }
    }
   }
  ]
 }

Isto permite que todos os campos com o sufixo NID sejam efetivamente um indicador nulo bytes usando o mesmo livro de cópias 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 quer verificar. O campo tem de estar no âmbito.

null_value

string

Quando especificado, se target_field for igual a este valor, o campo não é descodificado nem codificado, e o valor é definido como nulo.

null_values

string

Quando especificado, se target_field for igual a qualquer um destes valores, o campo não é descodificado nem codificado, e o valor é definido como nulo.

non_null_value

string

Quando especificado, se target_field não for igual a este valor, o campo não é descodificado nem codificado, e o valor é definido como nulo.

non_null_values

string

Quando especificado, se target_field não for igual a nenhum destes valores, o campo não é descodificado nem codificado, e o valor é definido como nulo.

FormatDate

Formatar uma string numa data usando um dos formatos suportados. Só pode aplicar este modificador a campos dimensionados. Durante o processo de descodificação, os formatos são testados por ordem até que um dos formatos corresponda à string. Durante o processo de codificação, é usado o primeiro formato e os restantes são ignorados.

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 pela ordem em que são especificados.

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

object (FieldModifier)

Especifique a lista de modificadores a aplicar.

ZonedDecimal

Define várias opções relacionadas com a codificação e a descodificação de decimais zonados. Só pode aplicar este modificador 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 usar ao descodificar ou codificar o campo.

encoding

enum (ZonedDecimalEncoding)

A codificação com a qual o campo está codificado.

Binário

Ignorar todos os modificadores anteriores e tratar 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 este campo como PackedDecimal.

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

enum (DecimalLogicalType)

Substitua o tipo lógico. Por predefinição, o conetor de mainframe usa o tipo lógico ideal com base na precisão e na escala.

NullIfInvalid

Tratar o valor como nulo se a transcodificação falhar. Só pode aplicar este modificador a campos dimensionados. O erro é ignorado e não é registado no conjunto de dados de transbordo. Durante o processo de descodificação, o valor deste campo será nulo para este registo. Durante o processo de codificação, se não for possível escrever os dados, todo o campo é preenchido com bytes nulos.

Forneça um objeto JSON vazio da seguinte forma:

Representação JSON
{
}

Bytes

Trata o campo como uma sequência de bytes não processados. Este modificador substitui quaisquer informações de tipo anteriores, fazendo com que os dados de bytes não processados do campo sejam preservados tal como estão, sem codificação de carateres específica nem interpretação numérica. Pode aplicar este modificador a qualquer campo, independentemente do respetivo tipo ou tamanho original.

Forneça um objeto JSON vazio da seguinte forma:

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 de grupo que contém os dados.

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

Forneça um objeto JSON vazio da seguinte forma:

Representação JSON
{
}

String

Define as várias opções relacionadas com a descodificação e a 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 a qual o campo está codificado.

trim_suffix

boolean

Quando definido como verdadeiro, todos os espaços em branco no final da string são removidos. trim_suffix afeta apenas a descodificação. A codificação ignora trim_suffix. Tenha em atenção que as strings que consistam apenas em espaços em branco tornam-se strings vazias.

pad_char

string

Quando define strings de exportação de preenchimento com pad_char. Se estiver definido, o comprimento de pad_char tem de ser 1. pad_char afeta apenas a codificação. A descodificação ignora pad_char.

NullIfEmpty

O campo deve ser definido como nulo se todos os bytes nesse campo forem 0.

Forneça um objeto JSON vazio da seguinte forma:

Representação JSON
{
}

FormatTimestamp

Formate uma string para uma indicação de tempo usando um dos formatos fornecidos. Só pode ser aplicado a campos dimensionados. Durante a descodificação, os formatos são testados por ordem até que um dos formatos corresponda à string. Durante a codificação, é usado o primeiro formato e os restantes são ignorados.

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

object (DateTimeFormat)

Lista de formatos de data/hora.

HFP

Defina este campo como ponto flutuante hexadecimal.

Forneça um objeto JSON vazio da seguinte forma:

Representação JSON
{
}

DecodeAsNull

Define como os valores nulos são interpretados durante o processo de descodificação. Como o COBOL não suporta nativamente valores nulos, este parâmetro especifica que valores têm de ser tratados como nulos.

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

string

Uma lista de representações de strings. Após a descodificação inicial do campo para o respetivo formato de string, se o conteúdo do campo corresponder a qualquer um destes valores, é 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 destes bytes, é tratado como nulo. Por exemplo, usar 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

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

hex_byte

string

Codifique esta 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 elevados. Pode aplicar esta opção a qualquer campo com um tamanho conhecido. Os bytes são repetidos para corresponderem ao tamanho do campo subjacente.

DateTimeFormat

Tamanho e padrão a usar ao converter o campo numa data.

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

int

Especifique o tamanho do campo ao qual este padrão se aplica.

pattern

string

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

BinarySignedness

Tipo lógico a usar para um campo decimal.

Enumerações
UNSPECIFIED Use o tipo mais adequado com base na escala e na precisão.
SIGNED Use 64 bits para armazenar o valor. Este modificador só funciona para números cuja precisão seja inferior ou igual a 18 e cuja escala seja 0.
UNSIGNED Use 64 bits para armazenar o valor. Este modificador só funciona para números cuja precisão seja igual ou inferior a 18.

SchemaValidationMode

Especifique o modo de validação do esquema a usar durante a compilação do copybook. Este modo valida a compatibilidade com um formato de dados de destino específico.

Enumerações
DEFAULT Modo de validação de esquema predefinido. Este modo verifica se existem nomes de campos exclusivos no copybook.
BIG_QUERY Modo de validação do esquema para compatibilidade com o BigQuery. Este modo estende a validação predefinida para verificar se o esquema do copybook é compatível com os tipos de dados do BigQuery.

ZonedDecimalEncoding

Especifique a codificação a usar ao descodificar ou codificar um campo decimal zonado.

Enumerações
UNSPECIFIED Mantenha a codificação especificada na cadeia de modificadores. Se não for especificado nenhum modificador, é usado EBCDIC.
EBCDIC Use a codificação EBCDIC.
ASCII Use a codificação ASCII.

DecimalLogicalType

Tipo lógico a usar para um campo decimal.

Enumerações
AUTO Use o tipo mais adequado com base na escala e na precisão.
LONG Use 64 bits para armazenar o valor. Este modificador só funciona para números cuja precisão seja inferior ou igual a 18 e cuja escala seja 0.
DECIMAL64 Use 64 bits para armazenar o valor. Este modificador só funciona para números cuja precisão seja igual ou inferior a 18.
BIG_DECIMAL Armazene o valor como um valor decimal ilimitado. Esta é a opção mais lenta, mas suporta qualquer decimal de qualquer precisão a qualquer escala.
BIG_INTEGER Armazene o valor como um valor de número inteiro ilimitado. Esta é a opção mais lenta, mas suporta qualquer número inteiro de qualquer precisão.