הגדרת ממיר הקידוד

כדי להגדיר את המקודד של Mainframe Connector, מוסיפים את ההגדרה הנדרשת בקובץ JSON. הקובץ הזה נקרא קובץ התצורה של Transcoder. צריך להגדיר את ההגדרות האישיות כמו שמפורט בקטע הגדרות אישיות. הפקודות qsam encode ו-qsam decode משתמשות בקובץ התצורה של הטרנסקודר כדי לבצע המרת נתונים.

בדף הזה מתוארות הדרכים השונות שבהן אפשר להגדיר את המקודד של Mainframe Connector.

הגדרות אישיות

האובייקט Configuration הוא הבסיס של הגדרת ה-Transcoder. הוא מכיל את כל אפשרויות ההגדרה של הטרנסקודר.

ייצוג ב-JSON
{
    "defaults": object (DefaultsSection),
    "field_overrides": object (FieldOverride),
    "field_suffixes": object (FieldSuffix),
    "header_records_to_skip": long,
    "record_filter_condition": string,
    "schema_validation_mode": enum (SchemaValidationMode),
    "transformations": object (Transformation)
}
שדות
defaults

object (DefaultsSection)

צריך לציין את משני השדות שמוגדרים כברירת מחדל לארכיטיפים של Cobol.

field_overrides

object (FieldOverride)

מציינים את השדות שרוצים לשנות.

field_suffixes

object (FieldSuffix)

מציינים סיומות לשדות.

header_records_to_skip

long

מציינים את מספר הרשומות הראשונות שרוצים לדלג עליהן.

record_filter_condition

string

מציינים תנאי סינון לרשומות.

המסנן מבוסס על קבוצת משנה של Common Expression Language ‏ (CEL) ותומך באפשרויות הבאות:

  • גישה לשדות: אפשר להפנות לשדות לפי השם שלהם. בשדות בתצוגת עץ, משתמשים בסימון נקודות (למשל, PARENT.CHILD).
  • אופרטורים להשוואה: `==`, `!=`, `<`, `<=`, `>`, `>=`.
  • אופרטורים לוגיים: `&&` (AND), `||` (OR), `!` (NOT).
  • הכלה ברשימה: `in` (בדיקה אם ערך מסוים קיים ברשימה).
  • אופרטורים אריתמטיים: `+`, `-`, `*`, `/`, `%`.
  • פונקציות של מחרוזות ורשימות:
    • ‫size(): מחזירה את האורך של מחרוזת או רשימה.
    • ‫contains(substring): בודקת אם מחרוזת מכילה מחרוזת משנה מסוימת.
    • ‫startsWith(prefix): בודקת אם מחרוזת מתחילה בתחילית מסוימת.
    • ‫endsWith(suffix): בודקת אם מחרוזת מסתיימת בסיומת מסוימת.
  • קבועים של תאריך וחותמת זמן:
    • date(string): מנתח תאריך בפורמט ISO ‏ (YYYY-MM-DD). למשל, date('2025-01-12').
    • ‫date(string, format): מנתח תאריך באמצעות פורמט מותאם אישית. למשל, date('12/01/2025', 'dd/MM/yyyy').
    • ‫timestamp(string): מנתח חותמת זמן בפורמט ISO. למשל, timestamp('1999-05-03T02:34:00Z').
צריך לבצע השוואות ופעולות בין משתנים או קבועים מאותו סוג נתונים או מסוגי נתונים תואמים (לדוגמה, השוואה בין מספרים בנקודה צפה או שימוש בקבועים של תאריך או חותמת זמן בשדות של תאריך או חותמת זמן).

דוגמה:

"record_filter_condition": "(ACCOUNT-GRP.DATE > date('2025-01-12') ) && ((SCORE_A + SCORE_B) > 134) && FLD-STR.startsWith('HE')"

schema_validation_mode

enum (SchemaValidationMode)

מציינים את מצב אימות הסכימה.

transformations

object (Transformation)

מציינים טרנספורמציות של שדות.

