Lokal transcodierte Mainframe-Daten zu Google Cloud verschieben

Auf dieser Seite wird erläutert, wie Sie Mainframe-Daten lokal auf dem Mainframe in ein unterstütztes Format transcodieren und die Inhalte dann in Google Cloudverschieben.

Hinweis

Installieren Sie den Mainframe Connector auf jedem partitionierten Mainframe-Dataset, das Sie als Prozedurbibliothek (PROCLIB) verwenden möchten.

Die Befehle qsam und vsam

Transcodierung ist der Prozess der Umwandlung von Informationen von einer Form der codierten Darstellung in eine andere. Der Mainframe Connector bietet die Befehle qsam und vsam, um Daten lokal auf dem Mainframe zu transcodieren.

Die Befehle qsam decode und vsam decode verwenden ein COBOL-Copybook, um die Datensätze eines Mainframe-Datasets in ein Dateiformat wie ORC, CSV, JSONL oder AVRO zu konvertieren und die Ausgabe lokal oder in einen Cloud Storage-Bucket zu schreiben. Sie können beispielsweise ein EBCDIC-codiertes QSAM-Dataset in UTF-8-ORC-Dateien konvertieren. Informationen zu allen unterstützten Ausgabeformaten finden Sie unter TranscodeFormat.

Der Befehl qsam encode bewirkt das Gegenteil: Er konvertiert CSV-, JSONL-, ORC- oder AVRO-Daten oder die Ergebnisse einer BigQuery-Abfrage in ein QSAM-Dataset. Informationen zu allen unterstützten Eingabeformaten finden Sie unter TranscodeInputFormat.

Diese Befehle bieten die folgenden Funktionen:

  • 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 Transcodierungsreferenz für qsam und vsam.
  • 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 Codieren der Daten zurück in den Mainframe.
  • Unterstützung für die Erstellung eines Spillover-Datasets, d. h. einer Tabelle mit Transcodierungsfehlern, die für die Fehlerprüfung verwendet werden kann.
  • Unterstützung für mehrere Eingabe- und Ausgabeformate. Mit dieser Funktion können Sie Ihre Daten in und aus verschiedenen Data Warehouses laden.

Mainframe-Daten lokal transcodieren und zu Google Cloudverschieben

Mit dem Mainframe-Connector können Sie Daten lokal auf dem Mainframe transcodieren und dann nach Cloud Storage verschieben. Gehen Sie so vor:

  1. Erstellen Sie einen Job, um das Dataset auf Ihrem Mainframe zu lesen und in das ORC-Format zu transcodieren. Lesen Sie die Daten aus dem INFILE-Dataset und das Datensatzlayout aus dem COPYBOOK DD.

    Sie können das Standardverhalten des Transcodierungsprozesses des Mainframe Connectors ändern, indem Sie mit dem Argument --transcode-configuration eine Transcoder-Konfigurationsdatei angeben.

    • Wenn Ihr Eingabe-Dataset eine QSAM-Datei (Queued Sequential Access Method) mit einer festen oder variablen 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 Eingabe-Dataset eine VSAM-Datei (Virtual Storage Access Method) mit einer festen oder variablen 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.

    In diesem Beispiel wird DD DataPath verwendet, um den Pfad des Copybooks, der Eingabe und der Transcodierungskonfiguration anzugeben. Weitere Optionen finden Sie unter DataPath.

    Wenn Sie Variablen wie Projekt-IDs und Bucket-Namen nicht in jeder JCL-Prozedur (Job Control Language) angeben möchten, können Sie sie der BQSH-PROCLIB hinzufügen und in mehreren JCL-Prozeduren als Umgebungsvariablen referenzieren. Dieser Ansatz vereinfacht auch den Übergang zwischen Produktions- und Nicht-Produktionsumgebungen, da umgebungsspezifische Variablen in der BQSH-PROCLIB der Umgebung festgelegt werden.

    Wenn Sie die während dieses Vorgangs ausgeführten Befehle protokollieren möchten, können Sie Laststatistiken aktivieren.

  2. Erstellen Sie einen BigQuery-Ladejob, der die transcodierte Datei in BigQuery lädt, und senden Sie ihn. Wenn Sie die Daten beispielsweise in das ORC-Format transcodiert haben, können Sie die ORC-Dateipartitionen so aus tablename.orc in MY_DATASET.MY_TABLE laden:

    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.
  3. Optional: Erstellen Sie einen BigQuery-Abfragejob, der einen SQL-Lesevorgang aus der QUERY DD-Datei ausführt, und senden Sie ihn. In der Regel ist die Abfrage eine MERGE- oder SELECT INTO DML-Anweisung, die zur Transformation einer BigQuery-Tabelle führt. Beachten Sie, dass Mainframe Connector Jobmesswerte protokolliert, aber keine Abfrageergebnisse in eine Datei schreibt.

    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 Standort, an dem die Abfrage ausgeführt wird. Wir empfehlen, die Abfrage an einem Standort in der Nähe der Daten auszuführen.
  4. Optional: Erstellen Sie einen Exportjob, der einen SQL-Lesevorgang aus der QUERY DD-Datei ausführt, und senden Sie ihn. Exportieren Sie das resultierende Dataset als Binärdatei auf einen Mainframe.

    //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 Standort, an dem die Abfrage ausgeführt wird. Wir empfehlen, die Abfrage an einem Standort in der Nähe der Daten auszuführen.

    Sie können das Standardverhalten des Transcodierungsprozesses des Mainframe Connectors ändern, indem Sie mit dem Argument --transcode-configuration eine Transcoder-Konfigurationsdatei bereitstellen.

    Die Daten werden in das Dataset OUTFILE DD exportiert. Das Datensatzlayout wird durch COPYBOOK DD beschrieben. Weitere Optionen für Copybook-, Ausgabedatei- und Transcodierungskonfigurationspfade finden Sie unter DataPath.