Konfigurasi transcoder

Anda dapat mengonfigurasi transkoder Mainframe Connector dengan menambahkan konfigurasi yang diperlukan dalam file JSON. File ini disebut sebagai file konfigurasi transkoder. Anda harus menentukan konfigurasi seperti yang ditentukan di bagian Konfigurasi. Perintah qsam encode dan qsam decode menggunakan file konfigurasi transkoder untuk melakukan transkode data.

Halaman ini menjelaskan berbagai cara untuk mengonfigurasi transkoder Mainframe Connector.

Konfigurasi

Objek Configuration adalah root konfigurasi transkoder. File ini berisi semua opsi konfigurasi untuk transcoder.

Representasi JSON
{
    "defaults": object (DefaultsSection),
    "field_suffixes": object (FieldSuffix),
    "field_overrides": object (FieldOverride),
    "transformations": object (Transformation),
    "schema_validation_mode": enum (SchemaValidationMode),
    "header_records_to_skip": long,
    "record_filter_condition": string
}
Kolom
defaults

object (DefaultsSection)

Tentukan pengubah kolom default untuk arketipe Cobol.

field_suffixes

object (FieldSuffix)

Tentukan sufiks kolom.

field_overrides

object (FieldOverride)

Tentukan penggantian kolom.

transformations

object (Transformation)

Tentukan transformasi kolom.

schema_validation_mode

enum (SchemaValidationMode)

Tentukan mode validasi skema.

header_records_to_skip

long

Tentukan jumlah rekaman pertama yang akan dilewati.

record_filter_condition

string

Tentukan kondisi filter untuk data.

Filter mendukung operator berikut:

  • Operator perbandingan: `==`, `!=`, `<`, `<=`, `>`, `>=`.
  • Operator logika: `&&` (AND), `||` (OR).
  • Pencantuman daftar: `in` (untuk memeriksa apakah nilai ada dalam variabel daftar).
  • Operator aritmetika: `+`, `-`, `*`, `/`, `%`.
  • Fungsi string dan daftar:
    • size(): Menampilkan panjang string atau daftar.
    • contains(substring): Memeriksa apakah string berisi substring tertentu.
Perbandingan dan operasi harus dilakukan antara variabel atau konstanta dengan jenis data yang sama.

Contoh:

"record_filter_condition": "(DATE > '2025-01-12' ) && ((SCORE_A + SCORE_B) > 134)

DefaultsSection

Objek DefaultsSection dapat digunakan untuk menentukan modifikasi default menurut jenis cobol. Perubahan ini diterapkan sebelum modifikasi akhiran atau penggantian.

Representasi JSON
{
    "alpha_numeric_display": object (FieldModifier),
    "numeric_display": object (FieldModifier),
    "binary": object (FieldModifier),
    "packed_decimal": object (FieldModifier),
    "national": object (FieldModifier),
    "utf8": object (FieldModifier),
    "dbcs": object (FieldModifier),
    "hexadecimal_floating_point": object (FieldModifier)
}
Kolom
alpha_numeric_display

object (FieldModifier)

Tentukan default untuk kolom alfanumerik (PIC X).

numeric_display

object (FieldModifier)

Tentukan nilai default untuk kolom tampilan numerik (desimal yang di-zona).

binary

object (FieldModifier)

Tentukan default untuk kolom angka biner (COMP).

packed_decimal

object (FieldModifier)

Tentukan default untuk kolom desimal padat (COMP-3).

national

object (FieldModifier)

Tentukan default untuk kolom nasional (PIC N).

utf8

object (FieldModifier)

Tentukan default untuk kolom UTF-8 (PIC U).

dbcs

object (FieldModifier)

Default untuk kolom dbcs (DISPLAY-1).

hexadecimal_floating_point

object (FieldModifier)

Default untuk kolom floating point heksadesimal (COMP-1, COMP-2).

FieldSuffix

Sufiks kolom berlaku untuk semua kolom yang memiliki sufiks.

Kolom dicocokkan jika diakhiri dengan tanda hubung (-) atau garis bawah (_) yang diikuti dengan akhiran.

Sufiks tidak peka huruf besar/kecil.

Pengubah FieldSuffix diterapkan setelah pengubah FieldOverride.