DefaultsSection

אפשר להשתמש באובייקט DefaultsSection כדי לציין שינויים כברירת מחדל לפי סוגי COBOL. הם מוחלים לפני שינויים בסיומת או שינויים ידניים.

ייצוג ב-JSON
{
    "alpha_numeric_display": object (FieldModifier),
    "binary": object (FieldModifier),
    "dbcs": object (FieldModifier),
    "hexadecimal_floating_point": object (FieldModifier),
    "national": object (FieldModifier),
    "numeric_display": object (FieldModifier),
    "packed_decimal": object (FieldModifier),
    "utf8": object (FieldModifier)
}
שדות
alpha_numeric_display

object (FieldModifier)

מציינים את ברירות המחדל לשדות אלפאנומריים (PIC X).

binary

object (FieldModifier)

מציינים את ברירות המחדל לשדות של מספרים בינאריים (COMP).

dbcs

object (FieldModifier)

ברירת המחדל לשדות dbcs ‏ (DISPLAY-1).

hexadecimal_floating_point

object (FieldModifier)

ברירת המחדל לשדות של נקודה צפה (floating point) בבסיס הקסדצימלי (COMP-1, ‏ COMP-2).

national

object (FieldModifier)

מציינים את ברירות המחדל לשדות הלאומיים (PIC N).

numeric_display

object (FieldModifier)

צריך לציין את ברירות המחדל לשדות של תצוגה מספרית (עשרוני מוגדר אזור).

packed_decimal

object (FieldModifier)

מציינים את ברירות המחדל לשדות של מספרים עשרוניים דחוסים (COMP-3).

utf8

object (FieldModifier)

מציינים את ברירות המחדל לשדות UTF-8 (PIC U).

FieldModifier

משנה שדה מאפשר לשנות את הקידוד או הפענוח של שדה ספציפי. חשוב לזכור שלא כל המגבילים יכולים לחול על כל השדות. למידע נוסף, עיינו במסמכי התיעוד של מגדירי הגישה הספציפיים.

ייצוג ב-JSON
{
    "binary": object (Binary),
    "bytes": object (Bytes),
    "chain": object (ModifierChain),
    "decode_as_null": object (DecodeAsNull),
    "encode_null_as": object (EncodeNullAs),
    "filler": object (Filler),
    "format_date": object (FormatDate),
    "format_timestamp": object (FormatTimestamp),
    "hfp": object (HFP),
    "null_if": object (NullIf),
    "null_if_empty": object (NullIfEmpty),
    "null_if_invalid": object (NullIfInvalid),
    "packed_decimal": object (PackedDecimal),
    "string": object (String),
    "varlen": object (VarLen),
    "zoned_decimal": object (ZonedDecimal)
}
שדות
binary

object (Binary)

ההגדרה הזו מבטלת את הגדרת ברירת המחדל של שדות מספריים בינאריים.

bytes

object (Bytes)

השדה מטופל כרצף גולמי של בייטים, תוך התעלמות ממידע קודם על הסוג.

chain

object (ModifierChain)

משרשר כמה משתנים כדי להחיל אותם ברצף.

decode_as_null

object (DecodeAsNull)

מגדיר איך לפענח ערכי null.

encode_null_as

object (EncodeNullAs)

מגדיר איך צריך לקודד ערכי null.

filler

object (Filler)

השדה לא נכלל בעיבוד ובפלט.

format_date

object (FormatDate)

עיצוב שדה מחרוזת כתאריך.

format_timestamp

object (FormatTimestamp)

עיצוב שדה מחרוזת כחותמת זמן.

hfp

object (HFP)

מפרש את השדה כמספר בשיטת נקודה צפה (HFP) בבסיס הקסדצימלי.

null_if

object (NullIf)

הגדרת השדה כ-null באופן מותנה, על סמך הערך של שדה אחר.

null_if_empty

object (NullIfEmpty)

מגדיר את השדה כ-null אם התוכן שלו נחשב ריק.

null_if_invalid

