Mainframe Connector transkodiert QSAM-(Queued Sequential Access Method)-Textdateien in Google Cloud -kompatible Formate und umgekehrt mithilfe der qsam
-Befehle. Mit den qsam
-Befehlen werden die folgenden Transcodierungsvorgänge ausgeführt:
- Der Befehl
qsam decode
decodiert Mainframe-Daten in Google Cloud - Der Befehl
qsam encode
kodiert Google Cloud Daten für den Mainframe.
Bei diesen Vorgängen werden symmetrische Transformationen durchgeführt, d. h., dieselben Daten werden von und nach Google Cloudverschoben. Sie können die Struktur einer QSAM-Datei in einer Copybook-Datei mithilfe der COBOL-Datenstrukturdefinition definieren. Sie können erweiterte Transformationen auch mithilfe der Konfigurationsdatei des Mainframe-Connectors definieren. In den folgenden Diagrammen werden diese Vorgänge ausführlich beschrieben.


Auf dieser Seite finden Sie einen Überblick über den Transcodierungsvorgang mit den Befehlen qsam decode
und qsam encode
, die physischen und logischen Typen von Mainframe-Daten sowie die Zuordnungen von ORC- (Optimized Row Columnar) und BigQuery-Typen.
Physische Typen
Mit physischen Typen wird festgelegt, wie Felddaten auf einem Laufwerk angeordnet werden. Physische Typen werden in logische Mainframe-Connector-Typen konvertiert, die dann Datenbanktypen (ORC oder BigQuery) zugeordnet werden können.
Alphanumerische Felder
Alphanumerische Felder werden zum Verarbeiten alphanumerischer Strings verwendet. Die Daten werden als Zeichenfolge behandelt und als Strings mit einer bestimmten Codierung gespeichert, z. B. EBCDIC (Extended Binary Coded Decimal Interchange Code).
Der Transcodierungsprozess wird nicht beendet, wenn bei der Codierung oder Decodierung alphanumerischer Felder Fehler auftreten. Stattdessen wird an der Stelle, an der der Fehler aufgetreten ist, das Zeichen SUB
für die Codierung eingefügt und die Transcodierung fortgesetzt.
Bildsymbole | Bildattribute | Logischer Typ |
---|---|---|
A, B, G, N, U, X, 9 | DISPLAY, DISPLAY-1, NATIONAL, UTF-8 | String |
Beispiel
01 REC 02 STR PIC X(10) 02 NATIONAL PIC N(10) 02 UTF8 PIC U(1) USAGE UTF-8
Codierungsformat
Alphanumerische Felder werden so codiert:
- X-Felder sind standardmäßig in EBCDIC codiert
- Für nationale Felder (N) wird standardmäßig die Unicode-Transformationsformat-16-Bit-Codierung (UTF-16 BE) verwendet.
- UTF8-Felder werden standardmäßig mit der Unicode Transformation Format-8 (UTF-8)-Codierung codiert.
Der Mainframe-Connector unterstützt die meisten SBCS- (Single Byte Character Set) und DBCS-Codierungen (Double Byte Character Set). Bei Bedarf kannst du auch eine eigene benutzerdefinierte SBCS-Codierung definieren.
Binäre Felder (BERECHNUNGSFELDER)
Binäre Felder werden als signierte oder signaturlose Big-Endian-Ganzzahlen gespeichert. Der Mainframe Connector speichert Binärfelder immer logisch als signierte 64‑Bit-Ganzzahlen. Daher müssen bei Eingaben vom Typ „unsigned long“ nur die unteren 63 Bit verwendet werden, da der Transcodierungsvorgang andernfalls fehlschlägt.
Bildsymbole | Bildattribute | Logischer Typ |
---|---|---|
S, 9 | COMP, COMPUTATIONAL | Long (vorzeichenbehaftete 64-Bit-Ganzzahl) |
Beispiel
01 REC 02 INT PIC S9(8) COMP
Hexadezimale Gleitkommafelder (COMP-1, COMP-2)
Hexadezimale Gleitkommafelder (HFP) werden vollständig unterstützt. Der Mainframe Connector verwendet sowohl Formate mit einfacher als auch mit doppelter Genauigkeit für HFP-Felder.
Bildsymbole | Bildattribute | Logischer Typ |
---|---|---|
COMP-1, COMP-2 | Double (64-Bit-Gleitkomma mit Vorzeichen) |
Beispiel
01 REC 03 HFP-SINGLE COMP-1. 03 HFP-DOUBLE COMP-2.
Komprimierte Dezimalfelder (COMP-3)
Komprimierte Dezimalfelder werden vollständig unterstützt. Während des Transcodierungsvorgangs wählt der Mainframe Connector anhand der angegebenen Genauigkeit und Skalierung den leistungsstärksten logischen Typ aus.
Bildsymbole | Bildattribute | Logischer Typ |
---|---|---|
S, 9, V | COMP-3 | Long (vorzeichenbehaftete 64‑Bit-Ganzzahl), BigInteger, Decimal64, BigDecimal |
Beispiel
01 REC 02 DEC PIC S9(2)V9(8) COMP-3
Dezimalfeld mit Zone (DISPLAY)
Dezimalfelder mit Zeitzone werden vollständig unterstützt. Während des Transcodierungsvorgangs wählt der Mainframe Connector anhand der angegebenen Genauigkeit und Skalierung den leistungsstärksten logischen Typ aus.
Bildsymbole | Bildattribute | Logischer Typ |
---|---|---|
S, 9, V | DISPLAYKAMPAGNEN | Long (vorzeichenbehaftete 64‑Bit-Ganzzahl), BigInteger, Decimal64, BigDecimal |
Beispiel
01 REC 02 DEC PIC S9(2)V9(8) DISPLAY
Listen (OCCURS)
Listen sind sortierte Sammlungen von Elementen desselben Typs. Der Mainframe-Connector unterstützt die folgenden Listentypen:
Feste Listen
Feste Listen werden verwendet, wenn die genaue Anzahl der Elemente (Elementanzahl), die Teil der Liste sein werden, im Voraus bekannt ist und diese Anzahl immer gleich bleibt. Die Elemente in einer festen Liste können eine variable Größe haben.
Feste Listen werden in einem Copybook so definiert:
01 REC.
02 LIST OCCURS 5 TIMES PIC X(1).
02 FLD PIC X(5).
Das folgende Bild zeigt das Layout einer festen Liste mit fünf Elementen.

