Comandos da API Mainframe Connector

A tabela a seguir lista os comandos do BigQuery, do Cloud Storage e de outros Google Cloud que podem ser usados com o Mainframe Connector.

Produto Comando Descrição Compatível com transcodificação remota
Comandos do BigQuery Use este comando para criar um arquivo binário. O comando aceita um COPYBOOK DD como entrada.

Observação:recomendamos usar os comandos qsam decode e qsam encode para realizar essa tarefa. Para informações sobre as vantagens de usar os comandos qsam, consulte Vantagens dos comandos qsam.

O comando bq export é compatível com alguns recursos de ajuste de desempenho. Para mais informações, consulte Melhorias de desempenho para o comando bq export. É possível usar conjuntos de caracteres personalizados com o comando bq export. Para mais informações, consulte Usar conjuntos de caracteres personalizados.

Observação:o comando bq export falha em solicitações para exportar tabelas grandes do Bigtable. Para evitar erros, adicione a flag -allowLargeResults ao comando bq export ao exportar tabelas grandes.
Sim
Use esse comando para carregar dados em uma tabela. Não
Use esse comando para criar recursos do BigQuery, como tabelas integradas ou externas, que precisam de particionamento e clustering para serem configurados.

Também é possível usar o comando bq mk para gerar uma tabela do BigQuery diretamente da análise de copybooks COBOL. Para mais informações, consulte Criar uma tabela do BigQuery com base em um copybook.
Não
Use este comando para criar um job de consulta que execute a consulta SQL especificada. O comando lê a consulta SQL da flag --sql ou de QUERY DD. Se ambos forem fornecidos, a consulta na flag --sql terá precedência.

Use a flag --follow=true para gerar um relatório que mostre os resultados de uma consulta de seleção. Para gravar esse relatório em um arquivo no mainframe, defina uma instrução DD AUDITL que aponta para o arquivo que deve conter o relatório de registros de auditoria. Não use a flag --follow se quiser um comportamento normal de geração de registros.

Alguns resultados de consultas podem retornar um grande número de linhas, às vezes em milhões. Para que a saída permaneça legível, o número de linhas exibidas é limitado. Para controlar o número de linhas exibidas, use a flag --report_row_limit. Por exemplo, use --report_row_limit 10 para limitar os resultados a 10 linhas. Por padrão, o número de linhas mostradas é limitado a 30.

Para usar a parametrização bq query, consulte Parametrização de consultas do bq.
Sim
Use esse comando para excluir permanentemente um recurso do BigQuery. Como esse comando exclui um recurso permanentemente, recomendamos que você o use com cuidado. Não
Comandos do Cloud Run Use este comando para acionar um job do Cloud Run no seu mainframe. Não
Use este comando para conferir os registros de uma execução de job específica do Cloud Run. Não
Use este comando para cancelar um job do Cloud Run. Não
Comandos do Cloud Storage Use esse comando para copiar texto ou dados binários para o Cloud Storage. É possível usar o modo de cópia binária simples para copiar um conjunto de dados do IBM z/OS para o Cloud Storage sem modificações como parte de um pipeline de dados. Opcionalmente, você pode converter a codificação de caracteres do código de troca decimal codificado em binário estendido (EBCDIC) para ASCII UTF-8 e adicionar quebras de linha.

Observação:recomendamos usar os comandos copy text para realizar essa tarefa, já que eles oferecem melhores recursos.

Também é possível usar esse comando para copiar o código-fonte do aplicativo definido em linguagem de controle de jobs (JCL).
Não
Utilitário gsutil Use este comando para transcodificar um conjunto de dados e gravá-lo no Cloud Storage no formato de arquivo Optimized Row Columnar (ORC). O comando lê os dados do INFILE DD e o layout do registro do arquivo COPYBOOK.

Observação:recomendamos usar os comandos qsam decode e qsam encode para realizar essa tarefa. Para informações sobre as vantagens de usar os comandos qsam, consulte Vantagens dos comandos qsam.

Se você quiser que o comando leia os dados de um arquivo de nome da fonte de dados (DSN), use as seguintes flags:
  • --inDsn: o DSN do conjunto de dados de entrada. Se fornecida, essa flag substitui INFILE DD.
  • --cobDsn: o DSN do copybook. Se fornecida, essa flag substitui COPYBOOK DD.
Em seguida, o comando abre um número configurável de conexões paralelas com a API Cloud Storage e transcodifica o conjunto de dados COBOL para o formato de arquivo ORC colunar e compactado com GZIP. Você pode esperar uma taxa de compactação de cerca de 35%.