object (NullIfInvalid)

אם מתרחשת שגיאה בהמרת קידוד, השדה מוגדר כ-null כדי למנוע זליגת רשומות.

packed_decimal

object (PackedDecimal)

המדיניות הזו משנה את הגדרת ברירת המחדל של שדות עשרוניים דחוסים.

string

object (String)

המדיניות הזו מבטלת את הגדרות ברירת המחדל של שדות מחרוזת.

varlen

object (VarLen)

מגדירים את הרשומה כשדה באורך משתנה.

zoned_decimal

object (ZonedDecimal)

מבטלת את הגדרת ברירת המחדל של שדות עשרוניים עם אזור.

בינארי

התעלם מכל משני המצב הקודמים והתייחס לשדה הזה כמספר בינארי.

ייצוג ב-JSON
{
    "signedness": enum (BinarySignedness)
}
שדות
signedness

enum (BinarySignedness)

הסימן של המספר.

בייטים

השדה מטופל כרצף גולמי של בייטים. המשתנה הזה מבטל כל מידע קודם על סוג הנתונים, וכך נתוני הבייטים הגולמיים של השדה נשמרים כמו שהם, בלי קידוד תווים ספציפי או פרשנות מספרית. אפשר להחיל את המאפיין הזה על כל שדה, בלי קשר לסוג או לגודל המקורי שלו.

מציינים אובייקט JSON ריק באופן הבא:

ייצוג ב-JSON
{
}

DecodeAsNull

מגדירה איך המערכת מפרשת ערכי null במהלך תהליך הפענוח. מכיוון ש-COBOL לא תומך בערכי null באופן מקורי, הפרמטר הזה מציין אילו ערכים צריכים להיחשב כ-null.

ייצוג ב-JSON
{
    "hex_bytes": string,
    "values": string
}
שדות
hex_bytes

string

רשימה של ייצוגים הקסדצימליים של בייט בודד. כששדה מכיל חזרות על אחד מהבייטים האלה, הוא מטופל כ-null. לדוגמה, שימוש ב-FF לכל הערכים הגבוהים וב-00 לכל הערכים הנמוכים (ריק).

values

string

רשימה של ייצוגי מחרוזות. אחרי הפענוח הראשוני של השדה לצורת המחרוזת שלו, אם תוכן השדה תואם לאחד מהערכים האלה, הוא יטופל כ-null.

EncodeNullAs

מגדיר איך ערכי null מיוצגים במהלך תהליך הקידוד.

ייצוג ב-JSON
{
    "hex_byte": string,
    "value": string
}
שדות
hex_byte

string

מקודדים את רצף הבייטים הספציפי הזה (מיוצג כמחרוזת הקסדצימלית) כשערך המקור הוא null. לדוגמה, FF לשדה של שני בייטים לערכים גבוהים. אפשר להחיל את זה על כל שדה בגודל ידוע. הבייטים חוזרים על עצמם כדי להתאים לגודל של השדה הבסיסי.

value

string

מקודדים את הערך הספציפי הזה כשערך המקור הוא null. מוודאים שהמחרוזת תקינה לסוג השדה.

Filler

מציין שהמערכת תתעלם משדה מסוים במהלך העיבוד. השדה לא יפוענח מהקלט או יקודד לפלט, והוא לא ייכלל בסכימה ובטבלת הנתונים שיתקבלו במהלך הפענוח. אפשר להחיל את המגביל הזה על כל שדה שיש לו גודל סטטי ידוע.

מציינים אובייקט JSON ריק באופן הבא:

ייצוג ב-JSON
{
}

FormatDate

אתם יכולים להמיר את הפורמט של שדה מספרי או שדה מחרוזת לתאריך, באמצעות אחד מהפורמטים הנתמכים. אפשר להחיל את המגביל הזה רק על שדות עם גודל. לפני העיצוב, שדות מספריים מומרים באופן דינמי לייצוג המחרוזת שלהם (לא כולל סימנים). ההנחה היא שערכי התאריכים חיוביים. תאריכים מספריים שליליים לא נתמכים והניתוח שלהם ייכשל. במהלך תהליך הפענוח, הפורמטים נבדקים לפי הסדר עד שאחד מהם תואם למחרוזת. במהלך תהליך הקידוד, המערכת משתמשת בפורמט הראשון ומתעלמת מהשאר.

