qsam-Befehlsreferenz

Mainframe Connector transcodiert QSAM-Dateien (Queued Sequential Access Method) in Google Cloud -kompatible Formate und umgekehrt. Dazu werden die qsam-Befehle verwendet. Mit den qsam-Befehlen werden die folgenden Transcodierungsvorgänge ausgeführt:

  • Mit dem Befehl qsam decode werden Mainframe-Daten in Google Clouddecodiert.
  • Mit dem Befehl qsam encode werden Google Cloud -Daten für den Mainframe codiert.

Bei diesen Vorgängen werden symmetrische Transformationen ausgeführt. Das bedeutet, dass dieselben Daten in Google Cloudverschoben werden und von dort verschoben werden. Sie können die Struktur einer QSAM-Datei in einer Copybook-Datei mithilfe der COBOL-Datenstrukturdefinition definieren. Sie können auch erweiterte Transformationen mit der Transcoder-Konfigurationsdatei für Mainframe Connector definieren. Die folgenden Diagramme beschreiben diese Vorgänge im Detail.

Mainframe-Daten in Google Clouddecodieren
Mainframe-Daten decodieren in Google Cloud
Mainframe-Daten aus Google Cloudcodieren
Google Cloud -Daten für den Mainframe codieren

Auf dieser Seite finden Sie einen Überblick über den Transcodierungsprozess mit den Befehlen qsam decode und qsam encode, die physischen und logischen Typen von Mainframe-Daten sowie die ORC- und BigQuery-Typzuordnungen.

Physische Typen

Physische Typen definieren, wie Felddaten auf einer Festplatte 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 eine Reihe von Zeichen behandelt und als Strings mit einer bestimmten Codierung gespeichert, z. B. EBCDIC (Extended Binary Coded Decimal Interchange Code). Der Transcodierungsprozess wird nicht beendet, wenn beim Codieren oder Decodieren alphanumerischer Felder Fehler auftreten. Stattdessen wird an der Stelle, an der der Fehler aufgetreten ist, ein SUB-Zeichen für die Codierung eingefügt und der Transcodierungsvorgang wird 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 EBCDIC-codiert
  • Felder vom Typ „National“ (N) werden standardmäßig mit UTF-16 BE (Unicode Transformation Format 16-bit Big Endian) codiert.
  • UTF8-Felder werden standardmäßig mit Unicode Transformation Format-8 (UTF-8) codiert.

Der Mainframe Connector unterstützt die meisten Single-Byte-Zeichensätze (SBCS) und Double-Byte-Zeichensätze (DBCS). Bei Bedarf können Sie auch eine eigene benutzerdefinierte SBCS-Codierung definieren.

Binärfelder (COMPUTATIONAL)

Binärfelder werden als vorzeichenbehaftete oder vorzeichenlose Big-Endian-Ganzzahlen gespeichert. Der Mainframe Connector speichert binäre Felder immer logisch als signierte 64-Bit-Ganzzahlen. Daher dürfen für „unsigned long“-Eingaben nur die unteren 63 Bits verwendet werden. Andernfalls schlägt die Transcodierung fehl.

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. Mainframe Connector verwendet sowohl das einfache als auch das doppelte Genauigkeitsformat für HFP-Felder.

Bildsymbole Bildattribute Logischer Typ
COMP-1, COMP-2 Double (64-Bit-Gleitkommazahl mit Vorzeichen)

Beispiel

01 REC
  03 HFP-SINGLE COMP-1.
  03 HFP-DOUBLE COMP-2.

Gepackte Dezimalfelder (COMP-3)

Gepackte Dezimalfelder werden vollständig unterstützt. Während des Transcodierungsprozesses wählt Mainframe Connector den leistungsstärksten logischen Typ basierend auf der angegebenen Genauigkeit und Skalierung 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

Zonales Dezimalfeld (DISPLAY)

Zonierte Dezimalfelder werden vollständig unterstützt. Während des Transcodierungsprozesses wählt Mainframe Connector den leistungsstärksten logischen Typ basierend auf der angegebenen Genauigkeit und Skalierung 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 geordnete 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 (Anzahl der Elemente), 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.

Layout einer festen Liste
Layout einer festen Liste

Dynamische Listen

Dynamische Listen werden verwendet, wenn die maximale Anzahl von Elementen, die Teil der Liste sein werden, im Voraus bekannt ist. Die tatsächliche Anzahl der Artikel ist jedoch unbekannt und hängt von einem anderen Feld ab. Die Elemente in einer dynamischen Liste können unterschiedliche Größen haben.

Dynamische Listen haben folgende Eigenschaften:

  • Das Feld „Länge“ kann ohne Genauigkeitsverlust in eine Ganzzahl konvertiert werden.
  • Das Feld „Länge“ muss im Bereich liegen.
  • Die Mindestanzahl an Artikeln wird während der Transcodierung 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).

Das folgende Bild zeigt das Layout einer dynamischen Liste mit maximal fünf Elementen.

Layout einer dynamischen Liste
Layout einer dynamischen Liste

Gepackte dynamische Listen

Gepackte dynamische Listen werden verwendet, wenn die maximale Anzahl von Elementen, die Teil der Liste sein werden, von einem anderen Feld abhängt und die Elemente gepackt sind.

Die Eigenschaften von gepackten dynamischen Listen sind:

  • Das Feld „Länge“ kann ohne Genauigkeitsverlust in eine Ganzzahl konvertiert werden.
  • Das Feld „Länge“ muss im Bereich liegen.
  • Die Mindestanzahl an Artikeln wird während der Transcodierung nicht erzwungen.

Gepackte 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).

Das folgende Bild zeigt das Layout einer gepackten dynamischen Liste.