Também é possível usar esse comando para interagir com o serviço gRPC do Mainframe Connector em execução em uma VM no mainframe. Para isso, defina as variáveis de ambiente SRVHOST e SRVPORT ou forneça o nome do host e o número da porta usando opções de linha de comando. Quando o serviço gRPC é usado, o conjunto de dados de entrada é primeiro copiado para o Cloud Storage pelo Mainframe Connector. Em seguida, uma chamada de procedimento remoto (RPC) é feita para instruir o serviço gRPC a transcodificar o arquivo.

Você também pode realizar as seguintes tarefas com o comando gsutil cp:
Sim
Use esse comando para excluir buckets ou objetos em um bucket. Não
Utilitário gszutil O utilitário gszutil é executado usando o SDK do IBM JZOS Java e fornece um emulador de shell que aceita gsutil e invocações de linha de comando do BigQuery usando JCL.

Observação:recomendamos usar os comandos qsam decode e qsam encode para realizar essa tarefa. Para informações sobre as vantagens de usar os comandos qsam, consulte Vantagens dos comandos qsam.

O utilitário gszutil estende a funcionalidade do utilitário gsutil aceitando um esquema na forma de um COPYBOOK DD, usando-o para transcodificar conjuntos de dados COBOL diretamente para ORC antes do upload para o Cloud Storage. O utilitário gszutil também permite executar query e load do BigQuery usando JCL.

O utilitário gszutil funciona com o servidor gRPC, que ajuda a reduzir o consumo de milhões de instruções por segundo (MIPS). Recomendamos usar o utilitário gszutil no seu ambiente de produção para converter arquivos binários no Cloud Storage para o formato ORC.
Não
Comandos qsam e vsam Use esse comando para transcodificar registros de arquivos QSAM para o formato desejado usando o argumento --output-format. O arquivo QSAM original é dividido em partes com base no valor especificado com o argumento --max-chunk-size. A saída transcodificada é salva no caminho de destino como arquivos classificados lexicograficamente. Não
Use esse comando para converter dados de uma fonte externa em um arquivo QSAM. A entrada é definida pelo valor especificado usando o argumento --input-format. Não
Use esse comando para transcodificar registros de arquivos do método de acesso ao armazenamento virtual (VSAM) para o formato desejado usando o argumento --output-format. O arquivo VSAM original é dividido em partes com base no valor especificado com o argumento --max-chunk-size. A saída transcodificada é salva no caminho de destino como arquivos classificados lexicograficamente. Não
Comandos do Pub/Sub Use este comando para publicar uma mensagem em um tópico do Pub/Sub. Não
Outros comandos Use esse comando para copiar um conjunto de dados binários de um caminho de origem para um caminho de destino. Não
Use esse comando para copiar um arquivo para um local de armazenamento de sua escolha, como o Cloud Storage, e vice-versa. Não
Use esse comando para fazer uma solicitação HTTP a um serviço da Web ou APIs REST. Não
Use este comando para acionar a execução de um modelo flex do Dataflow. O comando executa um job do caminho especificado do modelo flexível. Para mais informações, consulte gcloud dataflow flex-template run. Não
Use esse comando para imprimir os dados necessários do sistema na saída padrão (stdout). Isso permite que a equipe de suporte do Mainframe Connector colete as informações necessárias para diagnosticar um problema sem precisar de uma interação extensa com o cliente.
Com base na flag usada, o comando systemreport imprime os seguintes dados do sistema:
  • --supported_ciphers: criptografias compatíveis
  • --available_security_providers: provedores de segurança disponíveis
Não

Usar conjuntos de caracteres personalizados

O Mainframe Connector oferece suporte a diferentes conjuntos de caracteres que decodificam bytes em strings do BigQuery e vice-versa. Com o Mainframe Connector, é possível configurar seu próprio conjunto de caracteres personalizado. É possível configurar um conjunto de caracteres personalizado criando um arquivo de mapeamento de caracteres Unicode (UCM). O Mainframe Connector é compatível com o seguinte subconjunto do formato UCM:

<code_set_name>               "<name>"
<uconv_class>                 "SBCS"
<subchar>                     \x1A #Example

CHARMAP
#_______ _________
<U0000> \x00 |0       #For the third column, only 0 is supported.
<U0001> \x01 |0
#etc
END CHARMAP

