Commandes de l'API Mainframe Connector

Le tableau suivant liste les commandes BigQuery, Cloud Storage et autres commandesGoogle Cloud que vous pouvez utiliser avec Mainframe Connector.

Produit Commande Description Compatible avec le transcodage à distance
Commandes BigQuery Exécutez cette commande pour créer un fichier binaire. La commande accepte un COPYBOOK DD comme entrée.

Remarque : Nous vous recommandons d'utiliser les commandes qsam decode et qsam encode pour effectuer cette tâche. Pour en savoir plus sur les avantages de l'utilisation des commandes qsam, consultez Avantages des commandes qsam.

La commande bq export est compatible avec certaines fonctionnalités d'optimisation des performances. Pour en savoir plus, consultez Améliorations des performances pour la commande bq export. Vous pouvez utiliser des ensembles de caractères personnalisés avec la commande bq export. Pour en savoir plus, consultez Utiliser des ensembles de caractères personnalisés.

Remarque : La commande bq export échoue pour les demandes d'exportation de grandes tables Bigtable. Pour éviter les erreurs, ajoutez l'option -allowLargeResults à la commande bq export lorsque vous souhaitez exporter des tables volumineuses.
Oui
Utilisez cette commande pour charger des données dans une table. Non
Utilisez cette commande pour créer des ressources BigQuery, telles que des tables intégrées ou des tables externes, pour lesquelles le partitionnement et le clustering doivent être configurés.

Vous pouvez également utiliser la commande bq mk pour générer une table BigQuery directement à partir de l'analyse des copybooks COBOL. Pour en savoir plus, consultez Créer une table BigQuery à partir d'un copybook.
Non
Utilisez cette commande pour créer une tâche de requête qui exécute la requête SQL spécifiée. La commande lit la requête SQL à partir de l'indicateur --sql ou de QUERY DD. Si les deux sont fournis, la requête dans l'indicateur --sql est prioritaire.

Utilisez l'option --follow=true pour générer un rapport affichant les résultats d'une requête SELECT. Pour écrire ce rapport dans un fichier du mainframe, définissez une instruction DD AUDITL qui pointe vers le fichier devant contenir le rapport des journaux d'audit. N'utilisez pas l'indicateur --follow si vous souhaitez un comportement de journalisation normal.

Certains résultats de requête peuvent renvoyer un grand nombre de lignes, parfois des millions. Pour que le résultat reste lisible, le nombre de lignes affichées est limité. Pour contrôler le nombre de lignes affichées, utilisez l'indicateur --report_row_limit. Par exemple, utilisez --report_row_limit 10 pour limiter les résultats à 10 lignes. Par défaut, le nombre de lignes affichées est limité à 30.

Pour utiliser la paramétrisation bq query, consultez Paramétrisation des requêtes bq.
Oui
Utilisez cette commande pour supprimer définitivement une ressource BigQuery. Étant donné que cette commande supprime définitivement une ressource, nous vous recommandons de l'utiliser avec précaution. Non
Commandes Cloud Run Utilisez cette commande pour déclencher un job Cloud Run depuis votre mainframe. Non
Utilisez cette commande pour afficher les journaux d'une exécution de job Cloud Run spécifique. Non
Utilisez cette commande pour annuler un job Cloud Run. Non
Commandes Cloud Storage Utilisez cette commande pour copier des données textuelles ou binaires dans Cloud Storage. Vous pouvez utiliser le mode de copie binaire simple pour copier un ensemble de données depuis IBM z/OS vers Cloud Storage sans le modifier dans le cadre d'un pipeline de données. Vous pouvez également convertir l'encodage des caractères du code d'échange décimal codé en binaire étendu (EBCDIC) en ASCII UTF-8 et ajouter des sauts de ligne.

Remarque : Nous vous recommandons d'utiliser les commandes copy text pour effectuer cette tâche, car elles offrent de meilleures fonctionnalités.

Vous pouvez également utiliser cette commande pour copier le code source de l'application défini dans le langage de contrôle des tâches (JCL).
Non
Utilitaire gsutil Utilisez cette commande pour transcoder un ensemble de données et l'écrire dans Cloud Storage au format de fichier Optimized Row Columnar (ORC). La commande lit les données à partir de INFILE DD et la mise en page de l'enregistrement à partir du fichier COPYBOOK.

