Auf dieser Seite wird beschrieben, wie Sie Mainframe-Daten lokal auf dem Mainframe in ein unterstütztes Format transkodieren und die Inhalte dann in BigQuery verschieben. Bei der Transcodierung werden Informationen von einer Form der codierten Darstellung in eine andere konvertiert. Auf dieser Seite wird beschrieben, wie Sie mit dem Mainframe-Connector Mainframe-Daten in das Optimized Row Columnar-Format (ORC) transkodieren und dann in Cloud Storage speichern können.
Mainframe Connector bietet drei Möglichkeiten, Mainframe-Daten lokal auf dem Mainframe zu transkodieren.
qsam
-Befehle verwenden (Version 5.16.0 und höher)- Verwendung des
vsam decode
-Befehls (Version 5.18.0 und höher) gsutil cp
-Befehl verwenden
Vorteile der Befehle qsam
und vsam
Die Befehle qsam
und vsam
bieten folgende Vorteile:
- Unterstützung für zusammengesetzte Datentypen, einschließlich der OCCURS-Klausel (Listen), der REDEFINES-Klausel und verschachtelter Datensätze. Weitere Informationen zu diesen Datentypen finden Sie in der
qsam
- undvsam
-Transcodierungsreferenz. - Unterstützung für die Konfiguration des Transcodierungsprozesses über eine Transcoder-Konfigurationsdatei. Diese Funktion bietet mehr Flexibilität beim Decodieren von Daten in Google Cloudund beim erneuten Codieren der Daten für den Mainframe.
- Unterstützung für die Erstellung eines Spillover-Datasets, einer Tabelle mit Transcodierungsfehlern, die zur Fehlerbehebung verwendet werden kann.
- Unterstützung von mehreren Ein- und Ausgabeformaten. Mit dieser Funktion können Sie Daten in verschiedene Data Warehouses laden und daraus abrufen.
Hinweise
Installieren Sie den Mainframe-Connector für alle Mainframe-partitionierten Datasets, die Sie als Prozedurbibliothek (PROCLIB) verwenden möchten.
Verschieben Sie lokal auf dem Mainframe transkodierte Daten zu Google Cloud.
Wenn Sie Daten lokal auf einem Mainframe transkodieren und dann in BigQuery verschieben möchten, müssen Sie die folgenden Aufgaben ausführen:
- Ein Dataset auf einem Mainframe lesen und transkodieren und es im ORC-Format in Cloud Storage hochladen (Informationen zu anderen Formaten, die nur von den Befehlen
qsam
odervsam
unterstützt werden, finden Sie unter TranscodeFormat). Die Transcodierung erfolgt während der Vorgängeqsam decode
,vsam decode
odergsutil cp
(je nach ausgewähltem Befehl). Dabei wird ein Mainframe-Dataset im Extended Binary Coded Decimal Interchange Code (EBCDIC) in das ORC-Format in UTF-8 konvertiert, wenn es in einen Cloud Storage-Bucket kopiert wird. - Laden Sie das Dataset in eine BigQuery-Tabelle.
- Optional: Führen Sie eine SQL-Abfrage für die BigQuery-Tabelle aus.
- (Optional) Daten aus BigQuery zurück auf den Mainframe exportieren.
In den folgenden Abschnitten wird detailliert beschrieben, wie Sie Daten, die lokal auf dem Mainframe transcodiert wurden, mit den Befehlen qsam
oder vsam
und dem Befehl gsutil cp
zu Google Cloud verschieben.
Lokal mit den Befehlen qsam
und vsam
transkodieren
So transcodieren Sie Ihre Mainframedaten lokal auf Ihrem Mainframe mit den Befehlen qsam
oder vsam
:
Erstellen Sie einen Job, um das Dataset auf Ihrem Mainframe zu lesen und in das ORC-Format zu transkodieren, wie im folgenden Befehl dargestellt. Lesen Sie die Daten aus dem INFILE-Dataset und das Datensatzlayout aus dem COPYBOOK-DD.
Sie können das Standardverhalten des Transcodierungsprozesses des Mainframe Connector ändern, indem Sie mit dem Argument
--transcode-configuration
eine Transcoder-Konfigurationsdatei angeben.Wenn Ihr Eingabedataset eine QSAM-Datei (Queued Sequential Access Method) mit fester oder variabler Datensatzlänge ist, verwenden Sie den folgenden Befehl:
//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 /*
Wenn Ihr Eingabedataset eine VSAM-Datei (Virtual Storage Access Method) mit fester oder variabler Datensatzlänge ist, verwenden Sie den folgenden Befehl:
//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 vsam decode --copybook dd:COPYBOOK --transcode-configuration dd:CONFIG dd:INFILE gs://$BUCKET/tablename /*
Ersetzen Sie
BUCKET_NAME
durch den Namen des Cloud Storage-Bucket, in den Sie Mainframe-Daten kopieren möchten.Wenn Sie Variablen wie Projekt-IDs und Bucket-Namen nicht in jeder JCL-Prozedur (Job Control Language) angeben möchten, können Sie sie in der BQSH PROCLIB hinzufügen und in mehreren JCL-Prozeduren als Umgebungsvariablen referenzieren. Dieser Ansatz ermöglicht auch einen nahtlosen Übergang zwischen Produktions- und Nichtproduktionsumgebungen, da umgebungsspezifische Variablen in der BQSH PROCLIB der Umgebung festgelegt werden.
In diesem Beispiel wird
DD DataPath
verwendet, um den Pfad des Copybooks, der Eingabe und der Transcodierungskonfiguration anzugeben. Weitere Optionen finden Sie unterDataPath
.Wenn Sie die während dieses Vorgangs ausgeführten Befehle protokollieren möchten, können Sie Ladestatistiken aktivieren.
Erstellen und senden Sie einen BigQuery-Ladejob, mit dem ORC-Dateipartitionen aus
tablename.orc
inMY_DATASET.MY_TABLE
geladen werden.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/* /*
Ersetzen Sie Folgendes:
BUCKET_NAME
: Der Name des Cloud Storage-Buckets, der die ORC-Dateien enthält, die Sie in BigQuery laden möchten.PROJECT_NAME
: der Name des Projekts, in dem Sie die Abfrage ausführen möchten.
Optional: Erstellen und senden Sie einen BigQuery-Abfragejob, der einen SQL-Lesevorgang aus der QUERY DD file ausführt. In der Regel ist die Abfrage eine
MERGE
- oderSELECT INTO DML
-Anweisung, die zur Transformation einer BigQuery-Tabelle führt. Mainframe Connector protokolliert in Jobmesswerten, schreibt aber keine Abfrageergebnisse in eine Datei.Sie können BigQuery auf verschiedene Arten abfragen: inline, mit einem separaten Dataset mit DD oder mit einem separaten Dataset mit 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/* /*
Ersetzen Sie Folgendes:
PROJECT_NAME
: der Name des Projekts, in dem Sie die Abfrage ausführen möchten.LOCATION
: Der Ort, an dem die Abfrage ausgeführt wird. Wir empfehlen, die Abfrage an einem Ort auszuführen, der sich in der Nähe der Daten befindet.
Optional: Erstellen und senden Sie einen Exportjob, der einen SQL-Lesevorgang aus der QUERY DD-Datei ausführt und das resultierende Dataset als Binärdatei auf einen Mainframe exportiert.
Sie können das Standardverhalten des Transcodierungsprozesses des Mainframe Connector ändern, indem Sie mit dem Argument
--transcode-configuration
eine Transcoder-Konfigurationsdatei angeben.//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/* /*
Ersetzen Sie Folgendes:
PROJECT_NAME
: der Name des Projekts, in dem Sie die Abfrage ausführen möchten.LOCATION
: Der Ort, an dem die Abfrage ausgeführt wird. Wir empfehlen, die Abfrage an einem Ort auszuführen, der sich in der Nähe der Daten befindet.
Die Daten werden in das Dataset OUTFILE DD exportiert. Das Datensatzlayout wird durch die COPYBOOK DD beschrieben. Weitere Optionen für Copybook-, Outfile- und Transcodierungskonfigurationspfade finden Sie unter
DataPath
.
Lokal mit dem Befehl gsutil cp
transkodieren
So transkodieren Sie Ihre Mainframedaten lokal auf Ihrem Mainframe mit dem Befehl gsutil cp
:
Erstellen Sie einen Job, um das Dataset auf Ihrem Mainframe zu lesen und in das ORC-Format zu transkodieren, wie im folgenden Befehl dargestellt. Lesen Sie die Daten aus dem INFILE-Dataset und das Datensatzlayout aus dem COPYBOOK-DD.
Das Eingabe-Dataset muss eine QSAM-Datei (Queued Sequential Access Method) mit fester oder variabler Datensatzlänge sein.
//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 /*
Ersetzen Sie
BUCKET_NAME
durch den Namen des Cloud Storage-Bucket, in den Sie Mainframe-Daten kopieren möchten.Damit Sie Variablen wie Projekt-IDs und Bucket-Namen nicht in jedem JCL-Prozedur angeben müssen, können Sie sie in der BQSH PROCLIB hinzufügen und in mehreren JCL-Prozeduren als Umgebungsvariablen referenzieren. Dieser Ansatz ermöglicht auch einen nahtlosen Übergang zwischen Produktions- und Nicht-Produktionsumgebungen, da umgebungsspezifische Variablen in der BQSH PROCLIB der Umgebung festgelegt werden. Eine vollständige Liste der vom Mainframe Connector unterstützten Umgebungsvariablen finden Sie unter Umgebungsvariablen.
In diesem Beispiel wird die Standardeingabe (STDIN) als In-Stream-Daten für die STDIN DD bereitgestellt. Alternativ können Sie diese Eingabe auch über einen Datenquellennamen (Data Source Name, DSN) bereitstellen. Dadurch wird die Verwaltung der Symbolsubstitution vereinfacht.
Wenn Sie die während dieses Vorgangs ausgeführten Befehle protokollieren möchten, können Sie Ladestatistiken aktivieren.
Erstellen und senden Sie einen BigQuery-Ladejob, mit dem ORC-Dateipartitionen aus
tablename.orc
inMY_DATASET.MY_TABLE
geladen werden.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/* /*
Ersetzen Sie Folgendes:
BUCKET_NAME
: Der Name des Cloud Storage-Buckets, der die ORC-Dateien enthält, die Sie in BigQuery laden möchten.PROJECT_NAME
: der Name des Projekts, in dem Sie die Abfrage ausführen möchten.
Optional: Erstellen und senden Sie einen BigQuery-Abfragejob, der einen SQL-Lesevorgang aus der QUERY DD file ausführt. In der Regel ist die Abfrage eine
MERGE
- oderSELECT INTO DML
-Anweisung, die zur Transformation einer BigQuery-Tabelle führt. Mainframe Connector protokolliert in Jobmesswerten, schreibt aber keine Abfrageergebnisse in eine Datei.Sie können BigQuery auf verschiedene Arten abfragen: inline, mit einem separaten Dataset mit DD oder mit einem separaten Dataset mit 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/* /*
Ersetzen Sie Folgendes:
PROJECT_NAME
: der Name des Projekts, in dem Sie die Abfrage ausführen möchten.LOCATION
: Der Ort, an dem die Abfrage ausgeführt wird. Wir empfehlen, die Abfrage an einem Ort auszuführen, der sich in der Nähe der Daten befindet.
Optional: Erstellen und senden Sie einen Exportjob, der einen SQL-Lesevorgang aus der QUERY DD-Datei ausführt und das resultierende Dataset als Binärdatei auf einen Mainframe exportiert.
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 /*
Ersetzen Sie Folgendes:
PROJECT_NAME
: Der Name des Projekts, in dem Sie die Abfrage ausführen möchten.DATASET_ID
: Die BigQuery-Dataset-ID, die die Tabelle enthält, die Sie exportieren möchten.DESTINATION_TABLE
: Die BigQuery-Tabelle, die Sie exportieren möchten.
Die Daten werden in das Dataset OUTFILE DD exportiert. Das Datensatzlayout wird durch die COPYBOOK DD beschrieben.