Layout einer gepackten dynamischen Liste
Layout einer gepackten dynamischen Liste

Neudefinitionen (REDEFINES)

Redefinitions ist eine COBOL-Funktion, mit der dieselben Daten auf verschiedene Arten decodiert werden können. Während der Decodierung 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 gleichgeordneten Felder und fallen daher nicht in den Bereich des jeweils anderen.
  • Neu definierte Felder werden decodiert, wenn das zugrunde liegende Feld decodiert wird, nicht wenn sie deklariert werden. Das zugrunde liegende Feld bestimmt auch den Bereich der neu definierten Felder.
  • Alle neu definierten Felder müssen dieselbe Größe und eine feste Größe haben. Das bedeutet, dass Sie in neu definierten Feldern keine Textfelder mit variabler Länge und keine gepackten dynamischen 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(5) comp-3.
  10  Field-3 PIC X(96).
05  Group-2 REDEFINES Field-1.
  10  Field-4 PIC 9(4) comp-4.
  10  Field-5 PIC X(50).
  10  Field-6 PIC X(46).

Das folgende Bild zeigt das Layout eines neu definierten Felds.

Layout eines neu definierten Felds
Layout eines neu definierten Felds

Sie können Neudefinitionen auf viele Arten verwenden, darunter die folgenden häufigsten:

  • Dieselben Daten auf zwei verschiedene Arten ansehen:Das ist die häufigste Verwendung von Neudefinitionen. Während der Codierung ist die Reihenfolge, in der die Daten eingefügt 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 „Redefines“ zu verwenden, wenn Sie je nach Feld nur eine der Interpretationen der Daten eines Datensatzes benötigen. Mit Nullindikatoren können Sie unnötige Interpretationen als null kennzeichnen. Außerdem wird dadurch verhindert, dass sie aufgrund von Nullindikatoren mit Lazy Evaluations geparst werden. Die Eigenschaften von getaggten Unions sind folgende:

    • Der Codierungsvorgang schlägt fehl, wenn mehr als eine Neudefinition definiert ist.
    • Es werden nur Gleichheits- und Ungleichheitsprü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 tagged 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 zu transcodieren, konvertiert Mainframe Connector alle Daten in eine Zwischenrepräsentation (Intermediate Representation, IR), die auf logischen Typen basiert. Mit Ein- und Ausgabeformaten wird definiert, wie Daten in einen beliebigen logischen Typ konvertiert werden. In der folgenden Tabelle sind alle logischen Typen aufgeführt, die vom Mainframe Connector unterstützt werden.

Logischer Typ Beschreibung
BigDecimal Stellt Dezimalzahlen mit beliebiger Skalierung und Genauigkeit dar.
BigInteger Stellt Ganzzahlen beliebiger Größe dar.
Byte Stellt ein Array von Byte mit variabler Größe dar.
Datum Stellt ein Datum unabhängig von einer bestimmten Zeitzone dar.
Decimal64 Stellt eine Dezimalzahl mit einem Bereich dar, der in eine vorzeichenbehaftete 64-Bit-Ganzzahl beliebiger Größenordnung passt.
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 eine beliebige Anzahl von Elementen enthalten.
Lang Stellt eine vorzeichenbehaftete 64-Bit-Zahl dar.
Aufnehmen Stellt eine feste Reihe von Feldern unterschiedlicher Typen dar.
String Stellt einen String aus Unicode-Zeichen dar, der nicht mit einer bestimmten Codierung zusammenhängt. Jeder gültige Unicode-Codepunkt kann dargestellt werden. Einige Zeichen können jedoch möglicherweise nicht in allen Codierungsprozessen codiert werden. Logische Strings haben eine variable Länge.
Zeitstempel Stellt einen Zeitstempel unabhängig von einer bestimmten Zeitzone dar.

ORC-Typzuordnung

In der folgenden Tabelle sehen Sie die Zuordnung zwischen logischen Mainframe Connector-Typen und ORC-Typen.

Logischer Typ ORC-Typ
BigDecimal decimal
BigInteger decimal
Byte Binär-Blob
Datum Datum
Decimal64 decimal64
Doppelt float64
Liste list
Lang 64-Bit-Ganzzahl (bigint)
Aufnehmen Struktur (in Code: struct)
String UTF-8-codierter String
Zeitstempel Zeitstempel (ohne lokale Zeitzone)

BigQuery-Typzuordnung

In der folgenden Tabelle sehen Sie die Zuordnung zwischen logischen Mainframe Connector-Typen und BigQuery-Datentypen.

Logischer Typ BigQuery-Datentyp Kommentare
BigDecimal NUMERIC
BigInteger NUMERIC
Byte BYTES
Datum DATE
Decimal64 NUMERIC
Doppelt FLOAT64
Liste ARRAY Verschachtelte Listen und Listen von Zuordnungen werden nicht unterstützt.
Lang INT64
Aufnehmen STRUCT Wenn eine Union nur eine Variante hat, wird sie in ein NULLABLE-Feld konvertiert. Andernfalls wird „union“ in einen RECORD mit einer Liste von NULLABLE-Feldern konvertiert. NULLABLE-Felder haben Suffixe wie field_0 und field_1. Nur eines dieser Felder erhält beim Lesen der Daten einen Wert.
String STRING
Zeitstempel TIMESTAMP

Feldumfang

Ein Feld gilt als im Bereich für ein anderes Feld, wenn es eines der folgenden ist:

  • Ein gleichgeordnetes Feld, das vor dem Feld definiert wird, das es erfordert.
  • Ein Feld in einem übergeordneten Datensatz, das vor dem Feld definiert wird, in dem es erforderlich ist.