Se você quiser usar um conjunto de caracteres personalizado, defina um arquivo de configuração no formato UCM. É possível usar esse conjunto de caracteres personalizado com os comandos gsutil cp ou bq export definindo a flag --encoding=charset.

Ao criar um conjunto de caracteres personalizado, verifique o seguinte:

  • Ao definir um arquivo UCM, tenha em mente o seguinte:
    • O Mainframe Connector só aceita conjuntos de caracteres personalizados usando um conjunto de caracteres de byte único (SBCS, na sigla em inglês).
    • O Mainframe Connector só é compatível com o indicador de precisão UCM |0.
    • Verifique se os arquivos UCM estão localizados nos serviços do sistema Unix z/OS (USS) e não em um conjunto de dados particionado de armazenamento virtual múltiplo (MVS PDS).
    • Verifique se os arquivos UCM estão salvos no formato American Standard Code for Information Interchange (ASCII) e não no formato Extended Binary Coded Decimal Interchange Code (EBCDIC).
  • Forneça um mapeamento explícito para cada valor de byte único possível para um caractere Unicode. Se você não tiver certeza de qual caractere Unicode quer mapear para um byte, recomendamos que o mapeie para U+FFFD. É possível mapear sequências de bytes diferentes para o mesmo caractere Unicode. No entanto, nesses casos, o mapeamento não é bidirecional. Ou seja, quando você carrega dados no BigQuery e depois os exporta de volta para um arquivo binário, a saída pode ser diferente da entrada original.
  • Verifique se as sequências de bytes na segunda coluna são exclusivas. Se várias sequências de bytes forem mapeadas para o mesmo caractere Unicode, ele será decodificado para uma sequência de bytes do último mapeamento definido no arquivo UCM.
  • Verifique se o Mainframe Connector consegue encontrar o arquivo UCM definindo a variável de ambiente BQSH_FEATURE_CUSTOM_CHARSET como o caminho do arquivo UCM. Se quiser usar vários conjuntos de caracteres, forneça os caminhos para vários conjuntos separados pelo delimitador de ponto e vírgula. Por exemplo, BQSH_FEATURE_CUSTOM_CHARSET=path1;path2. path pode apontar para um arquivo local ou armazenado no Cloud Storage. Se você executar os comandos gsutil cp ou bq export com a flag --remote para realizar uma transcodificação remota, o Mainframe Connector usará o valor local definido para a variável de ambiente BQSH_FEATURE_CUSTOM_CHARSET. O mesmo se aplica quando você executa o Mainframe Connector no modo independente. Se a flag --encoding se referir a um conjunto de caracteres personalizado que não corresponde ao valor definido para BQSH_FEATURE_CUSTOM_CHARSET (ou se você não definiu BQSH_FEATURE_CUSTOM_CHARSET), o comando será encerrado com uma mensagem de erro.

Configuração de ajuste de desempenho para o comando bq export

O Mainframe Connector é compatível com a seguinte configuração de ajuste de desempenho para o comando bq export:

  • exporter_thread_count: (opcional) defina o número de linhas de execução de trabalho. O valor padrão é 4.
  • max_read_streams: (opcional) defina o número máximo de fluxos de leitura. O valor padrão é o mesmo definido para exporter_thread_count.
  • order_response: (opcional) se você definir essa flag como "true", o exportador vai manter a ordem dos resultados da consulta. Essa flag afeta o desempenho da exportação. O valor padrão é falso.
  • max_read_queue: (opcional) define o número máximo de filas de registros de leitura. O valor padrão é o dobro do número de linhas de execução.
  • transcoding_buffer: (opcional) define o tamanho do buffer de transcodificação por linha de execução em MBs. O valor padrão é 20 MB.

Também é possível aumentar o tamanho da janela de transporte definindo a variável de ambiente OVERRIDE_GRPC_WINDOW_MB para melhorar o desempenho. O tamanho padrão da janela é 4 MB.

Criar uma tabela do BigQuery usando um copybook

É possível usar o comando bq mk para gerar uma tabela do BigQuery diretamente da análise de copybooks COBOL. O analisador nativo de copybook extrai valores padrão da cláusula VALUE em um copybook e os atribui às colunas correspondentes em uma tabela do BigQuery recém-criada.

Para ajudar você a testar esse recurso, o comando bq mk também oferece um modo de teste a seco. Esse modo permite visualizar o comando CREATE TABLE SQL gerado sem criar a tabela no BigQuery.

