Referensi perintah qsam

Mainframe Connector mentranskode file datar Queued Sequential Access Method (QSAM) ke Google Cloud format yang kompatibel, dan sebaliknya menggunakan perintah qsam. Perintah qsam melakukan operasi transkode berikut:

  • Perintah qsam decode mendekode data mainframe ke Google Cloud
  • Perintah qsam encode mengenkode Google Cloud data ke mainframe.

Operasi ini melakukan transformasi simetris, yaitu memindahkan data yang sama ke dan dari Google Cloud. Anda dapat menentukan struktur file QSAM dalam file copybook menggunakan definisi struktur data COBOL. Anda juga dapat menentukan transformasi lanjutan menggunakan file konfigurasi transkoder Mainframe Connector. Diagram berikut menjelaskan operasi ini secara mendetail.

Mendekode data mainframe ke Google Cloud
Mendekode data mainframe ke Google Cloud
Mengenkode data mainframe dari Google Cloud
Mengenkode Google Cloud data ke mainframe

Halaman ini memberikan ringkasan proses transkode menggunakan perintah qsam decode dan qsam encode, jenis data mainframe fisik dan logis, serta pemetaan jenis Optimized Row Columnar (ORC) dan BigQuery.

Jenis fisik

Jenis fisik menentukan tata letak data kolom di disk. Jenis fisik dikonversi menjadi jenis logis Mainframe Connector yang kemudian dapat dipetakan ke jenis database (ORC atau BigQuery).

Kolom alfanumerik

Kolom alfanumerik digunakan untuk memproses string alfanumerik. Data diperlakukan sebagai serangkaian karakter dan disimpan sebagai string dengan encoding tertentu, misalnya, Extended Binary Coded Decimal Interchange Code (EBCDIC). Proses transkode tidak akan berhenti jika terjadi error selama encoding atau decoding kolom alfanumerik. Sebagai gantinya, karakter SUB untuk encoding ditempatkan di lokasi terjadinya error, dan proses transcoding akan berlanjut.

Simbol gambar Atribut gambar Jenis logika
A, B, G, N, U, X, 9 DISPLAY, DISPLAY-1, NATIONAL, UTF-8 String

Contoh

01 REC
  02 STR      PIC X(10)
  02 NATIONAL PIC N(10)
  02 UTF8     PIC U(1) USAGE UTF-8

Format encoding

Kolom alfanumerik dienkode sebagai berikut:

  • Kolom X secara default menggunakan encoding EBCDIC
  • Kolom Nasional (N) secara default menggunakan encoding Unicode Transformation Format 16-bit (UTF-16 BE)
  • Kolom UTF8 secara default menggunakan encoding Unicode Transformation Format-8 (UTF-8)

Mainframe Connector mendukung sebagian besar pengkodean himpunan karakter byte tunggal (SBCS) dan himpunan karakter byte ganda (DBCS). Anda juga dapat menentukan encoding SBCS kustom Anda sendiri, jika diperlukan.

Kolom biner (KOMPUTASIONAL)

Kolom biner disimpan sebagai bilangan bulat big-endian bertanda atau tidak bertanda. Mainframe Connector selalu menyimpan kolom biner secara logis sebagai bilangan bulat 64-bit bertanda. Oleh karena itu, input long yang tidak bertanda harus menggunakan hanya 63 bit yang lebih rendah, jika tidak, proses transcoding akan gagal.

Simbol gambar Atribut gambar Jenis logika
S, 9 COMP, KOMPUTASIONAL Long (bilangan bulat 64-bit bertanda)

Contoh

01 REC
  02 INT PIC S9(8) COMP

Kolom floating point heksadesimal (COMP-1, COMP-2)

Kolom floating point heksadesimal (HFP) didukung sepenuhnya. Mainframe Connector menggunakan format presisi tunggal dan ganda untuk kolom HFP.

Simbol gambar Atribut gambar Jenis logika
COMP-1, COMP-2 Double (floating point bertanda 64-bit)

Contoh

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

Kolom desimal padat (COMP-3)

Kolom desimal padat didukung sepenuhnya. Selama proses transcoding, Mainframe Connector memilih jenis logis yang paling berperforma berdasarkan presisi dan skala yang ditentukan.

Simbol gambar Atribut gambar Jenis logika
S, 9, V COMP-3 Long (bilangan bulat 64-bit bertanda), BigInteger, Decimal64, BigDecimal

Contoh

01 REC
  02 DEC PIC S9(2)V9(8) COMP-3

