אפשר להגדיר את רכיב ה-transcoder של Mainframe Connector על ידי הוספת ההגדרות הנדרשות בקובץ JSON.
הקובץ הזה נקרא קובץ התצורה של הטרנסקודר. צריך להגדיר את ההגדרה כמו שמתואר בקטע הגדרה.
הפקודות qsam encode ו-qsam decode משתמשות בקובץ ההגדרות של הטרנסקודר כדי לבצע טרנסקוד של נתונים.
בדף הזה מתוארות הדרכים השונות שבהן אפשר להגדיר את רכיב הטרנסקודר של Mainframe Connector.
הגדרות אישיות
האובייקט Configuration הוא הבסיס של הגדרת המרת הקידוד.
הוא מכיל את כל אפשרויות ההגדרה של הטרנסקודר.
| ייצוג JSON |
|---|
{ "defaults": object ( |
| שדות | |
|---|---|
defaults |
מציינים משנים של שדות ברירת מחדל לאבות-טיפוס של Cobol. |
field_overrides |
מציינים שינויים בשדות. |
field_suffixes |
מציינים סיומות לשדות. |
header_records_to_skip |
מציינים את מספר הרשומות הראשונות שרוצים לדלג עליהן. |
record_filter_condition |
מציינים תנאי סינון לרשומות. המסנן מבוסס על קבוצת משנה של Common Expression Language (CEL) ותומך באפשרויות הבאות:
דוגמה:
|
schema_validation_mode |
מציינים את מצב אימות הסכימה. |
transformations |
מציינים את הטרנספורמציות של השדות. |
DefaultsSection
אפשר להשתמש באובייקט DefaultsSection כדי לציין שינויים שמוגדרים כברירת מחדל לפי סוגי cobol.
השינויים האלה מתבצעים לפני שינויים של סיומות או שינויים שנעשים באופן ידני.
| ייצוג JSON |
|---|
{ "alpha_numeric_display": object ( |
| שדות | |
|---|---|
alpha_numeric_display |
מציינים ערכי ברירת מחדל לשדות אלפאנומריים (PIC X). |
binary |
מציינים ערכי ברירת מחדל לשדות של מספרים בינאריים (COMP). |
dbcs |
ברירת המחדל לשדות dbcs (DISPLAY-1). |
hexadecimal_floating_point |
ברירת המחדל לשדות של נקודה צפה הקסדצימלית (COMP-1, COMP-2). |
national |
מציינים ערכי ברירת מחדל לשדות לאומיים (PIC N). |
numeric_display |
מציינים ערכי ברירת מחדל לשדות של תצוגה מספרית (עשרוני אזורי). |
packed_decimal |
מציינים ערכי ברירת מחדל לשדות של מספרים עשרוניים ארוזים (COMP-3). |
utf8 |
מציינים את ברירות המחדל לשדות UTF-8 (PIC U). |
FieldModifier
משנה שדה מאפשר לשנות את הקידוד או הפענוח של שדה ספציפי. חשוב לזכור שלא כל שינויי ההגדרות ניתנים להחלה על כל השדות. מידע נוסף מופיע במסמכי התיעוד של שינויי ההרשאות הספציפיים.
| ייצוג JSON |
|---|
{ "binary": object ( |
| שדות | |
|---|---|
binary |
ההגדרה הזו מחליפה את הגדרת ברירת המחדל בשדות מספריים בינאריים. |
bytes |
השדה מטופל כרצף גולמי של בייטים, בלי להתייחס למידע קודם על הסוג. |
chain |
שרשור של כמה משנים להחלה ברצף. |
decode_as_null |
הגדרה של אופן הפענוח של ערכי null. |
encode_null_as |
הגדרה של אופן הקידוד של ערכי null. |
filler |
השדה לא יעבור עיבוד ולא ייכלל בפלט. |
format_date |
עיצוב שדה מחרוזת כתאריך. |
format_timestamp |
הפונקציה מעצבת שדה מחרוזת כחותמת זמן. |
hfp |
מפרשת את השדה כמספר הקסדצימלי בשיטת נקודה צפה (HFP). |
null_if |
הגדרת השדה כ-null באופן מותנה על סמך הערך של שדה אחר. |
null_if_empty |
אם התוכן של השדה נחשב ריק, הפונקציה מגדירה את השדה כ-null. |
null_if_invalid |
השדה מוגדר כ-null אם מתרחשת שגיאת המרה, כדי למנוע חריגה של רשומה. |
packed_decimal |
המדיניות הזו עוקפת את הגדרת ברירת המחדל של שדות עשרוניים ארוזים. |
string |
ביטול הגדרת ברירת המחדל של שדות מחרוזת. |
varlen |
מגדירים את הרשומה כשדה באורך משתנה. |
zoned_decimal |
ההגדרה הזו מבטלת את הגדרת ברירת המחדל של שדות עשרוניים מחולקים לאזורים. |
בינארי
התעלמות מכל רכיבי השינוי הקודמים והתייחסות לשדה הזה כמספר בינארי.
| ייצוג JSON |
|---|
{ "signedness": enum ( |
| שדות | |
|---|---|
signedness |
הסימן של המספר. |
בייטים
השדה מטופל כרצף גולמי של בייטים. המשנה הזה מבטל כל מידע קודם על סוג, וגורם לנתוני הבייטים הגולמיים של השדה להישמר כמו שהם, ללא קידוד תווים ספציפי או פרשנות מספרית. אפשר להחיל את שינוי המאפיין הזה על כל שדה, בלי קשר לסוג או לגודל המקוריים שלו.
מזינים אובייקט JSON ריק באופן הבא:
| ייצוג JSON |
|---|
{ |
DecodeAsNull
הגדרה של האופן שבו ערכי null מתפרשים במהלך תהליך הפענוח. מכיוון ש-COBOL לא תומכת באופן מובנה בערכי null, הפרמטר הזה מציין אילו ערכים צריך להתייחס אליהם כאל ערכי null.
| ייצוג JSON |
|---|
{ "hex_bytes": string, "values": string |
| שדות | |
|---|---|
hex_bytes |
רשימה של ייצוגים הקסדצימליים של בייט יחיד.
אם שדה מכיל חזרות של אחד מהבייטים האלה, הוא נחשב כ-null.
לדוגמה, שימוש ב- |
values |
רשימה של ייצוגי מחרוזות. אחרי הפענוח הראשוני של השדה לפורמט מחרוזת, אם התוכן של השדה תואם לאחד מהערכים האלה, הוא יטופל כערך null. |
EncodeNullAs
הגדרה של האופן שבו ערכי null מיוצגים במהלך תהליך הקידוד.
| ייצוג JSON |
|---|
{ "hex_byte": string, "value": string |
| שדות | |
|---|---|
hex_byte |
קידוד רצף הבייטים הספציפי הזה (שמיוצג כמחרוזת הקסדצימלית)
כשהערך של מקור הוא null. לדוגמה, |
value |
קידוד הערך הספציפי הזה כשערך המקור הוא null. מוודאים שהמחרוזת תקינה לסוג השדה. |
Filler
מציין שהמערכת תתעלם משדה במהלך העיבוד. השדה לא יפוענח מהקלט או יקודד לפלט, והוא לא ייכלל בסכימה ובטבלת הנתונים שיתקבלו במהלך הפענוח. אפשר להחיל את משנה ה-modifier הזה על כל שדה עם גודל סטטי ידוע.
מזינים אובייקט JSON ריק באופן הבא:
| ייצוג JSON |
|---|
{ |
FormatDate
מעצבים שדה מחרוזת או שדה מספרי כתאריך באמצעות אחד מהפורמטים הנתמכים. אפשר להחיל את שינוי הגודל הזה רק על שדות בגודל מסוים. בשדות מספריים, הם מומרים באופן דינמי לייצוג המחרוזת שלהם (לא כולל סמני סימן) לפני העיצוב. ההנחה היא שערכי התאריכים הם חיוביים. המערכת לא תומכת בתאריכים מספריים שליליים, והניתוח שלהם ייכשל. במהלך תהליך הפענוח, הפורמטים נבדקים לפי הסדר עד שאחד מהם תואם למחרוזת. במהלך תהליך הקידוד, המערכת משתמשת בפורמט הראשון ומתעלמת מכל השאר.
| ייצוג JSON |
|---|
{ "formats": object ( |
| שדות | |
|---|---|
formats |
רשימה של פורמטים של תאריך. |
DateTimeFormat
הגודל והתבנית שבהם ייעשה שימוש בהמרת השדה לתאריך.
| ייצוג JSON |
|---|
{ "pattern": string, "size": int |
| שדות | |
|---|---|
pattern |
מציינים את התבנית של מעצב התאריכים. מידע נוסף על תבניות מעצב תקינות זמין במאמר בנושא Class DateTimeFormatter. |
size |
מציינים את הגודל של השדה שהתבנית הזו חלה עליו. |
FormatTimestamp
מפרמטים מחרוזת לחותמת זמן באמצעות אחד מהפורמטים שצוינו. אפשר להחיל את ההגדרה הזו רק על שדות בגודל מסוים. במהלך הפענוח, הפורמטים נבדקים לפי הסדר עד שאחד מהם תואם למחרוזת. במהלך הקידוד, המערכת תשתמש בפורמט הראשון ותתעלם מכל השאר.
| ייצוג JSON |
|---|
{ "formats": object ( |
| שדות | |
|---|---|
formats |
רשימה של פורמטים של חותמות זמן. |
HFP
מגדירים את השדה הזה כ-Hexadecimal Floating-Point.
מזינים אובייקט JSON ריק באופן הבא:
| ייצוג JSON |
|---|
{ |
ModifierChain
מציינים שרשרת של משנים כדי להחיל כמה משנים ברצף. השינויים מוחלים לפי הסדר שבו הם צוינו.
| ייצוג JSON |
|---|
{ "modifiers": object ( |
| שדות | |
|---|---|
modifiers |
מציינים את רשימת מאפייני השינוי שרוצים להחיל. |
NullIf
הגדרת שדה כ-null אם תנאי מסוים מתקיים. חובה לציין את null_value או את non_null_value או את שניהם.
כדי ליצור שדה של מציין ערך null, אפשר להשתמש ב-FieldSuffix עם משנה שדה null_if ולהגדיר את is_inverse ל-true, כמו בדוגמאות הבאות:
דוגמה: Null-indicator
כדי ליצור שדה של מציין ערך null, אפשר להשתמש במגדיר השדהnull_if באופן הבא.
{
"field_suffixes": [
{
"suffix": "NID",
"is_inverse": true,
"modifier": {
"null_if": {
"null_value": "?",
"target_field": "$self"
}
}
}
]
}
NID יכולים להיות אינדיקטורים של ערך null, כמו שמוצג בקטע הקוד הבא:
01 REC. 02 FIELD PIC X(10). 02 FIELD-NID PIC X(1).
דוגמה: מחוון בינארי של ערך null
כדי ליצור שדהbinary null-indicator, אפשר להשתמש במגדירי השדות 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.
דוגמה: Bytes null-indicator
כדי ליצור שדה של מציין ערךbytes null, אפשר להשתמש במגדירי השדות 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 יכולים לשמש כbytes מציין ערך null באמצעות אותו קובץ העתקה מהדוגמה הקודמת.
| ייצוג JSON |
|---|
{ "non_null_value": string, "non_null_values": string, "null_value": string, "null_values": string, "target_field": string |
| שדות | |
|---|---|
non_null_value |
אם מציינים ערך, והערך |
non_null_values |
אם מציינים את הערך הזה, והערך |
null_value |
אם מציינים ערך, אם |
null_values |
אם מציינים ערך, אם |
target_field |
מציינים את השדה שרוצים לבדוק את הערך שלו. השדה חייב להיות בהיקף. כדי לגשת לשדות מוטמעים, אפשר להשתמש בסימון הנקודות (למשל, GROUP.FIELD). |
NullIfEmpty
אם כל הבייטים בשדה הם 0, צריך להגדיר את השדה כ-null.
מזינים אובייקט JSON ריק באופן הבא:
| ייצוג JSON |
|---|
{ |
NullIfInvalid
הערך יטופל כ-null אם הטרנסקוד לא יצליח.
אפשר להחיל את שינוי הגודל הזה רק על שדות בגודל מסוים.
כברירת מחדל, אם פענוח של שדה נכשל, הרשומה כולה מועברת למערך הנתונים של השאריות (שגיאות) ומוחרגת מהפלט, בעוד ששאר הטעינה מסתיימת עם הרשומות התקינות.
כשמגדירים את התוסף null_if_invalid, Mainframe Connector שומר את הרשומה הלא תקינה ומגדיר את השדה הזה כ-null.
משתמשים בו רק כשרוצים לשמור שורות כאלה עם ערך null – לא רק כדי שהטעינה תצליח, כי ברירת המחדל כבר מדלגת על הרשומות הבעייתיות.
המערכת מתעלמת מהשגיאה והיא לא נרשמת במערך הנתונים של העודפים.
במהלך תהליך הפענוח, הערך של השדה הזה יהיה null עבור הרשומה הזו.
במהלך תהליך הקידוד, אם אי אפשר לכתוב את הנתונים, השדה כולו יתמלא בבייטים של ערך null.
מזינים אובייקט JSON ריק באופן הבא:
| ייצוג JSON |
|---|
{ |
PackedDecimal
מגדירים את השדה הזה ל-PackedDecimal.
| ייצוג JSON |
|---|
{ "logical_type": enum ( |
| שדות | |
|---|---|
logical_type |
ביטול הסוג הלוגי. כברירת מחדל, Mainframe Connector משתמש בסוג הלוגי האופטימלי על סמך הדיוק והקנה מידה. |
negative_sign_nibble |
מציין את הניבל שמשמש לסימנים שליליים. גם x'B' וגם x'D' הם סימני מינוס תקינים, אבל יכול להיות שבמערכות או באפליקציות מסוימות של מחשבי מיינפריים יש מוסכמה שדורשת שימוש באחד מהם ולא בשני. |
String
הגדרת האפשרויות השונות שקשורות לפענוח ולקידוד של מחרוזות. אפשר להחיל את הפונקציה רק על שדה מחרוזת.
| ייצוג JSON |
|---|
{ "encoding": string, "pad_char": string, "trim_suffix": boolean |
| שדות | |
|---|---|
encoding |
הקידוד שבו השדה מקודד. |
pad_char |
כשמגדירים ייצוא של מחרוזות ריפוד עם |
trim_suffix |
אם הערך הוא true, רווחים לבנים בסוף המחרוזת יימחקו. הפונקציה trim_suffix משפיעה רק על פענוח, והקידוד מתעלם ממנה. שימו לב: מחרוזות שמורכבות רק מרווחים יהפכו למחרוזות ריקות. |
VarLen
מייצג שדה באורך משתנה.
שדה באורך משתנה מכיל שלושה חלקים:
- פריט קבוצתי שמכיל שני שדות משנה.
- שדה בתוך פריט הקבוצה שמכיל את אורך נתוני העסקה.
- שדה בתוך פריט הקבוצה שמכיל את הנתונים.
השם של השדה באורך משתנה יהיה שם הקבוצה.
מזינים אובייקט JSON ריק באופן הבא:
| ייצוג JSON |
|---|
{ |
ZonedDecimal
הגדרת אפשרויות שונות שקשורות לקידוד ולפענוח של מספרים עשרוניים עם אזור. אפשר להחיל את שינוי הערך הזה רק על שדה עשרוני.
| ייצוג JSON |
|---|
{ "encoding": enum ( |
| שדות | |
|---|---|
encoding |
הקידוד שבו השדה מקודד. |
logical_type |
מציינים את הסוג הלוגי שבו יש להשתמש כשמפענחים או מקודדים את השדה. |
FieldOverride
עקיפה או שינוי של שרשרת הפענוח והקידוד בשדה שצוין.
| ייצוג JSON |
|---|
{ "field": string, "modifier": object ( |
| שדות | |
|---|---|
field |
מציינים את שם השדה שרוצים להחיל עליו את המשנה. |
modifier |
מציינים את המגביל שרוצים להחיל על שדה ההתאמה. |
FieldSuffix
סיומות השדות חלות על כל השדות שיש להם סיומת.
השדות תואמים אם הם מסתיימים במקף (-) או בקו תחתון (_) ואחריהם הסיומת.
הסיומות הן לא תלויות-רישיות.
המשנה FieldSuffix מוחל אחרי המשנה FieldOverride.
לדוגמה, השינוי שהוגדר לסיומת NID יחול על השדה שנקרא FLD-NID, אבל לא על השדה FUNID.
| ייצוג JSON |
|---|
{ "is_inverse": boolean, "modifier": object ( |
| שדות | |
|---|---|
is_inverse |
מציינים אם התוסף הוא תוסף שדה הפוך או לא.
משנה שדה הפוך מחיל את המשנה על שדה אחר עם אותו שם כמו השדה עם המשנה
בלי המשנה. לדוגמה, אם השדות כשמשתמשים במגדיר שדה הפוך, אפשר להשתמש במזהה המיוחד לדוגמה, כדי ליצור שדה של מציין ערך null, אפשר להשתמש במגדיר השדה |
modifier |
מציינים את שינוי המאפיין שרוצים להחיל על שדות תואמים. |
suffix |
המגביל יחול על השדה עם הסיומת הזו. |
שינוי
הטרנספורמציות של התצוגה משמשות לשינוי הקשר בין הטבלה לבין קובץ ה-QSAM. ההמרות תמיד מנוסחות מנקודת המבט של הנתונים. הקונספט דומה לטבלאות של תצוגות מפורטות ב-BigQuery.
| ייצוג JSON |
|---|
{ "exclude": object ( |
| שדות | |
|---|---|
exclude |
|
move |
|
rename |
|
split |
|
target_table |
זה שינוי אופציונלי. מציינים את שם טבלת היעד (התצוגה) שרוצים להחיל עליה את הטרנספורמציה. כברירת מחדל, טרנספורמציות חלות על הטבלה הראשית ( הערה: אי אפשר לטרגט טרנספורמציות של פיצול, ואם ההגדרה |
unnest |
|
אל תכלול
להחריג שדה מהטבלה שמתקבלת, אבל עדיין לבצע פענוח או קידוד. האפשרות הזו שימושית כשלא צריך להעביר את השדה לטבלה, אבל הוא נדרש להמרת קידוד. לדוגמה, אפשר להשמיט מהטבלה שדות של אינדיקטורים של ערכי null או של אורך.
כדי לדלג על הטרנסקוד לחלוטין, צריך להחיל את משנה המילוי.
| ייצוג JSON |
|---|
{ "field": string |
| שדות | |
|---|---|
field |
מציינים את השדה שרוצים להחריג. |
העברה
להעביר שדה ברשומה.
| ייצוג JSON |
|---|
{ "field": string, "offset": int |
| שדות | |
|---|---|
field |
מציינים את השדה שרוצים להעביר. |
offset |
מציינים את מספר המקומות שהשדה צריך לעבור קדימה או אחורה. |
שנה שם
משנים את השם של שדה אחד או יותר על סמך התאמה של ביטוי רגולרי.
לדוגמה, כדי להחליף את כל המקפים בקו תחתון, משתמשים בפורמט JSON הבא:
{"find": "\\-", "replace":"_"}.
| ייצוג JSON |
|---|
{ "find": string, "replace": string |
| שדות | |
|---|---|
find |
מציינים תבנית של ביטוי רגולרי ב-Java כדי לזהות את השדות שרוצים לשנות את השם שלהם. ההתאמה של התבנית מתבצעת מול השם המלא של השדה. אם התבנית תואמת לחלק כלשהו של שם השדה, השדה ייחשב כהתאמה. דוגמאות:
|
replace |
מציין את השם החדש של השדות התואמים. אפשר להשתמש בקבוצות לכידה מהביטוי הרגולרי דוגמאות:
|
פיצול
| ייצוג JSON |
|---|
{ "field": string, "foreign_key": string, "primary_key": string |
| שדות | |
|---|---|
field |
מציינים את השדה שרוצים לפצל. |
foreign_key |
מציינים את השם של השדה שיוסף לסכימה החדשה, שבה יאוחסן ערך המפתח הראשי. אם לא מציינים שם, המערכת משתמשת בשם של המפתח הראשי. |
primary_key |
מציינים את שם השדה שישמש כמפתח ראשי. |
Unnest
חילוץ השדה מהפריט שבתוכו הוצב.
| ייצוג JSON |
|---|
{ "field": string, "format": string |
| שדות | |
|---|---|
field |
מציינים את השדה שרוצים לבטל את הקינון שלו |
format |
מציינים את הפורמט החדש של השדה. השדה במבני struct לא מקוננים, במערכים וברשימות לא מקוננים, |
טיפוסים בני מנייה (enum)
BinarySignedness
| טיפוסים בני מנייה (enum) | |
|---|---|
SIGNED |
המספר הבינארי הוא מספר עם סימן. |
UNSIGNED |
המספר הבינארי לא חתום. |
UNSPECIFIED |
כדאי לנסות להסיק את סוג החתימה מהשרשרת הקיימת. |
DecimalLogicalType
הסוג הלוגי שבו ייעשה שימוש בשדה עשרוני.
| טיפוסים בני מנייה (enum) | |
|---|---|
AUTO |
משתמשים בסוג האופטימלי ביותר בהתאם לסולם ולדיוק. |
BIG_DECIMAL |
אחסון הערך כמספר עשרוני ללא גבול. זו האפשרות הכי איטית, אבל היא תומכת בכל מספר עשרוני בכל רמת דיוק ובכל קנה מידה. |
BIG_INTEGER |
אחסון הערך כמספר שלם ללא גבולות. זו האפשרות הכי איטית, אבל היא תומכת בכל מספר שלם בכל רמת דיוק. |
DECIMAL64 |
משתמשים ב-64 ביט כדי לאחסן את הערך. המשנה הזה פועל רק על מספרים שרמת הדיוק שלהם היא 18 או פחות. |
LONG |
משתמשים ב-64 ביט כדי לאחסן את הערך. המשנה הזה פועל רק על מספרים שרמת הדיוק שלהם קטנה מ-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. |