O comando bq mk oferece as seguintes opções de configuração para compatibilidade com esse recurso:

  • --schema_from_copybook: especifica o copybook a ser usado para criar a tabela.
  • --dry_run: (opcional) quando ativado, o comando só imprime o comando CREATE TABLE SQL gerado sem executá-lo. Essa flag é definida como "false" por padrão.
  • --tablespec "[PROJECT_ID]:[DATASET].[TABLE]": especifica o ID do projeto, o conjunto de dados e o nome da tabela do BigQuery para a tabela de destino.
  • --encoding: especifica a codificação usada para ler o arquivo copybook. O valor padrão é CP037.

As seguintes cláusulas VALUE são aceitas:

VAR1   PIC 9(5) VALUE 55.
*-- Set VAR1 to 55
VAR1   PIC X(5) VALUE aaaa. Set VAR1 to aaaa
VAR1   PIC 9(3) COMP VALUE 3. Set VAR1 to 3 (binary)
VAR1   PIC [9(5), X(5)] VALUE <literal>. Set VAR1 to <literal>
VAR1   PIC [9(5), X(5)] VALUE ZERO. Set VAR1 to 0 or "0"
VAR1   PIC [9(5), X(5)] VALUE ZEROS. Set VAR1 to 0 or "00000"
VAR1   PIC [9(5), X(5)] VALUE ZEROES. Set VAR1 to 0 or "00000"
VAR1   PIC X(5) VALUE SPACE. Set VAR1 to  " "
VAR1   PIC X(5) VALUE SPACES. Set VAR1 to  "     "

As cláusulas HIGH-VALUE e LOW-VALUE são compatíveis apenas com variáveis alfanuméricas.

VAR1   PIC X(5) VALUE HIGH-VALUE. Set VAR1 to `X"FF "
VAR1   PIC X(5) VALUE HIGH-VALUES. Set VAR1 to 0 or `X"FFFFFFFFFF"
VAR1   PIC X(5) VALUE LOW-VALUE. Set VAR1 to `X"00" (NULL)
VAR1   PIC X(5) VALUE LOW-VALUES. Set VAR1 to `X"0000000000" (NULL)
VAR1   PIC X(5) VALUE QUOTE. Set VAR1 to `"`
VAR1   PIC X(5) VALUE `QUOTES`. Set VAR1 to 0 or `""""`
VAR1   PIC [9(5), X(5)] VALUE NULL. Not defined and won't be supported
VAR1   PIC [9(5), X(5)] VALUE ALL <literal>. Set all fields with the value ALL to <literal>

Parametrização bq query

Com o Mainframe Connector, é possível usar consultas parametrizadas com bq query.

Confira a seguir um exemplo de como usar uma consulta bq query parametrizada:

Arquivo de consulta

SELECT * FROM `bigquery-public-data.samples.wikipedia` WHERE title = @xtitle

Confira um exemplo com vários parâmetros.

Arquivo de consulta

SELECT * FROM bigquery-public-data.samples.wikipedia WHERE title = @mytitle AND num_characters > @min_chars;

Exemplo de execução

bq query \
--project_id=mainframe-connector-dev \
--location="US" \
--parameters=mytitle::Hippocrates,min_chars:INT64:42600

Faça uma simulação do comando gsutil cp.

O comando gsutil cp decodifica um arquivo QSAM usando um livro de cópias COBOL e gera um arquivo ORC no Cloud Storage. É possível fazer uma simulação do comando gsutil cp usando a flag dry_run e testar as seguintes etapas:

  • Analise um copybook ou arquivo de dados COBOL e verifique se ele é compatível com o Mainframe Connector.
  • Decodifica um arquivo QSAM sem gravá-lo no Cloud Storage.

Use o comando a seguir para fazer uma simulação:

gsutil cp \
--dry_run \
gs://result-dir

Se todas as etapas forem executadas com sucesso, o comando vai sair com o código de retorno 0. Se houver algum problema, uma mensagem de erro será exibida.

Quando você usa a flag dry_run, todas as estatísticas, como o total de bytes lidos, o número de registros gravados e o total de erros, são registradas.

Se você usar a flag dry_run e a fonte de dados não existir, o comando não vai retornar um erro. Em vez disso, ele verifica apenas o analisador de copybook e conclui a execução.

Copiar um arquivo do Cloud Storage para o mainframe

Use o comando gsutil cp para copiar um arquivo do Cloud Storage para um conjunto de dados do Mainframe. Não é possível copiar conjuntos de dados particionados (PDS).