ייצוג ב-JSON
{
    "formats": object (DateTimeFormat)
}
שדות
formats

object (DateTimeFormat)

רשימה של פורמטים של תאריכים.

DateTimeFormat

הגודל והתבנית שבהם צריך להשתמש כשממירים את השדה לתאריך.

ייצוג ב-JSON
{
    "pattern": string,
    "size": int
}
שדות
pattern

string

מציינים את תבנית עיצוב התאריך. מידע נוסף על תבניות תקינות של מעצבים זמין במאמר Class DateTimeFormatter.

הערה: שנים עם שתי ספרות (yy) ממופות לטווח 2000-2099. לדוגמה, בתבנית MM/dd/yy, הערך 05/03/99 מפוענח כ-2099-05-03.

size

int

מציינים את גודל השדה שהתבנית הזו חלה עליו.

FormatTimestamp

אתם יכולים להמיר מחרוזת לחותמת זמן באמצעות אחד מהפורמטים שמופיעים. אפשר להחיל את זה רק על שדות בגודל מסוים. במהלך הפענוח, הפורמטים נבדקים לפי הסדר עד שאחד מהם תואם למחרוזת. במהלך הקידוד, המערכת תשתמש בפורמט הראשון ותתעלם מהשאר.

ייצוג ב-JSON
{
    "formats": object (DateTimeFormat)
}
שדות
formats

object (DateTimeFormat)

רשימה של פורמטים של חותמות זמן.

HFP

מגדירים את השדה הזה כנקודה צפה (floating point) בבסיס הקסדצימלי.

מציינים אובייקט JSON ריק באופן הבא:

ייצוג ב-JSON
{
}

ModifierChain

כדי להחיל כמה משתנים ברצף, צריך לציין שרשרת משתנים. השינויים מוחלים לפי הסדר שבו הם צוינו.

ייצוג ב-JSON
{
    "modifiers": object (FieldModifier)
}
שדות
modifiers

object (FieldModifier)

מציינים את רשימת מאפייני השינוי שרוצים להחיל.

NullIf

הגדרת שדה כ-null אם תנאי מסוים מתקיים. צריך לציין את null_value או את non_null_value או את שניהם.

כדי ליצור שדה של אינדיקטור לערך null, אפשר להשתמש ב-FieldSuffix עם משנה שדה null_if, ולהגדיר את is_inverse ל-true, כמו בדוגמאות הבאות:

דוגמה: Null-indicator

כדי ליצור שדה של אינדיקטור null, אפשר להשתמש ב-modifier של השדה null_if באופן הבא.

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

כך כל השדות עם הסיומת NID יכולים לשמש כאינדיקטורים לערכי null, כמו בקטע הבא מ-copybook:

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

דוגמה: אינדיקטור null בינארי

כדי ליצור שדה של אינדיקטור null ב-binary, אפשר להשתמש בתווי השינוי של השדות binary ו-null_if, באופן הבא.

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

כך כל השדות עם הסיומת NID יכולים להיות אינדיקטורים של binary null, באמצעות אותו copybook מהדוגמה הקודמת.

דוגמה: אינדיקטור null של בייטים

כדי ליצור שדה של אינדיקטור null ב-bytes, אפשר להשתמש בשינויי השדות bytes ו-null_if באופן הבא. הערכים של null ו-not-null מבוטאים כ-HEX.

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

כך כל השדות עם הסיומת NID יכולים להיות אינדיקטורים לערך null מסוג bytes, באמצעות אותו copybook מהדוגמה הקודמת.

ייצוג ב-JSON
{
    "non_null_value": string,
    "non_null_values": string,
    "null_value": string,
    "null_values": string,
    "target_field": string
}
שדות
non_null_value