Misalnya, pengubah yang ditentukan untuk akhiran NID akan diterapkan ke kolom bernama FLD-NID, tetapi tidak untuk kolom FUNID.

Representasi JSON
{
    "suffix": string,
    "is_inverse": boolean,
    "modifier": object (FieldModifier)
}
Kolom
suffix

string

Kolom dengan akhiran ini akan menerapkan pengubah padanya.

is_inverse

boolean

Tentukan apakah pengubah adalah pengubah kolom invers atau tidak. Pengubah kolom inversi menerapkan pengubah pada kolom lain yang memiliki nama yang sama dengan kolom yang memiliki pengubah tanpa pengubah. Misalnya, jika kolom FLD-NID dan FLD ada dalam rekaman yang sama, pengubah akan diterapkan ke FLD.

Saat menggunakan pengubah kolom terbalik, ID khusus $self dapat digunakan setiap kali nama kolom dapat secara tradisional digunakan untuk merujuk ke kolom dengan akhiran.

Misalnya, untuk membuat kolom indikator null, Anda dapat menggunakan pengubah kolom null_if dengan is_inverse yang ditetapkan ke true. Lihat NullIf untuk mengetahui informasi selengkapnya.

modifier

object (FieldModifier)

Tentukan pengubah yang akan diterapkan ke kolom yang cocok.

FieldOverride

Ganti atau ubah rantai dekode dan encode untuk kolom yang ditentukan.

Representasi JSON
{
    "field": string,
    "modifier": object (FieldModifier)
}
Kolom
field

string

Tentukan nama kolom untuk menerapkan pengubah.

modifier

object (FieldModifier)

Tentukan pengubah yang akan diterapkan ke kolom yang cocok.

Transformasi

Transformasi tampilan digunakan untuk mengubah hubungan antara tabel dan file QSAM. Transformasi selalu difrasakan dari sudut pandang data. Konsepnya mirip dengan melihat tabel di BigQuery.

Representasi JSON
{
    "exclude": object (Exclude),
    "unnest": object (Unnest),
    "move": object (Move),
    "rename": object (Rename)
}
Kolom
exclude

object (Exclude)

unnest

object (Unnest)

move

object (Move)

rename

object (Rename)

FieldModifier

Pengubah kolom memungkinkan Anda mengubah encoding atau decoding kolom tertentu. Perhatikan bahwa tidak semua pengubah dapat diterapkan ke semua kolom. Lihat dokumentasi untuk mengetahui informasi selengkapnya tentang pengubah tertentu.

Representasi JSON
{
    "filler": object (Filler),
    "null_if": object (NullIf),
    "format_date": object (FormatDate),
    "chain": object (ModifierChain),
    "zoned_decimal": object (ZonedDecimal),
    "binary": object (Binary),
    "packed_decimal": object (PackedDecimal),
    "null_if_invalid": object (NullIfInvalid),
    "bytes": object (Bytes),
    "varlen": object (VarLen),
    "string": object (String),
    "null_if_empty": object (NullIfEmpty),
    "format_timestamp": object (FormatTimestamp),
    "hfp": object (HFP),
    "decode_as_null": object (DecodeAsNull),
    "encode_null_as": object (EncodeNullAs)
}
Kolom
filler

object (Filler)

Mengecualikan kolom dari pemrosesan dan output.

null_if

object (NullIf)

Menetapkan kolom ke null secara bersyarat berdasarkan nilai kolom lain.

format_date

object (FormatDate)

Memformat kolom string sebagai tanggal.

chain

object (ModifierChain)

Merangkai beberapa pengubah untuk diterapkan secara berurutan.

zoned_decimal

object (ZonedDecimal)

Mengganti konfigurasi default untuk kolom desimal yang di-zona.

binary

object (Binary)

Mengganti konfigurasi default untuk kolom numerik biner.

packed_decimal

object (PackedDecimal)

Mengganti konfigurasi default untuk kolom desimal yang dipadatkan.

null_if_invalid

object (NullIfInvalid)

Menetapkan kolom ke null jika terjadi error transkode, sehingga mencegah tumpahan data.

bytes

object (Bytes)

Memperlakukan kolom sebagai urutan byte mentah, mengabaikan informasi jenis sebelumnya.

varlen

object (VarLen)

Tetapkan rekaman sebagai kolom panjang variabel.

string

object (String)

Mengganti konfigurasi default untuk kolom string.