Remarque : Nous vous recommandons d'utiliser les commandes qsam decode et qsam encode pour effectuer cette tâche. Pour en savoir plus sur les avantages de l'utilisation des commandes qsam, consultez Avantages des commandes qsam.

Si vous souhaitez que la commande lise les données d'un fichier de nom de source de données (DSN), utilisez les indicateurs suivants :
  • --inDsn : DSN de l'ensemble de données d'entrée. Si elle est fournie, cette option remplace INFILE DD.
  • --cobDsn : DSN du copybook. Si elle est fournie, cette option remplace le DD COPYBOOK.
La commande ouvre ensuite un nombre configurable de connexions parallèles à l'API Cloud Storage et transcode l'ensemble de données COBOL au format de fichier ORC en colonnes et compressé au format GZIP. Vous pouvez vous attendre à un taux de compression d'environ 35 %.

Vous pouvez également utiliser cette commande pour interagir avec le service gRPC Mainframe Connector exécuté sur une VM du mainframe. Pour ce faire, définissez les variables d'environnement SRVHOST et SRVPORT, ou fournissez le nom d'hôte et le numéro de port à l'aide des options de ligne de commande. Lorsque le service gRPC est utilisé, l'ensemble de données d'entrée est d'abord copié dans Cloud Storage par le connecteur Mainframe, puis un appel de procédure à distance (RPC) est effectué pour demander au service gRPC de transcoder le fichier.

Vous pouvez également effectuer les tâches suivantes avec la commande gsutil cp :
Oui
Utilisez cette commande pour supprimer des buckets ou des objets dans un bucket. Non
Utilitaire gszutil L'utilitaire gszutil s'exécute à l'aide du SDK Java IBM JZOS et fournit un émulateur de shell qui accepte les invocations de ligne de commande gsutil et BigQuery à l'aide de JCL.

Remarque : Nous vous recommandons d'utiliser les commandes qsam decode et qsam encode pour effectuer cette tâche. Pour en savoir plus sur les avantages de l'utilisation des commandes qsam, consultez Avantages des commandes qsam.

L'utilitaire gszutil étend les fonctionnalités de l'utilitaire gsutil en acceptant un schéma sous la forme d'un COPYBOOK DD, en l'utilisant pour transcoder les ensembles de données COBOL directement au format ORC avant de les importer dans Cloud Storage. L'utilitaire gszutil vous permet également d'exécuter BigQuery query et load à l'aide de JCL.

L'utilitaire gszutil fonctionne avec le serveur gRPC, qui vous aide à réduire la consommation de millions d'instructions par seconde (MIPS). Nous vous recommandons d'utiliser l'utilitaire gszutil dans votre environnement de production pour convertir les fichiers binaires dans Cloud Storage au format ORC.
Non
Commandes qsam et vsam Utilisez cette commande pour transcoder les enregistrements de fichiers QSAM au format de votre choix à l'aide de l'argument --output-format. Le fichier QSAM d'origine est divisé en blocs en fonction de la valeur que vous spécifiez avec l'argument --max-chunk-size. La sortie transcodée est enregistrée dans le chemin cible sous forme de fichiers triés par ordre lexicographique. Non
Utilisez cette commande pour convertir des données provenant d'une source externe en fichier QSAM. L'entrée est définie par la valeur que vous spécifiez à l'aide de l'argument --input-format. Non
Utilisez cette commande pour transcoder les enregistrements de fichiers VSAM (Virtual Storage Access Method) au format souhaité à l'aide de l'argument --output-format. Le fichier VSAM d'origine est divisé en blocs en fonction de la valeur que vous spécifiez avec l'argument --max-chunk-size. La sortie transcodée est enregistrée dans le chemin cible sous forme de fichiers triés par ordre lexicographique. Non
Commandes Pub/Sub Utilisez cette commande pour publier un message dans un sujet Pub/Sub. Non
Autres commandes Utilisez cette commande pour copier un ensemble de données binaires d'un chemin source vers un chemin de destination. Non
Utilisez cette commande pour copier un fichier vers l'emplacement de stockage de votre choix, tel que Cloud Storage, et inversement. Non
Utilisez cette commande pour envoyer une requête HTTP à un service Web ou à des API REST. Non
Utilisez cette commande pour déclencher l'exécution d'un modèle Flex Dataflow. La commande exécute un job à partir du chemin d'accès au modèle Flex spécifié. Pour en savoir plus, consultez gcloud dataflow flex-template run. Non
Utilisez cette commande pour imprimer les données système nécessaires sur la sortie standard (stdout). Cela permet à l'équipe d'assistance Mainframe Connector de recueillir les informations nécessaires pour diagnostiquer un problème sans avoir besoin d'interagir longuement avec le client.
En fonction de l'indicateur que vous utilisez, la commande systemreport affiche les données système suivantes :
  • --supported_ciphers : chiffrements acceptés
  • --available_security_providers : Fournisseurs de sécurité disponibles