string

אם מציינים את המאפיין הזה, והערך של target_field לא שווה לערך הזה, השדה לא מפוענח או מקודד, והערך מוגדר כ-null.

non_null_values

string

אם מציינים את המאפיין הזה, והערך של target_field לא שווה לאף אחד מהערכים האלה, השדה לא מפוענח או מקודד והערך מוגדר כ-null.

null_value

string

אם מציינים את הערך הזה, והערך של target_field שווה לו, השדה לא מפוענח או מקודד, והערך מוגדר כ-null.

null_values

string

אם מציינים את המאפיין הזה, והערך של target_field שווה לאחד מהערכים האלה, השדה לא מפוענח או מקודד והערך מוגדר כ-null.

target_field

string

מציינים את השדה שאת הערך שלו רוצים לבדוק. השדה חייב להיות בהיקף. כדי לגשת לשדות בתצוגת עץ, אפשר להשתמש בסימון נקודות (למשל, "GROUP.FIELD").

NullIfEmpty

אם כל הבייטים בשדה הם 0, צריך להגדיר את השדה כ-null.

מציינים אובייקט JSON ריק באופן הבא:

ייצוג ב-JSON
{
}

NullIfInvalid

אם המרת הקידוד נכשלת, הערך יוגדר כ-null. אפשר להחיל את המגביל הזה רק על שדות עם גודל. כברירת מחדל, אם פענוח של שדה נכשל, כל הרשומה מועברת למערך הנתונים של הגלישה (שגיאה) ולא נכללת בפלט, והשארת הטעינה מסתיימת עם הרשומות התקינות. כשמגדירים את המשתנה null_if_invalid, המחבר ל-Mainframe שומר את הרשומה הלא חוקית ומגדיר את השדה הזה כ-null. השתמשו בו רק כשאתם רוצים לשמור שורות כאלה עם ערך null, ולא רק כדי שהטעינה תצליח, כי ברירת המחדל כבר מדלגת על הרשומות הלא תקינות. המערכת מתעלמת מהשגיאה והיא לא נרשמת בקבוצת הנתונים של הגלישה. במהלך תהליך הפענוח, הערך של השדה הזה יהיה null ברשומה הזו. אם אי אפשר לכתוב את הנתונים במהלך תהליך הקידוד, כל השדה יתמלא בבייטים ריקים.

מציינים אובייקט JSON ריק באופן הבא:

ייצוג ב-JSON
{
}

PackedDecimal

מגדירים את השדה הזה כ-PackedDecimal.

ייצוג ב-JSON
{
    "logical_type": enum (DecimalLogicalType),
    "negative_sign_nibble": enum (PackedDecimalNegativeNibble)
}
שדות
logical_type

enum (DecimalLogicalType)

שינוי הסוג הלוגי. כברירת מחדל, Mainframe Connector משתמש בסוג הלוגי האופטימלי על סמך הדיוק והקנה מידה.

negative_sign_nibble

enum (PackedDecimalNegativeNibble)

מציין את הניבל שמשמש לסימנים שליליים. גם x'B' וגם x'D' הם סימנים שליליים תקינים, אבל יכול להיות שבמערכות או באפליקציות מסוימות של מחשב מרכזי יש מוסכמה שדורשת להשתמש באחד מהם ולא בשני.

String

מגדירה את האפשרויות השונות שקשורות לפענוח ולקידוד של מחרוזות. אפשר להחיל רק על שדה מחרוזת.

ייצוג ב-JSON
{
    "encoding": string,
    "pad_char": string,
    "trim_suffix": boolean
}
שדות
encoding

string

הקידוד שבו השדה מקודד.

pad_char

string

כשהאפשרות הזו מוגדרת, מחרוזות הייצוא של המרווח הפנימי יכללו את הערך pad_char. אם הוא מוגדר, האורך של pad_char חייב להיות 1. ‫pad_char משפיע רק על הקידוד, והפענוח מתעלם מ-pad_char.

