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.


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.

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.

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.

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.

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.