null_if_empty

object (NullIfEmpty)

Menetapkan kolom ke null jika kontennya dianggap kosong.

format_timestamp

object (FormatTimestamp)

Memformat kolom string sebagai stempel waktu.

hfp

object (HFP)

Menafsirkan kolom sebagai angka Floating Point Heksadesimal (HFP).

decode_as_null

object (DecodeAsNull)

Menentukan cara nilai null harus didekode.

encode_null_as

object (EncodeNullAs)

Menentukan cara nilai null harus dienkode.

Kecualikan

Mengecualikan kolom dari tabel hasil, tetapi tetap menjalani decoding atau encoding. Hal ini berguna saat kolom tidak perlu ditransfer ke tabel, tetapi diperlukan untuk transcoding. Misalnya, indikator null atau kolom panjang dapat dihilangkan dari tabel.

Untuk melewati transkode sepenuhnya, terapkan pengubah pengisi.

Representasi JSON
{
    "field": string
}
Kolom
field

string

Tentukan kolom yang akan dikecualikan.

Unnest

Batalkan penyarangan kolom.

Representasi JSON
{
    "field": string,
    "format": string
}
Kolom
field

string

Menentukan kolom yang akan diuraikan

format

string

Tentukan format kolom baru.

${parent} akan dirilis dengan nama kolom yang tidak disarangkan.

Untuk struct yang tidak bertingkat, ${field} diganti dengan nama kolom struct.

Untuk array dan daftar yang tidak bertingkat, ${index} diganti dengan indeks array.

Pindahkan

Memindahkan kolom dalam data.

Representasi JSON
{
    "field": string,
    "offset": int
}
Kolom
field

string

Tentukan kolom yang akan dipindahkan.

offset

int

Tentukan jumlah tempat, maju atau mundur, yang harus dituju oleh kolom.

Ganti nama

Mengganti nama satu atau beberapa kolom berdasarkan pencocokan ekspresi reguler.

Misalnya, untuk mengganti semua tanda hubung dengan garis bawah, gunakan format JSON berikut: {"find": "\\-", "replace":"_"}.

Representasi JSON
{
    "find": string,
    "replace": string
}
Kolom
find

string

Menentukan pola ekspresi reguler Java untuk mengidentifikasi kolom yang akan diganti namanya.

Pola dicocokkan dengan nama kolom lengkap. Jika pola cocok dengan bagian mana pun dari nama kolom, kolom tersebut dianggap cocok.

Contoh:

  • "\\-" (cocok dengan kolom apa pun yang berisi tanda hubung)
  • "^field_name$" (mencocokkan kolom dengan nama yang sama persis field_name)
  • "^field_(.*)$" (mencocokkan kolom apa pun yang dimulai dengan field_ dan mengambil sisanya)
  • "part_of_name" (mencocokkan kolom apa pun yang berisi part_of_name)

replace

string

Menentukan nama baru untuk kolom yang cocok.

Grup tangkapan dari ekspresi reguler find dapat digunakan dalam string replace menggunakan referensi balik seperti $1, $2. Hal ini memungkinkan transformasi yang lebih kompleks berdasarkan bagian nama kolom asli.

Contoh:

  • "new_field_name" (mengganti kolom dengan nama tetap)
  • "new_$1" (menggunakan grup pengambilan pertama dari find)
  • "${1}_new" (sintaksis alternatif untuk grup pengambilan)
  • "prefix_$1_suffix" (menggunakan grup pengambilan dan menambahkan awalan/akhiran)

Pengisi

Menentukan bahwa kolom akan diabaikan selama pemrosesan. Kolom tidak akan didekode dari input atau dienkode ke output dan akan dikecualikan dari skema dan tabel data yang dihasilkan selama decoding. Anda dapat menerapkan pengubah ini ke kolom apa pun yang memiliki ukuran statis yang diketahui.

Berikan objek JSON kosong sebagai berikut:

Representasi JSON
{
}

NullIf

Menetapkan kolom ke null jika suatu kondisi terpenuhi. Anda harus menentukan salah satu dari null_value atau non_null_value atau keduanya.

Untuk membuat kolom indikator null, Anda dapat menggunakan FieldSuffix dengan pengubah kolom null_if, dan menetapkan is_inverse ke true seperti yang ditunjukkan dalam contoh berikut:

Contoh: Indikator null

Untuk membuat kolom indikator null, kita dapat menggunakan pengubah kolom null_if seperti ini.

 {
  "field_suffixes": [
   {
     "suffix": "NID",
     "is_inverse": true,
     "modifier": {
     "null_if": {
       "null_value": "?",
       "target_field": "$self"
     }
    }
   }
  ]
 }

Dengan demikian, semua kolom dengan akhiran NID dapat secara efektif menjadi indikator null seperti yang ditunjukkan dalam cuplikan buku contoh berikut:

 01 REC.
   02 FIELD     PIC X(10).
   02 FIELD-NID PIC X(1).

Contoh: Indikator null biner

Untuk membuat kolom indikator null binary, kita dapat menggunakan pengubah kolom binary dan null_if seperti berikut.

 {
  "field_suffixes": [
   {
     "suffix": "NID",
     "modifier": {
       "binary": {}
     }
   },
   {
     "suffix": "NID",
     "is_inverse": true,
     "modifier": {
     "null_if": {
       "null_value": "15",
       "target_field": "$self"
     }
    }
   }
  ]
 }

Dengan demikian, semua kolom dengan akhiran NID secara efektif menjadi indikator null binary menggunakan copybook yang sama dari contoh sebelumnya.

Contoh: Indikator null byte

Untuk membuat kolom indikator null bytes, kita dapat menggunakan pengubah kolom bytes dan null_if seperti ini. Nilai untuk null dan tidak null dinyatakan sebagai HEX.

 {
  "field_suffixes": [
   {
     "suffix": "NID",
     "modifier": {
       "bytes": {}
     }
   },
   {
     "suffix": "NID",
     "is_inverse": true,
     "modifier": {
     "null_if": {
       "null_value": "FF",
       "target_field": "$self"
     }
    }
   }
  ]
 }

Dengan demikian, semua kolom dengan akhiran NID secara efektif menjadi indikator null bytes menggunakan copybook yang sama dari contoh sebelumnya.

Representasi JSON
{
    "target_field": string,
    "null_value": string,
    "null_values": string,
    "non_null_value": string,
    "non_null_values": string
}
Kolom
target_field

string

Tentukan kolom yang nilainya ingin Anda periksa. Kolom harus dalam cakupan.

null_value

string

Jika ditentukan, jika target_field sama dengan nilai ini, kolom tidak didekode atau dienkode, dan nilai disetel ke null.

null_values

string

Jika ditentukan, jika target_field sama dengan salah satu nilai ini, kolom tidak akan didekode atau dienkode dan nilainya akan disetel ke null.

non_null_value

string

Jika ditentukan, jika target_field tidak sama dengan nilai ini, kolom tidak didekode atau dienkode, dan nilai disetel ke null.

non_null_values

string

Jika ditentukan, jika target_field tidak sama dengan salah satu nilai ini, kolom tidak didekode atau dienkode dan nilai disetel ke null.

FormatDate

Memformat string ke tanggal menggunakan salah satu format yang didukung. Anda hanya dapat menerapkan pengubah ini ke kolom berukuran. Selama proses decoding, format diuji secara berurutan hingga salah satu format cocok dengan string. Selama proses encoding, format pertama digunakan dan sisanya diabaikan.

Representasi JSON
{
    "formats": object (DateTimeFormat)
}
Kolom
formats

object (DateTimeFormat)

Daftar format tanggal.

ModifierChain

Tentukan rangkaian pengubah untuk menerapkan beberapa pengubah secara berurutan. Pengubah diterapkan sesuai urutan yang ditentukan.

Representasi JSON
{
    "modifiers": object (FieldModifier)
}
Kolom
modifiers

object (FieldModifier)

Tentukan daftar pengubah yang akan diterapkan.

ZonedDecimal

Menetapkan berbagai opsi yang terkait dengan encoding dan decoding angka desimal yang di-zone. Anda hanya dapat menerapkan pengubah ini pada kolom desimal.

Representasi JSON
{
    "logical_type": enum (DecimalLogicalType),
    "encoding": enum (ZonedDecimalEncoding)
}
Kolom
logical_type

enum (DecimalLogicalType)

Tentukan jenis logis yang akan digunakan saat mendekode atau mengenkode kolom.

encoding