trim_suffix

boolean

כשהערך מוגדר כ-true, כל רווח לבן בסוף המחרוזת ייחתך. ‫trim_suffix משפיע רק על פענוח, הקידוד מתעלם מ-trim_suffix. שימו לב שמחרוזות שמכילות רק רווחים יהפכו למחרוזות ריקות.

VarLen

מייצג שדה באורך משתנה.

שדה באורך משתנה מכיל שלושה חלקים:

  1. פריט קבוצתי שמכיל שני שדות משנה.
  2. שדה בתוך פריט הקבוצה שמכיל את אורך נתוני העסקה.
  3. שדה בתוך הפריט בקבוצה שמכיל את הנתונים.

השם של השדה באורך משתנה יהיה שם הקבוצה.

מציינים אובייקט JSON ריק באופן הבא:

ייצוג ב-JSON
{
}

ZonedDecimal

הגדרה של אפשרויות שונות שקשורות לקידוד ולפענוח של מספרים עשרוניים עם אזור. אפשר להחיל את המגביל הזה רק על שדה עשרוני.

ייצוג ב-JSON
{
    "encoding": enum (ZonedDecimalEncoding),
    "logical_type": enum (DecimalLogicalType)
}
שדות
encoding

enum (ZonedDecimalEncoding)

הקידוד שבו השדה מקודד.

logical_type

enum (DecimalLogicalType)

מציינים את הסוג הלוגי שבו צריך להשתמש כשמפענחים או מקודדים את השדה.

FieldOverride

שינוי או שינוי מותאם אישית של שרשרת הפענוח והקידוד של השדה שצוין.

ייצוג ב-JSON
{
    "field": string,
    "modifier": object (FieldModifier)
}
שדות
field

string

מציינים את שם השדה שעליו רוצים להחיל את המגביל.

modifier

object (FieldModifier)

מציינים את מגביל ההתאמה שרוצים להחיל על השדה התואם.

FieldSuffix

סיומות של שדות חלות על כל השדות שיש להם סיומת.

השדות יותאמו אם הם מסתיימים במקף (-) או בקו תחתון (_) ואחריהם הסיומת.

הסיומות לא תלויות-רישיות.

המשתנה FieldSuffix מוחל אחרי המשתנה FieldOverride.

לדוגמה, מגדיר השינוי שמוגדר לסיומת NID יחול על השדה שנקרא FLD-NID אבל לא על השדה FUNID.

ייצוג ב-JSON
{
    "is_inverse": boolean,
    "modifier": object (FieldModifier),
    "suffix": string
}
שדות
is_inverse

boolean

מציינים אם המגדיר הוא מגדיר שדה הפוך או לא. משנה שדה הפוך מחיל את המשנה על שדה אחר שיש לו שם זהה לשם של השדה עם המשנה, בלי המשנה. לדוגמה, אם השדות FLD-NID ו-FLD קיימים באותה רשומה, המשתנה יחול על FLD.

כשמשתמשים בשינוי שדה הפוך, אפשר להשתמש במזהה המיוחד $self בכל פעם שאפשר להשתמש בשם שדה כדי להתייחס לשדה עם הסיומת.

לדוגמה, כדי ליצור שדה של אינדיקטור ערך null, אפשר להשתמש במגדיר השדה null_if כשהערך של is_inverse מוגדר כ-true. מידע נוסף זמין בכתובת NullIf.

modifier

object (FieldModifier)

מציינים את המגדיר שרוצים להחיל על השדות התואמים.

suffix

string

השדה עם הסיומת הזו יכלול את המגביל.

שינוי

טרנספורמציות של תצוגות משמשות לשינוי הקשר בין הטבלה לבין קובץ ה-QSAM. הטרנספורמציות תמיד מנוסחות מנקודת המבט של הנתונים. הקונספט דומה לטבלאות תצוגה ב-BigQuery.