Dynamische Listen
Dynamische Listen werden verwendet, wenn die maximale Anzahl der Elemente, die Teil der Liste sein werden, im Voraus bekannt ist. Die tatsächliche Artikelanzahl ist jedoch unbekannt und hängt von einem anderen Feld ab. Die Elemente in einer dynamischen Liste können unterschiedlich groß sein.
Die Eigenschaften dynamischer Listen sind:
- Das Feld „length“ kann ohne Genauigkeitsverlust in eine Ganzzahl umgewandelt werden.
- Das Feld „length“ muss sich im Bereich scope befinden.
- Die Mindestanzahl der Artikel wird während des Transcodierungsvorgangs nicht erzwungen.
Dynamische Listen werden in einem Copybook so definiert:
01 REC.
02 LEN PIC S9(2) BINARY.
02 LIST OCCURS 1 TO 5 TIMES
DEPENDING ON LEN PIC X(1).
02 FLD PIC X(5).
Die folgende Abbildung zeigt das Layout einer dynamischen Liste mit einer maximalen Anzahl von fünf Elementen.

Komprimierte dynamische Listen
Komprimierte dynamische Listen werden verwendet, wenn die maximale Anzahl der Elemente, die Teil der Liste sein werden, von einem anderen Feld abhängt und die Elemente komprimiert werden.
Die Eigenschaften komprimierter dynamischer Listen sind:
- Das Feld „length“ kann ohne Genauigkeitsverlust in eine Ganzzahl umgewandelt werden.
- Das Feld „length“ muss sich im Bereich scope befinden.
- Die Mindestanzahl der Artikel wird während des Transcodierungsvorgangs nicht erzwungen.
Komprimierte dynamische Listen werden in einem Copybook so definiert:
01 REC.
02 LEN PIC S9(2) BINARY.
02 LIST OCCURS UNBOUNDED
DEPENDING ON LEN PIC X(1).
02 FLD PIC X(5).
Die folgende Abbildung zeigt das Layout einer komprimierten dynamischen Liste.

