Cette page explique comment transcoder localement les données du mainframe dans un format compatible, puis déplacer le contenu vers BigQuery. Le transcodage consiste à convertir des informations d'une forme de représentation codée à une autre. Cette page explique comment utiliser Mainframe Connector pour transcoder des données de mainframe en ORC (optimized row columnar), puis les enregistrer dans Cloud Storage.
Mainframe Connector vous permet de transcoder les données du mainframe localement sur le mainframe de deux manières.
- À l'aide des commandes
qsam
(version 5.16.0 et ultérieures) - À l'aide de la commande
gsutil cp
Avantages des commandes qsam
Les commandes qsam
offrent les avantages suivants:
- Compatible avec les types de données composés, y compris la clause OCCURS (listes), la clause REDEFINES et les enregistrements imbriqués. Pour en savoir plus sur ces types de données, consultez la documentation de référence sur le transcodage
qsam
. - Prend en charge la configuration du processus de transcodage via un fichier de configuration du transcodeur. Cette fonctionnalité offre plus de flexibilité lors du décodage des données en Google Cloudet de l'encodage des données vers le mainframe.
- Prend en charge la création d'un ensemble de données de débordement, qui est un tableau d'erreurs de transcodage pouvant être utilisé pour l'inspection des erreurs.
- Compatible avec plusieurs formats d'entrée et de sortie. Cette fonctionnalité vous permet de charger vos données vers et depuis différents entrepôts de données.
Avant de commencer
Installez Mainframe Connector sur tout ensemble de données partitionné par mainframe que vous souhaitez utiliser comme bibliothèque de procédures (PROCLIB).
Déplacer les données transcodées localement sur le mainframe vers Google Cloud
Pour transcoder des données localement sur un mainframe, puis les déplacer vers BigQuery, vous devez effectuer les tâches suivantes:
- Lire et transcoder un ensemble de données sur un mainframe, puis l'importer dans Cloud Storage au format ORC (pour les autres formats compatibles uniquement avec
qsam commands
, consultez TranscodeFormat). Le transcodage est effectué lors des opérationsqsam decode
ougsutil cp
(en fonction de la commande que vous choisissez), où un ensemble de données EBCDIC (Extended Binary Coded Decimal Interchange Code) de mainframe est converti au format ORC en UTF-8 lors de la copie dans un bucket Cloud Storage. - Chargez l'ensemble de données dans une table BigQuery.
- (Facultatif) Exécutez une requête SQL sur la table BigQuery.
- (Facultatif) Exporter les données de BigQuery vers le mainframe.
Les sections suivantes décrivent en détail comment déplacer des données transcodées localement sur le mainframe vers Google Cloud à l'aide des commandes qsam
et de la commande gsutil cp
.
Transcoder en local à l'aide de commandes qsam
Pour transcoder vos données de mainframe localement sur votre mainframe à l'aide de commandes qsam
, procédez comme suit:
Créez une tâche pour lire l'ensemble de données sur votre mainframe et le transcoder au format ORC, comme indiqué dans la commande suivante. Lisez les données de l'ensemble de données INFILE et la mise en page des enregistrements du DD COPYBOOK. L'ensemble de données d'entrée doit être un fichier QSAM (queued sequential access method) avec une longueur d'enregistrement fixe ou variable.
Vous pouvez modifier le comportement par défaut du processus de transcodage du connecteur Mainframe en fournissant un fichier de configuration du transcodeur à l'aide de l'argument
--transcode-configuration
.//STEP01 EXEC BQSH //INFILE DD DSN=<HLQ>.DATA.FILENAME,DISP=SHR //COPYBOOK DD DISP=SHR,DSN=<HLQ>.COPYBOOK.CPY //CONFIG DD DISP=SHR,DSN=<HLQ>.CONFIG.SETTINGS //STDIN DD * BUCKET=BUCKET_NAME qsam decode --copybook dd:COPYBOOK --transcode-configuration dd:CONFIG dd:INFILE gs://$BUCKET/tablename /*
Remplacez
BUCKET_NAME
par le nom du bucket Cloud Storage dans lequel vous souhaitez copier les données du mainframe.Pour éviter de spécifier des variables telles que des ID de projet et des noms de buckets dans chaque procédure JCL (Job Control Language), vous pouvez les ajouter dans la PROCLIB BQSH et les référencer dans plusieurs procédures JCL en tant que variables d'environnement. Cette approche vous permet également de passer facilement d'un environnement de production à un environnement hors production, car les variables spécifiques à l'environnement sont définies dans la PROCLIB BQSH de l'environnement.
Dans cet exemple,
DD DataPath
permet de spécifier le chemin d'accès du carnet de copie, de l'entrée et de la configuration de transcodage. Pour découvrir d'autres options, consultezDataPath
.Si vous souhaitez consigner les commandes exécutées au cours de ce processus, vous pouvez activer les statistiques de charge.
Créez et envoyez une tâche de chargement BigQuery qui charge les partitions de fichiers ORC de
tablename.orc
dansMY_DATASET.MY_TABLE
, comme suit.Example JCL //STEP02 EXEC BQSH //STDIN DD * BUCKET=BUCKET_NAME PROJECT=PROJECT_NAME bq load --project_id=$PROJECT \ myproject:MY_DATASET.MY_TABLE \ gs://$BUCKET/tablename.orc/* /*
Remplacez les éléments suivants :
BUCKET_NAME
: nom du bucket Cloud Storage contenant les fichiers ORC que vous souhaitez charger dans BigQuery.PROJECT_NAME
: nom du projet dans lequel vous souhaitez exécuter la requête.
(Facultatif) Créez et envoyez une tâche de requête BigQuery qui exécute une lecture SQL à partir du fichier DD QUERY. En règle générale, la requête est une instruction
MERGE
ouSELECT INTO DML
qui entraîne la transformation d'une table BigQuery. Notez que le connecteur Mainframe enregistre les métriques de tâche, mais n'écrit pas les résultats de la requête dans un fichier.Vous pouvez interroger BigQuery de différentes manières : en ligne, avec un ensemble de données distinct à l'aide de DD ou avec un ensemble de données distinct à l'aide de DSN.
Example JCL //STEP03 EXEC BQSH //QUERY DD DSN=<HLQ>.QUERY.FILENAME,DISP=SHR //STDIN DD * PROJECT=PROJECT_NAME LOCATION=LOCATION bq query --project_id=$PROJECT \ --location=$LOCATION/* /*
Remplacez les éléments suivants :
PROJECT_NAME
: nom du projet dans lequel vous souhaitez exécuter la requête.LOCATION
: emplacement où la requête sera exécutée. Nous vous recommandons d'exécuter la requête dans un emplacement proche des données.
(Facultatif) Créez et envoyez une tâche d'exportation qui exécute une lecture SQL à partir du fichier DD QUERY et exporte le jeu de données obtenu vers un mainframe en tant que fichier binaire.
Vous pouvez modifier le comportement par défaut du processus de transcodage du connecteur Mainframe en fournissant un fichier de configuration du transcodeur à l'aide de l'argument
--transcode-configuration
.//STEP04 EXEC BQSH //OUTFILE DD DSN=<HLQ>.DATA.FILENAME,DISP=SHR //COPYBOOK DD DISP=SHR,DSN=<HLQ>.COPYBOOK.CPY //CONFIG DD DISP=SHR,DSN=<HLQ>.CONFIG.SETTINGS //QUERY DD DSN=<HLQ>.QUERY.FILENAME,DISP=SHR //STDIN DD * PROJECT=PROJECT_NAME qsam encode \ dd:QUERY dd:OUTFILE --copybook dd:COPYBOOK --transcode-configuration dd:CONFIG --input-format=BIGQUERY \ --input-parameter project_id=PROJECT_NAME \ --input-parameter location=LOCATION/* /*
Remplacez les éléments suivants :
PROJECT_NAME
: nom du projet dans lequel vous souhaitez exécuter la requête.LOCATION
: emplacement où la requête sera exécutée. Nous vous recommandons d'exécuter la requête dans un emplacement proche des données.
Les données sont exportées vers l'ensemble de données OUTFILE DD. La mise en page des enregistrements est décrite par le COPYBOOK DD. Pour connaître les autres options de chemins de configuration du carnet de copie, du fichier de sortie et de transcodage, consultez
DataPath
.
Transcodage en local à l'aide de la commande gsutil cp
Pour transcoder vos données de mainframe localement sur votre mainframe à l'aide de la commande gsutil cp
, procédez comme suit:
Créez une tâche pour lire l'ensemble de données sur votre mainframe et le transcoder au format ORC, comme indiqué dans la commande suivante. Lisez les données de l'ensemble de données INFILE et la mise en page des enregistrements du DD COPYBOOK. L'ensemble de données d'entrée doit être un fichier QSAM (queued sequential access method) avec une longueur d'enregistrement fixe ou variable.
//STEP01 EXEC BQSH //INFILE DD DSN=<HLQ>.DATA.FILENAME,DISP=SHR //COPYBOOK DD DISP=SHR,DSN=<HLQ>.COPYBOOK.FILENAME //STDIN DD * BUCKET=BUCKET_NAME gsutil cp --replace gs://$BUCKET/tablename.orc /*
Remplacez
BUCKET_NAME
par le nom du bucket Cloud Storage dans lequel vous souhaitez copier les données du mainframe.Pour éviter de spécifier des variables telles que des ID de projet et des noms de buckets dans chaque procédure JCL, vous pouvez les ajouter dans la PROCLIB BQSH et les référencer dans plusieurs procédures JCL en tant que variables d'environnement. Cette approche permet également de passer facilement d'un environnement de production à un environnement hors production, car les variables spécifiques à l'environnement sont définies dans la PROCLIB BQSH de l'environnement. Pour obtenir la liste complète des variables d'environnement compatibles avec le connecteur Mainframe, consultez la section Variables d'environnement.
Dans cet exemple, l'entrée standard (STDIN) est fournie en tant que données dans le flux à la DD STDIN. Vous pouvez également fournir cette entrée à l'aide d'un nom de source de données (DSN), ce qui facilite la gestion de la substitution de symboles.
Si vous souhaitez consigner les commandes exécutées au cours de ce processus, vous pouvez activer les statistiques de charge.
Créez et envoyez une tâche de chargement BigQuery qui charge les partitions de fichiers ORC de
tablename.orc
dansMY_DATASET.MY_TABLE
, comme suit.Example JCL //STEP02 EXEC BQSH //STDIN DD * BUCKET=BUCKET_NAME PROJECT=PROJECT_NAME bq load --project_id=$PROJECT \ myproject:MY_DATASET.MY_TABLE \ gs://$BUCKET/tablename.orc/* /*
Remplacez les éléments suivants :
BUCKET_NAME
: nom du bucket Cloud Storage contenant les fichiers ORC que vous souhaitez charger dans BigQuery.PROJECT_NAME
: nom du projet dans lequel vous souhaitez exécuter la requête.
(Facultatif) Créez et envoyez une tâche de requête BigQuery qui exécute une lecture SQL à partir du fichier DD QUERY. En règle générale, la requête est une instruction
MERGE
ouSELECT INTO DML
qui entraîne la transformation d'une table BigQuery. Notez que le connecteur Mainframe enregistre les métriques de tâche, mais n'écrit pas les résultats de la requête dans un fichier.Vous pouvez interroger BigQuery de différentes manières : en ligne, avec un ensemble de données distinct à l'aide de DD ou avec un ensemble de données distinct à l'aide de DSN.
Example JCL //STEP03 EXEC BQSH //QUERY DD DSN=<HLQ>.QUERY.FILENAME,DISP=SHR //STDIN DD * PROJECT=PROJECT_NAME LOCATION=LOCATION bq query --project_id=$PROJECT \ --location=$LOCATION/* /*
Remplacez les éléments suivants :
PROJECT_NAME
: nom du projet dans lequel vous souhaitez exécuter la requête.LOCATION
: emplacement où la requête sera exécutée. Nous vous recommandons d'exécuter la requête dans un emplacement proche des données.
(Facultatif) Créez et envoyez une tâche d'exportation qui exécute une lecture SQL à partir du fichier DD QUERY et exporte le jeu de données obtenu vers un mainframe en tant que fichier binaire.
Example JCL //STEP04 EXEC BQSH //OUTFILE DD DSN=<HLQ>.DATA.FILENAME,DISP=SHR //COPYBOOK DD DISP=SHR,DSN=<HLQ>.COPYBOOK.FILENAME //QUERY DD DSN=<HLQ>.QUERY.FILENAME,DISP=SHR //STDIN DD * PROJECT=PROJECT_NAME DATASET_ID=DATASET_ID DESTINATION_TABLE=DESTINATION_TABLE bq export --project_id=$PROJECT \ --dataset_id=$DATASET_ID \ --destination_table=$DESTINATION_TABLE \ --location="US" \ --remoteHost <mainframe-connector-url>.a.run.app \ --remotePort 443 /*
Remplacez les éléments suivants :
PROJECT_NAME
: nom du projet dans lequel vous souhaitez exécuter la requête.DATASET_ID
: ID de l'ensemble de données BigQuery contenant la table que vous souhaitez exporter.DESTINATION_TABLE
: table BigQuery que vous souhaitez exporter.
Les données sont exportées vers l'ensemble de données OUTFILE DD. La mise en page des enregistrements est décrite par le COPYBOOK DD.