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 ORC-Format (Optimized Row Columnar) transkodieren 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 finden Sie in der
qsam
-Transcodierungsreferenz. - Unterstützt 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ützt die Erstellung eines Spillover-Datasets, einer Tabelle mit Transcodierungsfehlern, die zur Fehlerbehebung verwendet werden kann.
- Unterstützt mehrere Ein- und Ausgabeformate. 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.
Lokal auf dem Mainframe transkodierte 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:
- Ein Dataset auf einem Mainframe lesen und transkodieren und es im ORC-Format in Cloud Storage hochladen (Informationen zu anderen Formaten, die nur von
qsam commands
unterstützt werden, finden Sie unter TranscodeFormat). Die Transcodierung erfolgt während der Vorgängeqsam decode
odergsutil cp
(je nach ausgewähltem Befehl). Dabei wird ein Mainframe-Dataset im Extended Binary Coded Decimal Interchange Code (EBCDIC) 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 auf den Mainframe exportieren.
In den folgenden Abschnitten wird ausführlich beschrieben, wie Sie Daten, die lokal auf dem Mainframe transcodiert wurden, mit qsam
-Befehlen und dem gsutil cp
-Befehl zu Google Cloud verschieben können.
Lokal mit qsam
-Befehlen transcodieren
So transkodieren Sie Ihre Mainframedaten 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 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.
Sie können das Standardverhalten des Transcodierungsprozesses des Mainframe Connector ändern, indem Sie mit dem Argument
--transcode-configuration
eine Transcoder-Konfigurationsdatei bereitstellen.//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.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 bereitstellen.//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.