Para copiar um arquivo do Cloud Storage para um conjunto de dados do mainframe, especifique o DSN e os requisitos de espaço do arquivo que você quer baixar para o mainframe em JCL, conforme mostrado no exemplo a seguir:

//OUTFILE  DD DSN=MAINFRAME.DSN.FILE,DISP=(,CATLG),
//            RECFM=FB,DSORG=PS,
//            SPACE=(10,(2,1),RLSE),
//            AVGREC=M,
//            UNIT=SYSDA
//SYSPRINT DD SYSOUT=*
//SYSDUMP  DD SYSOUT=*
//STDIN DD *

Especifique o comando gsutil cp no seguinte formato. Se o arquivo já existir no mainframe, verifique se você adicionou a flag --replace ao comando.

gsutil cp GCS_URI DSN --recfm=RECFM --lrecl=LRECL --blksize=BLKSIZE --noseek

Substitua:

  • GCS_URI: o identificador uniforme de recursos (URI) do Cloud Storage do arquivo do Cloud Storage. Por exemplo, gs://bucket/sample.mainframe.dsn.
  • DSN: o local de destino do DSN no mainframe.
  • RECFM: o formato de registro (RECFM) do arquivo do mainframe. Os valores válidos são F, FB e U. Esses valores não diferenciam maiúsculas de minúsculas.
  • LRECL: (opcional) o comprimento do registro (LRECL) do arquivo. O valor precisa ser um número inteiro maior ou igual a 0. Se LRECL não for especificado, o arquivo será considerado no formato de registro de comprimento indefinido (U).
  • BLKSIZE: (opcional) o tamanho do bloco do arquivo. Se definido como 0, o sistema vai determinar o tamanho ideal do bloco. O valor precisa ser um número inteiro maior ou igual a zero. Se você não especificar um valor, o arquivo será tratado como desbloqueado.
  • noseek: (opcional) inclua esse parâmetro se quiser melhorar o desempenho do download. Por padrão, essa flag é definida como "false", ou seja, as operações de busca são ativadas.

Exemplo de execução

gsutil cp gs://sample-bucket/MAINFRAME.DSN.FILE MAINFRAME.DSN.FILE \
--lrecl=16 --blksize=0 --recfm=fb

Configuração de ajuste de desempenho para o comando gsutil cp

O Mainframe Connector é compatível com a seguinte configuração de ajuste de desempenho para o comando gsutil cp.

  • Use a flag --parallelism para definir o número de linhas de execução. O valor padrão é 1 (uma única linha de execução).
  • Use o argumento --maxChunkSize para definir o tamanho máximo de cada parte. Cada parte terá um arquivo ORC próprio. Aumente esse valor para reduzir o número de partes criadas, mas isso vai aumentar os requisitos de memória durante o processo de transcodificação. Para mais detalhes, consulte Analisar o argumento maxChunkSize. O valor padrão é 128 MiB.
  • Use o argumento --preload_chunk_count para definir a quantidade de dados a serem pré-carregados na memória enquanto todos os workers estão ocupados. Esse argumento pode melhorar o desempenho ao custo da memória. O valor padrão é 2.

Exemplo de execução

gsutil cp \
  --replace \
  --parser_type=copybook \
  --parallelism=8 \
  --maxChunkSize=256MiB \
  gs://$BUCKET/test.orc

Neste exemplo, consideramos um arquivo grande e usamos oito linhas em que a taxa de linha é alcançada. Se você tiver memória suficiente, recomendamos aumentar o tamanho do bloco para 256 MiB ou até mesmo 512 MiB, já que isso reduz a criação de sobrecarga e a finalização de objetos do Cloud Storage. Para arquivos pequenos, usar menos linhas de execução e partes menores pode gerar resultados melhores.

Analisar o argumento maxChunkSize

A flag maxChunkSize aceita valores na forma de uma quantidade e uma unidade de medida, por exemplo, 5 MiB. É possível usar espaços em branco entre o valor e a magnitude.

É possível fornecer o valor nos seguintes formatos:

  • Formato Java:b/k/m/g/t, para byte, kibibyte, mebibyte, gibibyte e tebibyte, respectivamente
  • Formato internacional:KiB/MiB/GiB/TiB, para kibibyte, mebibyte, gibibyte e tebibyte, respectivamente
  • Formato métrico:b/kb/mb/gb/tb, para kilobyte, megabyte, gigabyte e terabyte, respectivamente

A análise do tamanho dos dados não diferencia maiúsculas de minúsculas. Não é possível especificar valores parciais. Por exemplo, use 716 KiB em vez de 0,7 MiB.