Neudefinitionen (REDEFINES)
Neudefinitionen sind eine COBOL-Funktion, die es ermöglicht, für dieselben Daten mehrere Dekodierungsoptionen zu haben. Während der Dekodierung werden Neudefinitionen als zusätzliche Spalten in der resultierenden Tabelle angezeigt und die Daten werden mehrmals decodiert.
Die Eigenschaften von Neudefinitionen sind:
- Neudefinitionen derselben zugrunde liegenden Daten sind keine Geschwisterfelder und daher nicht im selben Gültigkeitsbereich.
- Neu definierte Felder werden decodiert, wenn das zugrunde liegende Feld decodiert wird, nicht bei der Deklaration. Das zugrunde liegende Feld bestimmt auch den Umfang der neu definierten Felder.
- Alle neu definierten Felder müssen dieselbe Größe haben und eine feste Größe haben. Das bedeutet, dass Sie in neu definierten Feldern keine Textfelder mit variabler Länge und komprimierte dynamische Listen verwenden können.
Neudefinitionen werden in einem Copybook so definiert:
01 Rec.
05 Field-1 PIC X(100).
05 Group-1 REDEFINES Field-1.
10 Field-2 PIC 9(4) comp-3.
10 Field-3 PIC X(96).
05 Group-2 REDEFINES Field-1.
10 Field-4 PIC 9(4) comp-5.
10 Field-5 PIC X(50).
10 Field-6 PIC X(46).
Das folgende Bild zeigt das Layout eines neu definierten Felds.