Non

Utiliser des ensembles de caractères personnalisés

Le connecteur Mainframe est compatible avec différents ensembles de caractères qui décodent les octets en chaînes BigQuery et inversement. Mainframe Connector vous permet de configurer votre propre jeu de caractères personnalisé. Vous pouvez configurer un jeu de caractères personnalisé en créant un fichier UCM (Unicode Character Mapping). Mainframe Connector est compatible avec le sous-ensemble suivant du format 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

Si vous souhaitez utiliser un jeu de caractères personnalisé, définissez un fichier de configuration au format UCM. Vous pouvez utiliser cet ensemble de caractères personnalisé avec les commandes gsutil cp ou bq export en définissant l'indicateur --encoding=charset.

Lorsque vous créez un jeu de caractères personnalisé, vérifiez les points suivants :

  • Lorsque vous définissez un fichier UCM, gardez à l'esprit les points suivants :
    • Mainframe Connector n'accepte que les jeux de caractères personnalisés utilisant un jeu de caractères à un octet (SBCS).
    • Le connecteur Mainframe n'accepte que l'indicateur de précision UCM |0.
    • Vérifiez que les fichiers UCM se trouvent dans les services système Unix z/OS (USS) et non dans un ensemble de données partitionné à stockage virtuel multiple (MVS PDS).
    • Vérifiez que les fichiers UCM sont enregistrés au format ASCII (American Standard Code for Information Interchange) et non au format EBCDIC (Extended Binary Coded Decimal Interchange Code).
  • Fournissez un mappage explicite pour chaque valeur d'octet unique possible vers un caractère Unicode. Si vous ne savez pas quel caractère Unicode associer à un octet, nous vous recommandons de l'associer à U+FFFD. Vous pouvez mapper différentes séquences d'octets au même caractère Unicode. Toutefois, dans ces cas, le mappage n'est pas bidirectionnel. Autrement dit, lorsque vous chargez des données dans BigQuery et que vous les exportez ensuite dans un fichier binaire, la sortie peut différer de l'entrée d'origine.
  • Vérifiez que les séquences d'octets de la deuxième colonne sont uniques. Si plusieurs séquences d'octets correspondent au même caractère Unicode, ce caractère Unicode est décodé en une séquence d'octets de la dernière mise en correspondance définie dans le fichier UCM.
  • Vérifiez que Mainframe Connector peut trouver le fichier UCM en définissant la variable d'environnement BQSH_FEATURE_CUSTOM_CHARSET sur le chemin d'accès du fichier UCM. Si vous souhaitez utiliser plusieurs ensembles de caractères, vous pouvez fournir les chemins d'accès à plusieurs ensembles de caractères séparés par un point-virgule. Par exemple, BQSH_FEATURE_CUSTOM_CHARSET=path1;path2. path peut pointer vers un fichier local ou vers un fichier stocké dans Cloud Storage. Si vous exécutez les commandes gsutil cp ou bq export avec l'indicateur --remote pour effectuer un transcodage à distance, Mainframe Connector utilise la valeur locale définie pour la variable d'environnement BQSH_FEATURE_CUSTOM_CHARSET. Il en va de même lorsque vous exécutez le connecteur Mainframe en mode autonome. Si l'indicateur --encoding fait référence à un jeu de caractères personnalisé qui ne correspond pas à la valeur que vous avez définie pour BQSH_FEATURE_CUSTOM_CHARSET (ou si vous n'avez pas défini BQSH_FEATURE_CUSTOM_CHARSET du tout), la commande se ferme avec un message d'erreur.

Configuration de l'optimisation des performances pour la commande bq export

Le connecteur Mainframe est compatible avec la configuration d'optimisation des performances suivante pour la commande bq export :

  • exporter_thread_count : (facultatif) définissez le nombre de threads de worker. La valeur par défaut est 4.
  • max_read_streams : (facultatif) définissez le nombre maximal de flux de lecture. La valeur par défaut est identique à celle définie pour exporter_thread_count.
  • order_response : (facultatif) si vous définissez cette option sur "true", l'exportateur conserve l'ordre des résultats de la requête. Cette option affecte les performances d'exportation. La valeur par défaut est "false".
  • max_read_queue : (facultatif) Définissez le nombre maximal de files d'attente d'enregistrements en lecture. La valeur par défaut est le double du nombre de threads.
  • transcoding_buffer : (facultatif) définissez la taille de la mémoire tampon de transcodage par thread en Mo. La valeur par défaut est de 20 Mo.

Notez que vous pouvez également essayer d'augmenter la taille de la fenêtre de transport en définissant la variable d'environnement OVERRIDE_GRPC_WINDOW_MB pour améliorer les performances. La taille de fenêtre par défaut est de 4 Mo.

Créer une table BigQuery à partir d'un copybook

Vous pouvez utiliser la commande bq mk pour générer une table BigQuery directement à partir de l'analyse des copybooks COBOL. L'analyseur de copybook natif extrait les valeurs par défaut de la clause VALUE d'un copybook et les attribue aux colonnes correspondantes d'une table BigQuery nouvellement créée.

Pour vous aider à tester cette fonctionnalité, la commande bq mk fournit également un mode d'exécution à sec. Ce mode vous permet de prévisualiser la commande CREATE TABLE SQL générée sans créer réellement la table dans BigQuery.

La commande bq mk fournit les options de configuration suivantes pour prendre en charge cette fonctionnalité :

  • --schema_from_copybook : spécifie le copybook à utiliser pour créer la table.
  • --dry_run (facultatif) : lorsque cette option est activée, la commande n'imprime que la commande CREATE TABLE SQL générée sans l'exécuter. Par défaut, ce flag est défini sur "false".
  • --tablespec "[PROJECT_ID]:[DATASET].[TABLE]" : spécifie l'ID du projet BigQuery, l'ensemble de données et le nom de la table cible.
  • --encoding : spécifie l'encodage utilisé pour lire le fichier copybook. La valeur par défaut est CP037.

Les clauses VALUE suivantes sont acceptées :

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  "     "

Les clauses HIGH-VALUE et LOW-VALUE ne sont acceptées que pour les variables alphanumériques.

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>

Paramétrage de bq query

Mainframe Connector vous permet d'utiliser des requêtes paramétrées avec bq query.

Voici un exemple d'utilisation d'une requête bq query paramétrée :

Fichier de requête

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

Voici un exemple avec plusieurs paramètres.

Fichier de requête

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

Exemple d'exécution

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

Effectuer une simulation de la commande gsutil cp

La commande gsutil cp décode un fichier QSAM à l'aide d'un copybook COBOL et génère un fichier ORC sur Cloud Storage. Vous pouvez effectuer une simulation de la commande gsutil cp à l'aide de l'indicateur dry_run et tester les étapes suivantes :

  • Analysez un copybook ou un fichier de données COBOL, et vérifiez s'il est compatible avec Mainframe Connector.
  • Décode un fichier QSAM sans l'écrire dans Cloud Storage.

Exécutez la commande suivante pour effectuer une simulation :

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

Si toutes les étapes sont exécutées correctement, la commande se ferme avec le code de retour 0. En cas de problème, un message d'erreur s'affiche.

Lorsque vous utilisez l'indicateur dry_run, toutes les statistiques telles que le nombre total d'octets lus, le nombre d'enregistrements écrits et le nombre total d'erreurs sont consignées.

Si vous utilisez l'indicateur dry_run et que la source de données n'existe pas, la commande ne renvoie pas d'erreur. Au lieu de cela, il ne vérifie que l'analyseur de copybook, puis termine l'exécution.

Copier un fichier de Cloud Storage vers votre mainframe

Vous pouvez utiliser la commande gsutil cp pour copier un fichier de Cloud Storage vers un ensemble de données Mainframe. Notez que vous ne pouvez pas copier les ensembles de données partitionnés (PDS).

Pour copier un fichier de Cloud Storage vers un ensemble de données de mainframe, spécifiez le nom de l'ensemble de données et les exigences d'espace du fichier que vous souhaitez télécharger sur le mainframe dans JCL, comme indiqué dans l'exemple suivant :

//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 *

Spécifiez la commande gsutil cp au format suivant. Si le fichier existe déjà sur votre ordinateur central, vérifiez que vous ajoutez l'option --replace à la commande.

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

Remplacez les éléments suivants :

  • GCS_URI : identifiant URI (Uniform Resource Identifier) Cloud Storage du fichier Cloud Storage. Exemple : gs://bucket/sample.mainframe.dsn.
  • DSN : emplacement de destination du DSN sur le mainframe.
  • RECFM : format d'enregistrement (RECFM) du fichier Mainframe. Les valeurs valides sont F, FB et U. Notez que ces valeurs ne sont pas sensibles à la casse.
  • LRECL : (facultatif) Longueur d'enregistrement (LRECL) du fichier. La valeur doit être un nombre entier supérieur ou égal à 0. Si LRECL n'est pas spécifié, le fichier est considéré comme étant au format d'enregistrement à longueur indéfinie (U).
  • BLKSIZE : (facultatif) taille de bloc du fichier. Si la valeur est définie sur 0, le système détermine la taille de bloc optimale. La valeur doit être un entier supérieur ou égal à 0. Si vous ne spécifiez pas de valeur, le fichier est traité comme un fichier non bloqué.
  • noseek : (facultatif) incluez ce paramètre si vous souhaitez améliorer les performances de téléchargement. Cette option est définie sur "false" par défaut, ce qui signifie que les opérations de recherche sont activées.

Exemple d'exécution

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

Configuration de l'optimisation des performances pour la commande gsutil cp

Mainframe Connector est compatible avec la configuration d'optimisation des performances suivante pour la commande gsutil cp.

  • Utilisez l'option --parallelism pour définir le nombre de threads. La valeur par défaut est 1 (monothread).
  • Utilisez l'argument --maxChunkSize pour définir la taille maximale de chaque bloc. Chaque bloc aura son propre fichier ORC. Augmentez cette valeur pour réduire le nombre de blocs créés, au détriment de besoins en mémoire plus importants lors du processus de transcodage. Pour en savoir plus, consultez Analyser l'argument maxChunkSize. La valeur par défaut est de 128 Mio.
  • Utilisez l'argument --preload_chunk_count pour définir la quantité de données à précharger en mémoire lorsque tous les nœuds de calcul sont occupés. Cet argument peut améliorer les performances au prix de la mémoire. La valeur par défaut est "2".

Exemple d'exécution

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

Dans cet exemple, nous avons considéré un fichier volumineux et avons donc utilisé huit threads pour atteindre le débit de ligne. Si vous disposez de suffisamment de mémoire, nous vous recommandons d'augmenter la taille des blocs à 256 Mio, voire 512 Mio, car cela réduit la surcharge de création et de finalisation des objets Cloud Storage. Pour les petits fichiers, l'utilisation de moins de threads et de blocs plus petits peut donner de meilleurs résultats.

Analyser l'argument maxChunkSize

L'option maxChunkSize accepte les valeurs sous la forme d'un montant et d'une unité de mesure (par exemple, 5 Mio). Vous pouvez utiliser des espaces entre le montant et la magnitude.

Vous pouvez fournir la valeur dans les formats suivants :

  • Format Java : b/k/m/g/t, pour octet, kibioctet, mébioctet, gibioctet et tébioctet, respectivement
  • Format international : KiB/MiB/GiB/TiB, pour kibioctet, mébioctet, gibioctet et tébioctet, respectivement
  • Format métrique : b/kb/mb/gb/tb, pour kilo-octet, mégaoctet, gigaoctet et téraoctet respectivement

L'analyse de la taille des données n'est pas sensible à la casse. Notez que vous ne pouvez pas spécifier de montants partiels. Par exemple, utilisez 716 Kio au lieu de 0,7 Mio.