Auf dieser Seite erfahren Sie, wie Sie Mainframe-Daten lokal auf dem Mainframe in ein unterstütztes Format umwandeln und die Inhalte dann in BigQuery verschieben. Bei der Transcodierung werden Informationen von einer codierten Darstellungsform in eine andere umgewandelt. Auf dieser Seite erfahren Sie, wie Sie mit dem Mainframe-Connector Mainframe-Daten in ORC (Optimized Row Columnar) umwandeln und dann in Cloud Storage speichern können.
Der Mainframe-Connector bietet zwei Möglichkeiten, Mainframe-Daten lokal auf dem Mainframe zu transkodieren.
qsam
-Befehle verwenden (Version 5.16.0 und höher)gsutil cp
-Befehl verwenden
Vorteile von qsam
-Befehlen
Die qsam
-Befehle bieten folgende Vorteile:
- Unterstützt zusammengesetzte Datentypen, einschließlich der OCCURS-Klausel (Listen), der REDEFINES-Klausel und verschachtelter Datensätze. Weitere Informationen zu diesen Datentypen findest du in der
qsam
-Referenz für die Transcodierung. - Unterstützt die Konfiguration des Transcodierungsvorgangs über eine Transcoder-Konfigurationsdatei. Diese Funktion bietet mehr Flexibilität beim Decodieren von Daten in Google Cloudund beim Codieren der Daten zurück in den Mainframe.
- Unterstützt das Erstellen eines Ausgleichsdatensatzes, einer Tabelle mit Transcodierungsfehlern, die zur Fehlerprüfung verwendet werden kann.
- Unterstützt mehrere Eingabe- und Ausgabeformate. So können Sie Ihre Daten in verschiedene Datenspeicher laden und von dort abrufen.
Hinweise
Installieren Sie den Mainframe-Connector auf jedem Mainframe-partitionierten Datensatz, den Sie als Verfahrensbibliothek (PROCLIB) verwenden möchten.
Lokal auf dem Mainframe transcodierte Daten zu Google Cloudverschieben
Wenn Sie Daten lokal auf einem Mainframe transkodieren und dann in BigQuery verschieben möchten, müssen Sie die folgenden Aufgaben ausführen:
- Liest und transkodiert einen Datensatz auf einem Mainframe und lädt ihn im ORC-Format in Cloud Storage hoch. Weitere Formate, die nur von der
qsam commands
unterstützt werden, finden Sie unter TranscodeFormat. Die Transcodierung erfolgt während der Vorgängeqsam decode
odergsutil cp
(je nach gewähltem Befehl). Dabei wird ein EBCDIC-Datensatz (Extended Binary Coded Decimal Interchange Code) beim Kopieren in einen Cloud Storage-Bucket in das ORC-Format in UTF-8 konvertiert. - 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 zum Mainframe exportieren.
In den folgenden Abschnitten wird ausführlich beschrieben, wie Sie lokal auf dem Mainframe transcodierte Daten mithilfe der qsam
-Befehle und des gsutil cp
-Befehls auf Google Cloud verschieben.
Lokales Transcodieren mit qsam
-Befehlen
So transcodieren Sie Ihre Mainframe-Daten lokal auf Ihrem Mainframe mit qsam
-Befehlen:
Erstellen Sie einen Job, um das Dataset auf Ihrem Mainframe zu lesen und in das ORC-Format zu transkodieren, wie im folgenden Befehl gezeigt. Lesen Sie die Daten aus dem INFILE-Dataset und das Datensatzlayout aus dem COPYBOOK-DD. Der Eingabedatensatz muss eine QSAM-Datei (Queued Sequential Access Method) mit fester oder variabler Datensatzlänge sein.
Du kannst das Standardverhalten des Transcodierungsvorgangs des Mainframe-Connectors ändern, indem du mit dem Argument
--transcode-configuration
eine Transcoder-Konfigurationsdatei angibst.//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 /*
Ersetzen Sie
BUCKET_NAME
durch den Namen des Cloud Storage-Bucket, in den Sie Mainframe-Daten kopieren möchten.Damit Sie nicht in jeder JCL-Prozedur (Job Control Language) Variablen wie Projekt-IDs und Bucket-Namen angeben müssen, können Sie sie in der BQSH PROCLIB hinzufügen und in mehreren JCL-Prozeduren als Umgebungsvariablen darauf verweisen. Dieser Ansatz ermöglicht auch einen nahtlosen Übergang zwischen Produktions- und anderen Umgebungen, da Umgebungsvariablen 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 findest du unterDataPath
.Wenn Sie die während dieses Vorgangs ausgeführten Befehle protokollieren möchten, können Sie Ladestatistiken aktivieren.
So erstellen und senden Sie einen BigQuery-Ladejob, mit dem ORC-Dateipartitionen von
tablename.orc
nachMY_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 eine SQL-Leseoperation aus der QUERY-DD-Datei ausführt. Normalerweise handelt es sich bei der Abfrage um eine
MERGE
- oderSELECT INTO DML
-Anweisung, die zur Transformation einer BigQuery-Tabelle führt. Der Mainframe-Connector protokolliert Jobmesswerte, schreibt die Abfrageergebnisse aber nicht 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 eine SQL-Leseoperation aus der QUERY-DD-Datei ausführt und den resultierenden Datensatz als Binärdatei auf einen Mainframe exportiert.
Du kannst das Standardverhalten des Transcodierungsvorgangs des Mainframe-Connectors ändern, indem du mit dem Argument
--transcode-configuration
eine Transcoder-Konfigurationsdatei angibst.//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 das COPYBOOK-DD beschrieben. Weitere Optionen für Copybook-, Ausgabedatei- und Transcodierungskonfigurationspfade finden Sie unter
DataPath
.
Lokale Transcodierung mit dem Befehl gsutil cp
So transcodieren Sie Ihre Mainframe-Daten 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 gezeigt. Lesen Sie die Daten aus dem INFILE-Dataset und das Datensatzlayout aus dem COPYBOOK-DD. Der Eingabedatensatz 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.Um Variablen wie Projekt-IDs und Bucket-Namen nicht in jeder JCL-Prozedur angeben zu müssen, können Sie sie in der BQSH PROCLIB hinzufügen und sie in mehreren JCL-Prozeduren als Umgebungsvariablen verwenden. Dieser Ansatz ermöglicht auch einen nahtlosen Übergang zwischen Produktions- und Nicht-Produktionsumgebungen, da Umgebungsvariablen 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 werden die Standardeingaben (STDIN) als In-Stream-Daten an das STDIN-DD übergeben. Alternativ können Sie diese Eingabe auch mit einem Datenquellennamen (DSN) angeben, was die Symbolsubstitution erleichtert.
Wenn Sie die während dieses Vorgangs ausgeführten Befehle protokollieren möchten, können Sie Ladestatistiken aktivieren.
So erstellen und senden Sie einen BigQuery-Ladejob, mit dem ORC-Dateipartitionen von
tablename.orc
nachMY_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 eine SQL-Leseoperation aus der QUERY-DD-Datei ausführt. Normalerweise handelt es sich bei der Abfrage um eine
MERGE
- oderSELECT INTO DML
-Anweisung, die zur Transformation einer BigQuery-Tabelle führt. Der Mainframe-Connector protokolliert Jobmesswerte, schreibt die Abfrageergebnisse jedoch nicht 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 eine SQL-Leseoperation aus der QUERY-DD-Datei ausführt und den resultierenden Datensatz 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 das COPYBOOK-DD beschrieben.