ייצוג ב-JSON
{
    "exclude": object (Exclude),
    "move": object (Move),
    "rename": object (Rename),
    "split": object (Split),
    "target_table": string,
    "unnest": object (Unnest)
}
שדות
exclude

object (Exclude)

move

object (Move)

rename

object (Rename)

split

object (Split)

target_table

string

זה שינוי אופציונלי. מציינים את שם טבלת היעד (תצוגה) שעליה רוצים להחיל את הטרנספורמציה.

כברירת מחדל, הטרנספורמציות חלות על הטבלה הראשית (_main) או באופן גלובלי, אם רלוונטי. אם יש לכם תצוגות מפוצלות (שנוצרו על ידי טרנספורמציה של split), אתם יכולים לטרגט טבלה מפוצלת ספציפית לפי השם שלה.

הערה: אי אפשר לטרגט טרנספורמציות מפוצלות, ותופיע שגיאה אם target_table מוגדר.

unnest

object (Unnest)

אל תכלול

להחריג שדה מהטבלה שנוצרת, אבל עדיין לבצע פענוח או קידוד. האפשרות הזו שימושית כשלא צריך להעביר את השדה לטבלה, אבל הוא נדרש להמרת קידוד. לדוגמה, אפשר להשמיט מהטבלה שדות של אינדיקטורים מסוג null או שדות של אורך.

כדי לעקוף את ההמרה לחלוטין, צריך להחיל את הערך לשינוי המילוי.

ייצוג ב-JSON
{
    "field": string
}
שדות
field

string

מציינים את השדה שרוצים להחריג.

העברה

העברת שדה ברשומה.

ייצוג ב-JSON
{
    "field": string,
    "offset": int
}
שדות
field

string

מציינים את השדה שרוצים להעביר.

offset

int

מציינים את מספר המקומות שצריך להזיז את השדה, קדימה או אחורה.

שנה שם

שינוי השם של שדה אחד או יותר על סמך התאמה של ביטוי רגולרי.

לדוגמה, כדי להחליף את כל המקפים בקו תחתון, משתמשים בפורמט ה-JSON הבא: {"find": "\\-", "replace":"_"}.

ייצוג ב-JSON
{
    "find": string,
    "replace": string
}
שדות
find

string

מציין תבנית של ביטוי רגולרי ב-Java כדי לזהות את השדות שצריך לשנות את השם שלהם.

התבנית מותאמת לשם השדה המלא. אם התבנית תואמת לחלק כלשהו בשם השדה, השדה נחשב כתואם.

דוגמאות:

  • ‫"\\-" (תואם לכל שדה שמכיל מקף)
  • "^field_name$" (התאמה לשדות עם השם המדויק field_name)
  • "^field_(.*)$" (תואם לכל השדות שמתחילים ב-field_ ומתעד את השאר)
  • ‫"part_of_name" (תואם לכל שדה שמכיל את הערך part_of_name)

replace

string

מציין את השם החדש של השדות התואמים.

אפשר להשתמש בקבוצות לחילוץ מהביטוי הרגולרי find במחרוזת replace באמצעות הפניות לאחור כמו $1, $2. כך אפשר לבצע טרנספורמציות מורכבות יותר על סמך חלקים משם השדה המקורי.

דוגמאות:

  • "new_field_name" (החלפת השדה בשם קבוע)
  • "new_$1" (משתמש בקבוצה הראשונה לחילוץ מ-find)
  • "${1}_new" (תחביר חלופי לקבוצות לחילוץ)
  • "prefix_$1_suffix" (משתמש בקבוצה לחילוץ ומוסיף קידומות/סיומות)

פיצול

ייצוג ב-JSON
{
    "field": string,
    "foreign_key": string,
    "primary_key": string
}
שדות
field

string

מציינים את השדה שרוצים לפצל.

foreign_key

string

מציינים את שם השדה שיתווסף לסכימה החדשה שבה יאוחסן ערך המפתח הראשי. אם לא מציינים שם, המערכת משתמשת בשם של המפתח הראשי.

primary_key