enum (ZonedDecimalEncoding)

Encoding yang digunakan untuk mengenkode kolom.

Biner

Abaikan pengubah sebelumnya dan perlakukan kolom ini sebagai bilangan biner.

Representasi JSON
{
    "signedness": enum (BinarySignedness)
}
Kolom
signedness

enum (BinarySignedness)

Tanda bilangan.

PackedDecimal

Tetapkan kolom ini ke PackedDecimal.

Representasi JSON
{
    "logical_type": enum (DecimalLogicalType)
}
Kolom
logical_type

enum (DecimalLogicalType)

Ganti jenis logika. Secara default, Mainframe Connector menggunakan jenis logika yang optimal berdasarkan presisi dan skala.

NullIfInvalid

Perlakukan nilai sebagai null jika transkode gagal. Anda hanya dapat menerapkan pengubah ini ke kolom berukuran. Error diabaikan dan tidak dicatat dalam set data pelimpahan. Selama proses decoding, nilai kolom ini akan menjadi null untuk data ini. Selama proses encoding, jika data tidak dapat ditulis, seluruh kolom akan diisi dengan byte null.

Berikan objek JSON kosong sebagai berikut:

Representasi JSON
{
}

Byte

Memperlakukan kolom sebagai urutan byte mentah. Pengubah ini menggantikan informasi jenis sebelumnya, sehingga data byte mentah kolom dipertahankan apa adanya tanpa encoding karakter atau interpretasi numerik tertentu. Anda dapat menerapkan pengubah ini ke kolom apa pun, terlepas dari jenis atau ukuran aslinya.

Berikan objek JSON kosong sebagai berikut:

Representasi JSON
{
}

VarLen

Mewakili kolom panjang variabel.

Kolom panjang variabel berisi tiga bagian:

  1. Item grup yang berisi dua sub-kolom.
  2. Kolom dalam item grup yang berisi panjang data transaksi.
  3. Kolom dalam item grup yang berisi data.

Nama kolom panjang variabel akan menjadi nama grup.

Berikan objek JSON kosong sebagai berikut:

Representasi JSON
{
}

String

Menetapkan berbagai opsi yang terkait dengan decoding dan encoding string. Hanya dapat diterapkan pada kolom string.

Representasi JSON
{
    "encoding": string,
    "trim_suffix": boolean,
    "pad_char": string
}
Kolom
encoding

string

Encoding yang digunakan untuk mengenkode kolom.

trim_suffix

boolean

Jika disetel ke benar (true), spasi di akhir string akan dipangkas. trim_suffix hanya memengaruhi decoding, encoding mengabaikan trim_suffix. Perhatikan bahwa string yang hanya terdiri dari spasi akan menjadi string kosong.

pad_char

string

Saat ditetapkan, string ekspor padding dengan pad_char. Jika ditetapkan, panjang pad_char harus 1. pad_char hanya memengaruhi encoding, decoding mengabaikan pad_char.

NullIfEmpty

Kolom harus disetel ke null jika semua byte dalam kolom tersebut adalah 0.

Berikan objek JSON kosong sebagai berikut:

Representasi JSON
{
}

FormatTimestamp

Memformat string ke stempel waktu menggunakan salah satu format yang disediakan. Ini hanya dapat diterapkan pada kolom berukuran. Selama decoding, format diuji secara berurutan hingga salah satu format cocok dengan string. Selama encoding, format pertama akan digunakan dan format lainnya akan diabaikan.

Representasi JSON
{
    "formats": object (DateTimeFormat)
}
Kolom
formats

object (DateTimeFormat)

Daftar format stempel waktu.

HFP

Tetapkan kolom ini sebagai Floating Point Heksadesimal.

Berikan objek JSON kosong sebagai berikut:

Representasi JSON
{
}

DecodeAsNull

Menentukan cara nilai null diinterpretasikan selama proses decoding. Karena COBOL tidak mendukung nilai null secara native, parameter ini menentukan nilai apa yang harus diperlakukan sebagai null.

Representasi JSON
{
    "values": string,
    "hex_bytes": string
}
Kolom
values

string

Daftar representasi string. Setelah decoding awal kolom ke bentuk stringnya, jika konten kolom cocok dengan salah satu nilai ini, kolom akan diperlakukan sebagai null.

hex_bytes

string