Kolom desimal yang dikelompokkan (DISPLAY)

Kolom desimal zona didukung sepenuhnya. Selama proses transcoding, Mainframe Connector memilih jenis logis yang paling berperforma berdasarkan presisi dan skala yang ditentukan.

Simbol gambar Atribut gambar Jenis logika
S, 9, V DISPLAY Long (bilangan bulat 64-bit bertanda), BigInteger, Decimal64, BigDecimal

Contoh

01 REC
  02 DEC PIC S9(2)V9(8) DISPLAY

Daftar (TERJADI)

Daftar adalah kumpulan elemen yang diurutkan dari jenis yang sama. Mainframe Connector mendukung jenis daftar berikut:

Daftar tetap

Daftar tetap digunakan saat jumlah pasti item (jumlah item) yang akan menjadi bagian dari daftar diketahui sebelumnya, dan jumlah ini selalu tetap sama. Item dalam daftar tetap dapat berukuran variabel.

Daftar tetap didefinisikan sebagai berikut dalam copybook:

       01 REC.
         02 LIST OCCURS 5 TIMES       PIC X(1).
         02 FLD                       PIC X(5).

Gambar berikut menunjukkan tata letak daftar tetap dengan jumlah item 5.

Tata letak daftar tetap
Tata letak daftar tetap

Daftar dinamis

Daftar dinamis digunakan jika jumlah maksimum item yang akan menjadi bagian dari daftar diketahui sebelumnya. Namun, jumlah item sebenarnya tidak diketahui dan bergantung pada kolom lain. Item dalam daftar dinamis dapat memiliki ukuran yang bervariasi.

Properti daftar dinamis adalah sebagai berikut:

  • Kolom panjang dapat dikonversi menjadi bilangan bulat tanpa kehilangan presisi.
  • Kolom panjang harus dalam cakupan.
  • Jumlah minimum item tidak diterapkan selama proses transkode.

Daftar dinamis didefinisikan sebagai berikut dalam buku teks:

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

Gambar berikut menunjukkan tata letak daftar dinamis dengan jumlah maksimum item sebanyak lima.

Tata letak daftar dinamis
Tata letak daftar dinamis

Daftar dinamis yang dikemas

Daftar dinamis yang dikemas digunakan jika jumlah maksimum item yang akan menjadi bagian dari daftar bergantung pada kolom lain, dan item dikemas.

Properti daftar dinamis yang dikemas adalah sebagai berikut:

  • Kolom panjang dapat dikonversi menjadi bilangan bulat tanpa kehilangan presisi.
  • Kolom panjang harus dalam cakupan.
  • Jumlah item minimum tidak diterapkan selama proses transcoding.

Daftar dinamis yang dipaketkan didefinisikan sebagai berikut dalam copybook:

01 REC.
  02 LEN                       PIC S9(2) BINARY.
  02 LIST OCCURS UNBOUNDED
      DEPENDING ON LEN         PIC X(1).
  02 FLD                       PIC X(5).

Gambar berikut menunjukkan tata letak daftar dinamis yang dipadatkan.

Tata letak daftar dinamis yang dipadatkan
Tata letak daftar dinamis padat

Definisi ulang (REDEFINES)

Redefinition adalah fitur COBOL yang memungkinkan data yang sama memiliki beberapa kemungkinan dekode. Selama proses decoding, definisi ulang muncul sebagai kolom tambahan dalam tabel yang dihasilkan, dan data didekode beberapa kali.

Properti definisi ulang adalah sebagai berikut:

  • Pendefinisian ulang pada data pokok yang sama bukanlah kolom saudara dan oleh karena itu tidak berada dalam cakupan satu sama lain.
  • Kolom yang ditentukan ulang didekodekan saat kolom pokok didekodekan, bukan saat dideklarasikan. Kolom pokok juga menentukan cakupan kolom yang didefinisikan ulang.
  • Semua kolom yang didefinisikan ulang harus memiliki ukuran yang sama dan harus memiliki ukuran tetap. Artinya, Anda tidak dapat menggunakan kolom teks panjang variabel dan daftar dinamis yang dipadatkan di kolom yang ditentukan ulang.

Pendefinisian ulang didefinisikan sebagai berikut dalam copybook:

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

Gambar berikut menunjukkan tata letak kolom yang didefinisikan ulang.

Tata letak kolom yang didefinisikan ulang
Tata letak kolom yang didefinisikan ulang