string

מציינים את שם השדה שישמש כמפתח ראשי.

Unnest

מבטלים את ההטמעה של השדה.

ייצוג ב-JSON
{
    "field": string,
    "format": string
}
שדות
field

string

מציינים את השדה שרוצים לבטל את ההטמעה שלו.

format

string

מציינים את הפורמט של השדה החדש.

השדה ${parent} יפורסם עם שם השדה שבוטל הקינון שלו.

במבנים לא מקוננים, ${field} מוחלף בשם של שדה המבנים.

במערכים וברשימות לא מקוננים, ${index} מוחלף באינדקסים של המערך.

טיפוסים בני מנייה (enum)

BinarySignedness

טיפוסים בני מנייה (enum)
SIGNED המספר הבינארי הוא מספר עם סימן.
UNSIGNED המספר הבינארי לא חתום.
UNSPECIFIED נסו להסיק את החתימה מהשרשרת הקיימת.

DecimalLogicalType

סוג לוגי לשימוש בשדה עשרוני.

טיפוסים בני מנייה (enum)
AUTO השתמשו בסוג האופטימלי ביותר בהתאם לקנה המידה ולרמת הדיוק.
BIG_DECIMAL שומרים את הערך כמספר עשרוני לא מוגבל. זו האפשרות האיטית ביותר, אבל היא תומכת בכל מספר עשרוני בכל רמת דיוק ובכל קנה מידה.
BIG_INTEGER שומרים את הערך כמספר שלם לא מוגבל. זו האפשרות האיטית ביותר, אבל היא תומכת בכל מספר שלם בכל רמת דיוק.
DECIMAL64 משתמשים ב-64 ביטים כדי לאחסן את הערך. המשתנה הזה פועל רק על מספרים שהדיוק שלהם קטן מ-18 או שווה ל-18.
LONG משתמשים ב-64 ביטים כדי לאחסן את הערך. המשתנה הזה פועל רק על מספרים שהדיוק שלהם קטן מ-18 או שווה ל-18, והקנה מידה הוא 0.

PackedDecimalNegativeNibble

טיפוסים בני מנייה (enum)
NIBBLE_B ברירת המחדל היא להשתמש ב-x'B'.
NIBBLE_D משתמשים ב-x'D' לציון סימן שלילי.

SchemaValidationMode

מציינים את מצב אימות הסכימה שבו רוצים להשתמש במהלך הידור ה-copybook. במצב הזה המערכת בודקת את התאימות לפורמט נתונים ספציפי של היעד.

טיפוסים בני מנייה (enum)
BIG_QUERY מצב אימות סכימה לתאימות עם BigQuery. במצב הזה, האימות שמוגדר כברירת מחדל מורחב כדי לוודא שהסכימה של ה-copybook תואמת לסוגי הנתונים של BigQuery.
DEFAULT מצב ברירת המחדל לאימות הסכימה. במצב הזה המערכת מוודאת ששמות השדות ב-copybook הם ייחודיים.
MYSQL מצב אימות סכימה לתאימות ל-MySQL. במצב הזה, האימות שמוגדר כברירת מחדל מורחב כדי לוודא שהסכימה של ה-copybook תואמת לסוגי הנתונים של MySQL.
POSTGRES מצב אימות סכימה לתאימות ל-PostgreSQL. במצב הזה, האימות שמוגדר כברירת מחדל מורחב כדי לוודא שהסכימה של ה-copybook תואמת לסוגי הנתונים של PostgreSQL.

ZonedDecimalEncoding

מציינים את הקידוד שבו צריך להשתמש כשמפענחים או מקודדים שדה עשרוני עם אזורים.

טיפוסים בני מנייה (enum)
ASCII צריך להשתמש בקידוד ASCII.
EBCDIC צריך להשתמש בקידוד EBCDIC.
UNSPECIFIED שומרים על הקידוד שצוין בשרשרת המגבילים. אם לא מציינים מקש צירוף, המערכת משתמשת ב-EBCDIC.