Daftar representasi heksadesimal dari satu byte. Jika kolom berisi pengulangan salah satu byte ini, kolom tersebut akan dianggap sebagai null. Misalnya, menggunakan FF untuk semua nilai tertinggi dan 00 untuk semua nilai terendah (kosong).

EncodeNullAs

Menentukan cara nilai null direpresentasikan selama proses encoding.

Representasi JSON
{
    "value": string,
    "hex_byte": string
}
Kolom
value

string

Encode nilai tertentu ini saat nilai sumber adalah null. Pastikan string valid untuk jenis kolom.

hex_byte

string

Encode urutan byte tertentu ini (ditampilkan sebagai string heksadesimal) saat nilai sumber adalah null. Misalnya, FF untuk kolom dua byte ke nilai tinggi. Anda dapat menerapkannya ke kolom apa pun dengan ukuran yang diketahui. Byte diulang agar sesuai dengan ukuran kolom pokok.

DateTimeFormat

Ukuran dan pola yang akan digunakan saat mengonversi kolom menjadi tanggal.

Representasi JSON
{
    "size": int,
    "pattern": string
}
Kolom
size

int

Tentukan ukuran kolom yang menerapkan pola ini.

pattern

string

Tentukan pola pemformat tanggal. Untuk mengetahui informasi selengkapnya tentang pola pemformat yang valid, lihat Class DateTimeFormatter.

ZonedDecimalEncoding

Tentukan encoding yang akan digunakan saat mendekode atau meng-encode kolom desimal yang di-zone.

Enum
UNSPECIFIED Pertahankan encoding yang ditentukan dalam rantai pengubah. Jika tidak ada pengubah yang ditentukan, EBCDIC akan digunakan.
EBCDIC Gunakan encoding EBCDIC.
ASCII Gunakan encoding ASCII.

BinarySignedness

Jenis logika yang akan digunakan untuk kolom desimal.

Enum
UNSPECIFIED Gunakan jenis yang paling optimal berdasarkan skala dan presisi.
SIGNED Gunakan 64-bit untuk menyimpan nilai. Pengubah ini hanya berfungsi untuk angka yang presisinya kurang dari atau sama dengan 18, dan skalanya adalah 0.
UNSIGNED Gunakan 64-bit untuk menyimpan nilai. Pengubah ini hanya berfungsi untuk angka yang presisinya kurang dari atau sama dengan 18.

DecimalLogicalType

Jenis logika yang akan digunakan untuk kolom desimal.

Enum
AUTO Gunakan jenis yang paling optimal berdasarkan skala dan presisi.
LONG Gunakan 64-bit untuk menyimpan nilai. Pengubah ini hanya berfungsi untuk angka yang presisinya kurang dari atau sama dengan 18, dan skalanya adalah 0.
DECIMAL64 Gunakan 64-bit untuk menyimpan nilai. Pengubah ini hanya berfungsi untuk angka yang presisinya kurang dari atau sama dengan 18.
BIG_DECIMAL Simpan nilai sebagai nilai desimal yang tidak terikat. Opsi ini adalah opsi yang paling lambat, tetapi mendukung desimal apa pun dengan presisi apa pun pada skala apa pun.
BIG_INTEGER Simpan nilai sebagai nilai bilangan bulat yang tidak terikat. Ini adalah opsi paling lambat, tetapi mendukung bilangan bulat apa pun dengan presisi apa pun.

SchemaValidationMode

Tentukan mode validasi skema yang akan digunakan selama kompilasi copybook. Mode ini memverifikasi kompatibilitas dengan format data target tertentu.

Enum
DEFAULT Mode validasi skema default. Mode ini memverifikasi bahwa nama kolom unik ada di copybook.
BIG_QUERY Mode validasi skema untuk kompatibilitas BigQuery. Mode ini memperluas validasi default untuk memverifikasi bahwa skema copybook kompatibel dengan jenis data BigQuery.
POSTGRES Mode validasi skema untuk kompatibilitas PostgreSQL. Mode ini memperluas validasi default untuk memverifikasi bahwa skema copybook kompatibel dengan jenis data PostgreSQL.
MYSQL Mode validasi skema untuk kompatibilitas MySQL. Mode ini memperluas validasi default untuk memverifikasi bahwa skema copybook kompatibel dengan jenis data MySQL.