Sie können Definitionen auf viele Arten verwenden, darunter die folgenden:
Gleiche Daten auf zwei verschiedene Arten ansehen:Dies ist die häufigste Verwendungsart von Neudefinitionen. Während des Codierungsvorgangs ist die Reihenfolge, in der die Daten ausgefüllt werden, nicht definiert. Sie müssen daher dafür sorgen, dass die Daten in BigQuery beim Exportieren ihre Integrität behalten.
Beispiel
01 REC. 02 FULL-NAME PIC X(12). 02 NAME REDEFINES FULL-NAME. 05 FIRST-NAME PIC X(6). 05 LAST-NAME PIC X(6).
Tagged Union verwenden:Tagged Unions sind eine gängige Methode, um Definitionen zu verwenden, wenn Sie je nach Feld nur eine der Interpretationen der Daten eines Datensatzes benötigen. Mit Null-Indikatoren können Sie nicht benötigte Interpretationen als „Null“ kennzeichnen. Außerdem wird dadurch verhindert, dass sie aufgrund von Null-Indikatoren mit verzögerter Auswertung geparst werden. Die Eigenschaften von getaggten Unions sind:
- Der Codierungsvorgang schlägt fehl, wenn mehr als eine Neudefinition definiert ist.
- Es sind nur Gleichheits- und Nicht-Gleichheitsprüfungen implementiert.
Beispiel
01 REC. 05 TYPE PIC X(5). 05 DATA PIC X(100). 05 VARIANT-1 REDEFINES DATA. 10 Field-2 PIC 9(4) comp-3. 10 Field-3 PIC X(96). 05 VARIANT-2 REDEFINES DATA. 10 Field-4 PIC 9(4) comp-5. 10 Field-5 PIC X(50). 10 Field-6 PIC X(46).
Mit dem folgenden Beispiel können Sie eine getaggte Union implementieren:
{ "field_override": [ { "field": "VARIANT-1", "modifier": { "null_if": { "target_field": "TYPE", "non_null_value": "VAR1" } } }, { "field": "VARIANT-2", "modifier": { "null_if": { "target_field": "TYPE", "non_null_value": "VAR2" } } } ], "transformations": [ { "field": "DATA", "transformation": { "exclude": {}} } ] }
Logische Typen
Um Daten in mehrere Formate und aus mehreren Formaten zu transkodieren, wandelt der Mainframe-Connector alle Daten in eine Zwischendarstellung (Intermediate Representation, IR) um, die auf logischen Typen basiert. Mit Eingabe- und Ausgabeformaten wird festgelegt, wie Daten in einen logischen Typ konvertiert werden und umgekehrt. In der folgenden Tabelle sind alle logischen Typen aufgeführt, die vom Mainframe-Connector unterstützt werden.
Logischer Typ | Beschreibung |
---|---|
Lang | Stellt eine vorzeichenbehaftete 64‑Bit-Zahl dar. |
String | Stellt einen String aus Unicode-Zeichen dar, der keiner bestimmten Codierung zugeordnet ist. Jeder gültige Unicode-Codepunkt kann dargestellt werden. Einige Zeichen können jedoch nicht in allen Codierungsprozessen codiert werden. Logische Strings haben eine variable Länge. |
Decimal64 | Stellt eine Dezimalzahl mit einem Bereich dar, der in eine vorzeichenbehaftete 64-Bit-Ganzzahl beliebiger Skala passt. |
BigInteger | Stellt Ganzzahlen beliebiger Größe dar. |
BigDecimal | Stellt Dezimalzahlen beliebiger Skalierung und Genauigkeit dar. |
Byte | Stellt ein Array von Bytes mit variabler Größe dar. |
Datum | Gibt ein Datum unabhängig von einer bestimmten Zeitzone an. |
Doppelt | Stellt eine Gleitkommazahl mit doppelter Genauigkeit dar, wie im IEEE-Standard für Gleitkommaarithmetik (IEEE 754) beschrieben. |
Liste | Stellt eine Liste von Elementen eines bestimmten Typs dar. Die Liste kann beliebig viele Elemente enthalten. |
Aufnehmen | Stellt eine feste Reihe von Feldern verschiedener Typen dar. |
Zeitstempel | Stellt einen Zeitstempel dar, der unabhängig von einer bestimmten Zeitzone ist. |
ORC-Typzuordnung
In der folgenden Tabelle wird die Zuordnung zwischen den logischen Typen des Mainframe-Connectors und den ORC-Typen dargestellt.
Logischer Typ | ORC-Typ |
---|---|
Lang | 64-Bit-Ganzzahl (BigInt) |
String | UTF-8-codierter String |
Decimal64 | decimal64 |
BigInteger | decimal |
BigDecimal | decimal |
Byte | Binärer Blob |
Datum | Datum |
Doppelt | float64 |
Liste | list |
Aufnehmen | Struktur (in Code: struct) |
Zeitstempel | timestamp (ohne lokale Zeitzone) |
BigQuery-Typzuordnung
In der folgenden Tabelle sind die Zuordnungen zwischen den logischen Typen des Mainframe-Connectors und den BigQuery-Datentypen aufgeführt.
Logischer Typ | BigQuery-Datentyp | Kommentare |
---|---|---|
Lang | INT64 | |
String | STRING | |
Decimal64 | NUMERIC | |
BigInteger | NUMERIC | |
BigDecimal | NUMERIC | |
Byte | BYTES | |
Datum | DATE | |
Doppelt | FLOAT64 | |
Liste | ARRAY | Verschachtelte Listen und Listen von Zuordnungen werden nicht unterstützt. |
Aufnehmen | STRUCT | Wenn eine Union nur eine Variante hat, wird sie in ein NULLABLE-Feld konvertiert.
Andernfalls wird eine Union in einen RECORD mit einer Liste von NULLABLE-Feldern konvertiert.
NULLABLE-Felder haben Suffixe wie field_0 oder field_1 . Nur eines dieser Felder erhält beim Lesen der Daten einen Wert. |
Zeitstempel | TIMESTAMP |
Feldbereich
Ein Feld fällt in den Umfang eines anderen Felds, wenn es eines der folgenden ist:
- Ein übergeordnetes Feld, das vor dem Feld definiert ist, für das es erforderlich ist.
- Ein Feld in einem übergeordneten Datensatz, das vor dem Feld definiert ist, für das es erforderlich ist.