Anda dapat menggunakan definisi ulang dengan berbagai cara, termasuk cara yang paling umum berikut:

  • Melihat data yang sama dalam dua cara yang berbeda: Ini adalah cara paling umum penggunaan definisi ulang. Selama proses encoding, urutan pengisian data tidak ditentukan, jadi Anda harus memastikan bahwa data di BigQuery tetap mempertahankan integritasnya saat diekspor.

    Contoh

    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).
    
  • Menggunakan gabungan bertag: Gabungan bertag adalah cara umum untuk menggunakan pendefinisian ulang saat Anda hanya memerlukan salah satu interpretasi data dari setiap catatan, bergantung pada kolom. Anda dapat menggunakan indikator null untuk menandai interpretasi yang tidak diperlukan sebagai null. Hal ini juga akan mencegahnya diuraikan karena indikator null memiliki evaluasi lambat. Properti gabungan yang diberi tag adalah sebagai berikut:

    • Proses encoding akan gagal jika lebih dari satu pendefinisian ulang ditentukan.
    • Hanya pemeriksaan kesetaraan dan non-kesetaraan yang diterapkan.

    Contoh

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

    Anda dapat menggunakan contoh berikut untuk menerapkan gabungan bertag:

    {
      "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": {}}
        }
      ]
    }
    

Jenis Logika

Untuk melakukan transcoding data ke dan dari beberapa format, Mainframe Connector mengonversi semua data ke representasi perantara (IR) yang didasarkan pada jenis logis. Format input dan output menentukan cara data dikonversi ke dan dari jenis logika apa pun. Tabel berikut mencantumkan semua jenis logis yang didukung oleh Mainframe Connector.

Jenis logika Deskripsi
BigDecimal Mewakili angka desimal dengan skala dan presisi apa pun.
BigInteger Mewakili bilangan bulat dengan ukuran apa pun.
Byte Mewakili array byte dengan ukuran variabel.
Tanggal Merepresentasikan tanggal terlepas dari zona waktu tertentu.
Decimal64 Mewakili desimal dengan rentang yang dapat dimuat dalam bilangan bulat bertanda 64-bit dengan skala apa pun.
Ganda Merepresentasikan angka floating point presisi ganda seperti yang dijelaskan dalam IEEE Standard for Floating-Point Arithmetic (IEEE 754).
Daftar Mewakili daftar item dari jenis tertentu. Daftar dapat berisi sejumlah item tertentu.
Long Mewakili bilangan 64-bit bertanda.
Rekam Mewakili serangkaian kolom tetap dengan berbagai jenis.
String Mewakili string karakter unicode yang tidak terkait dengan encoding tertentu. Setiap titik kode Unicode yang valid dapat direpresentasikan. Namun, beberapa karakter mungkin tidak dapat dienkode dalam semua proses encoding. String logis memiliki panjang yang bervariasi.
Stempel waktu Mewakili stempel waktu yang tidak bergantung pada zona waktu tertentu.

Pemetaan jenis ORC

Tabel berikut menyediakan pemetaan antara jenis logis Mainframe Connector dan jenis ORC.

Jenis logika Jenis ORC
BigDecimal decimal
BigInteger decimal
Byte blob biner
Tanggal tanggal
Decimal64 decimal64
Ganda float64
Daftar list
Long Bilangan bulat 64-bit (bigint)
Rekam struct
String String berenkode UTF-8
Stempel waktu stempel waktu (tanpa zona waktu lokal)

Pemetaan jenis BigQuery

Tabel berikut menyediakan pemetaan antara jenis logis Mainframe Connector dengan jenis data BigQuery.

Jenis logika Jenis data BigQuery Komentar
BigDecimal NUMERIC
BigInteger NUMERIC
Byte BYTES
Tanggal DATE
Decimal64 NUMERIC
Ganda FLOAT64
Daftar ARRAY Daftar bertingkat dan daftar peta tidak didukung.
Long INT64
Rekam STRUCT Jika hanya memiliki satu varian, union akan dikonversi menjadi kolom NULLABLE. Jika tidak, union akan dikonversi menjadi RECORD dengan daftar kolom NULLABLE. Kolom NULLABLE memiliki akhiran seperti field_0, field_1. Hanya salah satu dari kolom tersebut yang diberi nilai saat data dibaca.
String STRING
Stempel waktu TIMESTAMP

Cakupan kolom

Kolom dianggap dalam cakupan untuk kolom lain jika merupakan salah satu dari berikut:

  • Kolom saudara yang ditentukan sebelum kolom yang memerlukannya.
  • Kolom dalam rekaman induk yang ditentukan sebelum kolom yang memerlukannya.