Para configurar o transcodificador do Mainframe Connector, adicione a configuração necessária em um arquivo JSON.
Esse arquivo é chamado de arquivo de configuração do transcodificador. É preciso definir 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 da transcodificação.
Ele contém todas as opções de configuração do transcodificador.
| Representação JSON |
|---|
{ "defaults": object ( |
| Campos | |
|---|---|
defaults |
Especifique modificadores de campo padrão para arquétipos do Cobol. |
field_overrides |
Especifique as substituições de campo. |
field_suffixes |
Especifique os sufixos de campo. |
header_records_to_skip |
Especifique o número de primeiros registros a serem ignorados. |
record_filter_condition |
Especifique uma condição de filtro para os registros. O filtro é baseado em um subconjunto da Common Expression Language (CEL) e é compatível com o seguinte:
Exemplo:
|
schema_validation_mode |
Especifique o modo de validação do esquema. |
transformations |
Especifique as transformações de campo. |
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 ( |
| Campos | |
|---|---|
alpha_numeric_display |
Especifique os padrões para campos alfanuméricos (PIC X). |
binary |
Especifique os padrões para campos de números binários (COMP). |
dbcs |
Padrão para campos dbcs (DISPLAY-1). |
hexadecimal_floating_point |
Padrão para campos de ponto flutuante hexadecimal (COMP-1, COMP-2). |
national |
Especifique os padrões para os campos nacionais (PIC N). |
numeric_display |
Especifique os padrões para campos de exibição numérica (decimal zonado). |
packed_decimal |
Especifique os padrões para campos decimais compactados (COMP-3). |
utf8 |
Especifique os padrões para campos UTF-8 (PIC U). |
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 |
|---|
{ "binary": object ( |
| Campos | |
|---|---|
binary |
Substitui a configuração padrão para campos numéricos binários. |
bytes |
Trata o campo como uma sequência bruta de bytes, ignorando as informações de tipo anteriores. |
chain |
Encadeia vários modificadores para serem aplicados em sequência. |
decode_as_null |
Define como os valores nulos precisam ser decodificados. |
encode_null_as |
Define como os valores nulos precisam ser codificados. |
filler |
Exclui o campo do processamento e da saída. |
format_date |
Formata um campo de string como uma data. |
format_timestamp |
Formata um campo de string como um carimbo de data/hora. |
hfp |
Interpreta o campo como um número de ponto flutuante hexadecimal (HFP, na sigla em inglês). |
null_if |
Define condicionalmente o campo como nulo com base no valor de outro campo. |
null_if_empty |
Define o campo como nulo se o conteúdo dele for considerado vazio. |
null_if_invalid |
Define o campo como nulo se ocorrer um erro de transcodificação, evitando o transbordamento de registros. |
packed_decimal |
Substitui a configuração padrão para campos decimais compactados. |
string |
Substitui a configuração padrão para campos de string. |
varlen |
Defina o registro como um campo de comprimento variável. |
zoned_decimal |
Substitui a configuração padrão para campos decimais zonados. |
Binário
Ignora os modificadores anteriores e trata esse campo como um número binário.
| Representação JSON |
|---|
{ "signedness": enum ( |
| Campos | |
|---|---|
signedness |
A presença de sinal do número. |
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 como estão, sem codificação de caracteres específica ou interpretação numérica. É possível aplicar esse modificador a qualquer campo, independentemente do tipo ou tamanho original.
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 é compatível com nulos, esse parâmetro especifica quais valores precisam ser tratados como nulos.
| Representação JSON |
|---|
{ "hex_bytes": string, "values": string |
| Campos | |
|---|---|
hex_bytes |
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 |
values |
Uma lista de representações de string. Após a decodificação inicial do campo para o formato de string, se o conteúdo do campo corresponder a qualquer um desses valores, ele será tratado como nulo. |
EncodeNullAs
Define como os valores nulos são representados durante o processo de codificação.
| Representação JSON |
|---|
{ "hex_byte": string, "value": string |
| Campos | |
|---|---|
hex_byte |
Codifica essa sequência de bytes específica (representada como uma string hexadecimal)
quando o valor de origem é nulo. Por exemplo, |
value |
Codifica esse valor específico quando o valor de origem é nulo. Verifique se a string é válida para o tipo do campo. |
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 que tenha um tamanho estático conhecido.
Forneça um objeto JSON vazio da seguinte maneira:
| Representação JSON |
|---|
{ |
FormatDate
Formata uma string ou um campo numérico como uma data usando um dos formatos aceitos. Só é possível aplicar esse modificador a campos com tamanho definido. Para campos numéricos, eles são convertidos dinamicamente em uma representação de string (excluindo qualquer marcador de sinal) antes da formatação. Presume-se que os valores de data sejam positivos. Datas numéricas negativas não são aceitas e não serão analisadas. 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 os demais são ignorados.
| Representação JSON |
|---|
{ "formats": object ( |
| Campos | |
|---|---|
formats |
Lista de formatos de data. |
DateTimeFormat
Tamanho e padrão a serem usados ao converter o campo em uma data.
| Representação JSON |
|---|
{ "pattern": string, "size": int |
| Campos | |
|---|---|
pattern |
Especifique o padrão do formatador de data. Para mais informações sobre padrões de formatação válidos, consulte Class DateTimeFormatter. Observação: os anos de dois dígitos ( |
size |
Especifique o tamanho do campo ao qual esse padrão se aplica. |
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 os demais serão ignorados.
| Representação JSON |
|---|
{ "formats": object ( |
| Campos | |
|---|---|
formats |
Lista de formatos de carimbo de data/hora. |
HFP
Defina esse campo como usar pontos flutuantes hexadecimal.
Forneça um objeto JSON vazio da seguinte maneira:
| Representação JSON |
|---|
{ |
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 ( |
| Campos | |
|---|---|
modifiers |
Especifique a lista de modificadores a serem aplicados. |
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 a seguir:
Exemplo: indicador nulo
Para criar um campo de indicador nulo, use o modificador de camponull_if desta forma.
{
"field_suffixes": [
{
"suffix": "NID",
"is_inverse": true,
"modifier": {
"null_if": {
"null_value": "?",
"target_field": "$self"
}
}
}
]
}
NID sejam efetivamente indicadores nulos, conforme mostrado no
seguinte snippet de copybook:
01 REC. 02 FIELD PIC X(10). 02 FIELD-NID PIC X(1).
Exemplo: indicador nulo binário
Para criar um campo indicador nulobinary, podemos usar os modificadores de campo binary e null_if desta forma.
{
"field_suffixes": [
{
"suffix": "NID",
"modifier": {
"binary": {}
}
},
{
"suffix": "NID",
"is_inverse": true,
"modifier": {
"null_if": {
"null_value": "15",
"target_field": "$self"
}
}
}
]
}
NID sejam efetivamente indicadores nulos binary usando o mesmo copybook do exemplo anterior.
Exemplo: indicador nulo de bytes
Para criar um campo indicador nulobytes, 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"
}
}
}
]
}
NID sejam efetivamente um indicador nulo bytes usando o mesmo copybook do exemplo anterior.
| Representação JSON |
|---|
{ "non_null_value": string, "non_null_values": string, "null_value": string, "null_values": string, "target_field": string |
| Campos | |
|---|---|
non_null_value |
Quando especificado, se |
non_null_values |
Quando especificado, se |
null_value |
Quando especificado, se |
null_values |
Quando especificado, se |
target_field |
Especifique o campo com o valor que você quer verificar. O campo precisa estar no escopo. Para acessar campos aninhados, use a notação de ponto (por exemplo, "GROUP.FIELD"). |
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 |
|---|
{ |
NullIfInvalid
Tratar o valor como nulo se a transcodificação falhar.
Só é possível aplicar esse modificador a campos com tamanho definido.
Por padrão, quando um campo não é decodificado, todo o registro é movido para o conjunto de dados de transbordamento (erro) e excluído da saída, enquanto o restante do carregamento é concluído com os registros válidos.
Quando você define o modificador null_if_invalid, o Mainframe Connector mantém o registro inválido e define esse campo como nulo.
Use-o apenas quando quiser reter essas linhas com um valor nulo, não apenas para que um carregamento seja bem-sucedido, já que o padrão já ignora os registros inválidos.
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 |
|---|
{ |
PackedDecimal
Defina esse campo como PackedDecimal.
| Representação JSON |
|---|
{ "logical_type": enum ( |
| Campos | |
|---|---|
logical_type |
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. |
negative_sign_nibble |
Especifica o nibble a ser usado para sinais negativos. Embora x'B' e x'D' sejam sinais negativos válidos, alguns sistemas ou aplicativos de mainframe podem ter uma convenção que exige um em detrimento do outro. |
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, "pad_char": string, "trim_suffix": boolean |
| Campos | |
|---|---|
encoding |
A codificação com que o campo é codificado. |
pad_char |
Quando definido, preenche as strings de exportação com |
trim_suffix |
Quando definido como verdadeiro, qualquer espaço em branco no final da string será cortado. 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. |
VarLen
Representa um campo de comprimento variável.
Um campo de comprimento variável contém três partes:
- Um item de grupo que contém dois subcampos.
- Um campo dentro do item do grupo que contém o tamanho dos dados da transação.
- Um campo dentro do item de 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 |
|---|
{ |
ZonedDecimal
Define várias opções relacionadas à codificação e decodificação de decimais zonados. Só é possível aplicar esse modificador a um campo decimal.
| Representação JSON |
|---|
{ "encoding": enum ( |
| Campos | |
|---|---|
encoding |
A codificação com que o campo é codificado. |
logical_type |
Especifique o tipo lógico a ser usado ao decodificar ou codificar o campo. |
FieldOverride
Substitua ou modifique a cadeia de decodificação e codificação do campo especificado.
| Representação JSON |
|---|
{ "field": string, "modifier": object ( |
| Campos | |
|---|---|
field |
Especifique o nome do campo ao qual o modificador será aplicado. |
modifier |
Especifique o modificador a ser aplicado ao campo correspondente. |
FieldSuffix
Os sufixos de campo se aplicam a todos os campos que têm um sufixo.
Os campos serão correspondentes 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 |
|---|
{ "is_inverse": boolean, "modifier": object ( |
| Campos | |
|---|---|
is_inverse |
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 o modificador. Por exemplo, se os campos Ao usar um modificador de campo inverso, o identificador especial Por exemplo, para criar um campo de indicador nulo, use o modificador de campo |
modifier |
Especifique o modificador a ser aplicado aos campos correspondentes. |
suffix |
O campo com esse sufixo terá o modificador aplicado. |
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 de tabelas de visualização no BigQuery.
| Representação JSON |
|---|
{ "exclude": object ( |
| Campos | |
|---|---|
exclude |
|
move |
|
rename |
|
split |
|
target_table |
Opcional. Especifique o nome da tabela de destino (visualização) em que a transformação será aplicada. Por padrão, as transformações se aplicam à tabela principal ( Observação: as transformações de divisão não podem ser segmentadas e vão gerar um erro se |
unnest |
|
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, os campos de indicador nulo ou de comprimento podem ser omitidos da tabela.
Para ignorar totalmente a transcodificação, aplique o modificador de preenchimento.
| Representação JSON |
|---|
{ "field": string |
| Campos | |
|---|---|
field |
Especifique o campo a ser excluído. |
Mover
Mover um campo no registro.
| Representação JSON |
|---|
{ "field": string, "offset": int |
| Campos | |
|---|---|
field |
Especifique o campo que será movido. |
offset |
Especifique o número de posições, 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 |
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, o campo será considerado uma correspondência. Exemplos:
|
replace |
Especifica o novo nome dos campos correspondentes. Os grupos de captura da expressão regular Exemplos:
|
Divisão
| Representação JSON |
|---|
{ "field": string, "foreign_key": string, "primary_key": string |
| Campos | |
|---|---|
field |
Especifique o campo que você quer dividir. |
foreign_key |
Especifique o nome do campo que será adicionado ao novo esquema em que o valor da chave primária será armazenado. Se não for especificado, o nome da chave primária será usado. |
primary_key |
Especifique o nome do campo que será usado como chave primária. |
Unnest
Remova o aninhamento do campo.
| Representação JSON |
|---|
{ "field": string, "format": string |
| Campos | |
|---|---|
field |
Especificar o campo a ser desaninhar |
format |
Especifique o novo formato do campo. O Para structs não aninhados, Para matrizes e listas não aninhadas, |
Tipos enumerados
BinarySignedness
| Tipos enumerados | |
|---|---|
SIGNED |
O número binário é assinado. |
UNSIGNED |
O número binário não tem sinal. |
UNSPECIFIED |
Tente deduzir se o valor é assinado ou não com base na cadeia existente. |
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. |
BIG_DECIMAL |
Armazene o valor como um valor 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 valor inteiro ilimitado. Essa é a opção mais lenta, mas aceita qualquer número inteiro de qualquer precisão. |
DECIMAL64 |
Use 64 bits para armazenar o valor. Esse modificador só funciona para números com precisão menor ou igual a 18. |
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. |
PackedDecimalNegativeNibble
| Tipos enumerados | |
|---|---|
NIBBLE_B |
O padrão é usar x'B'. |
NIBBLE_D |
Use x'D' para o nibble de sinal negativo. |
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 | |
|---|---|
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. |
DEFAULT |
Modo de validação de esquema padrão. Esse modo verifica se os nomes de campo exclusivos estão no copybook. |
MYSQL |
Modo de validação de esquema para compatibilidade com o 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. |
POSTGRES |
Modo de validação de esquema para compatibilidade com o 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. |
ZonedDecimalEncoding
Especifique a codificação a ser usada ao decodificar ou codificar um campo decimal zonado.
| Tipos enumerados | |
|---|---|
ASCII |
Use a codificação ASCII. |
EBCDIC |
Use a codificação EBCDIC. |
UNSPECIFIED |
Mantenha a codificação especificada na cadeia de modificadores.
Se nenhum modificador for especificado, EBCDIC será usado. |