הכלי Mainframe Connector מבצע טרנסקוד של קבצים שטוחים בפורמט Queued Sequential Access Method (QSAM) לפורמטים תואמים, וגם להפך, באמצעות הפקודות qsam. Google Cloud בנוסף, Mainframe Connector תומך בטרנסקוד של קובצי Virtual Storage Access Method (VSAM) לפורמטים תואמים באמצעות הפקודה vsam decode. Google Cloudהפקודות qsam ו-vsam מבצעות את פעולות הקידוד הבאות:
- הפקודה
qsam decodeמפענחת קבצים שטוחים של QSAM לפורמטים שתואמים ל- Google Cloud . - הפקודה
qsam encodeמצפינה נתונים Google Cloud למחשב המרכזי. - הפקודה
vsam decodeמפענחת קבצי VSAM לפורמטים שתואמים ל- Google Cloud .
הפעולות האלה מבצעות טרנספורמציות סימטריות, כלומר הן מעבירות את אותם נתונים אל Google Cloudוממנו. אפשר להגדיר את המבנה של קובץ QSAM או VSAM בקובץ copybook באמצעות הגדרת מבנה הנתונים של COBOL. אפשר גם להגדיר טרנספורמציות מתקדמות באמצעות קובץ ההגדרות של הטרנסקודר של Mainframe Connector. בתרשימים הבאים מפורטות הפעולות האלה.
בדף הזה מופיעה סקירה כללית של תהליך הטרנסקוד באמצעות הפקודות qsam decode, qsam encode ו-vsam decode, הסוגים הפיזיים והלוגיים של נתוני המחשב המרכזי ומיפוי הסוגים של ORC (עמודות שורות אופטימליות) ו-BigQuery.
סוגים פיזיים
סוגים פיזיים מגדירים את הפריסה של נתוני השדות בדיסק. סוגים פיזיים מומרים לסוגים לוגיים של Mainframe Connector, שאפשר למפות אותם לסוגי מסדי נתונים (ORC או BigQuery).
שדות אלפאנומריים
שדות אלפאנומריים משמשים לעיבוד מחרוזות אלפאנומריות. הנתונים נחשבים לסדרה של תווים ונשמרים כמחרוזות עם קידוד ספציפי, למשל, Extended Binary Coded Decimal Interchange Code (EBCDIC).
תהליך הטרנסקודינג לא מסתיים אם מתרחשות שגיאות במהלך הקידוד או הפענוח של שדות אלפאנומריים. במקום זאת, התו SUB
של הקידוד מוצב במיקום שבו התרחשה השגיאה, ותהליך הקידוד מחדש נמשך.
| סמלים של תמונות | מאפייני תמונה | סוג לוגי |
|---|---|---|
| A, B, G, N, U, X, 9 | DISPLAY, DISPLAY-1, NATIONAL, UTF-8 | String |
דוגמה
01 REC 02 STR PIC X(10) 02 NATIONAL PIC N(10) 02 UTF8 PIC U(1) USAGE UTF-8
פורמט הקידוד
שדות אלפאנומריים מקודדים באופן הבא:
- שדות X מוגדרים כברירת מחדל לקידוד EBCDIC
- שדות לאומיים (N) מוגדרים כברירת מחדל לקידוד Unicode Transformation Format 16-bit (UTF-16 BE)
- שדות UTF8 מוגדרים כברירת מחדל לקידוד Unicode Transformation Format-8 (UTF-8)
Mainframe Connector תומך ברוב הקידודים של ערכות תווים של בייט יחיד (SBCS) וערכות תווים של שני בייטים (DBCS). במקרה הצורך, אפשר גם להגדיר קידוד SBCS בהתאמה אישית.
שדות בינאריים (חישוביים)
שדות בינאריים מאוחסנים כמספרים שלמים מסוג big-endian עם סימן או ללא סימן. Mainframe Connector תמיד שומר שדות בינאריים באופן לוגי כמספרים שלמים חתומים בני 64 ביט. לכן, כשמזינים ערכים מסוג unsigned long, צריך להשתמש רק ב-63 הסיביות התחתונות. אחרת, תהליך הטרנסקוד ייכשל.
| סמלים של תמונות | מאפייני תמונה | סוג לוגי |
|---|---|---|
| S, 9 | COMP, COMPUTATIONAL | Long (מספר שלם חתום של 64 ביט) |
דוגמה
01 REC 02 INT PIC S9(8) COMP
שדות הקסדצימליים של נקודה צפה (COMP-1, COMP-2)
יש תמיכה מלאה בשדות של נקודה צפה הקסדצימלית (HFP). Mainframe Connector משתמש בפורמטים של דיוק יחיד ודיוק כפול בשדות HFP.
| סמלים של תמונות | מאפייני תמונה | סוג לוגי |
|---|---|---|
| COMP-1, COMP-2 | Double (נקודה צפה עם סימן, 64 ביט) |
דוגמה
01 REC 03 HFP-SINGLE COMP-1. 03 HFP-DOUBLE COMP-2.
שדות עשרוניים ארוזים (COMP-3)
יש תמיכה מלאה בשדות של מספרים עשרוניים ארוזים. במהלך תהליך הקידוד מחדש, Mainframe Connector בוחר את הסוג הלוגי עם הביצועים הכי טובים על סמך הדיוק והקנה מידה שצוינו.
| סמלים של תמונות | מאפייני תמונה | סוג לוגי |
|---|---|---|
| S, 9, V | COMP-3 | Long (מספר שלם חתום של 64 ביט), BigInteger, Decimal64, BigDecimal |
דוגמה
01 REC 02 DEC PIC S9(2)V9(8) COMP-3
שדה עשרוני עם אזור (DISPLAY)
יש תמיכה מלאה בשדות עשרוניים עם אזורים. במהלך תהליך הקידוד מחדש, Mainframe Connector בוחר את הסוג הלוגי עם הביצועים הכי טובים על סמך הדיוק והקנה מידה שצוינו.
| סמלים של תמונות | מאפייני תמונה | סוג לוגי |
|---|---|---|
| S, 9, V | רשת המדיה | Long (מספר שלם חתום של 64 ביט), BigInteger, Decimal64, BigDecimal |
דוגמה
01 REC 02 DEC PIC S9(2)V9(8) DISPLAY
רשימות (OCCURS)
רשימות הן אוספים מסודרים של רכיבים מאותו סוג. Mainframe Connector תומך בסוגי הרשימות הבאים:
רשימות קבועות
משתמשים ברשימות קבועות כשמספר הפריטים (ספירת הפריטים) שיהיו חלק מהרשימה ידוע מראש, והמספר הזה תמיד נשאר זהה. הפריטים ברשימה קבועה יכולים להיות בגודל משתנה.
בספר העתקה, רשימות קבועות מוגדרות כך:
01 REC.
02 LIST OCCURS 5 TIMES PIC X(1).
02 FLD PIC X(5).
בתמונה הבאה מוצג הפריסה של רשימה קבועה עם 5 פריטים.
רשימות דינמיות
משתמשים ברשימות דינמיות כשמספר הפריטים המקסימלי שיהיו חלק מהרשימה ידוע מראש. עם זאת, מספר הפריטים בפועל לא ידוע ותלוי בשדה אחר. הפריטים ברשימה דינמית יכולים להיות בגודל משתנה.
המאפיינים של רשימות דינמיות הם:
- אפשר להמיר את שדה האורך למספר שלם בלי לאבד את הדיוק.
- שדה האורך חייב להיות בהיקף.
- מספר הפריטים המינימלי לא נאכף במהלך תהליך הקידוד מחדש.
רשימות דינמיות מוגדרות בקובץ העתקה באופן הבא:
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).
בתמונה הבאה מוצג הפריסה של רשימה דינמית עם מספר מקסימלי של חמישה פריטים.
רשימות דינמיות ארוזות
רשימות דינמיות דחוסות משמשות כשהמספר המקסימלי של הפריטים שיהיו חלק מהרשימה תלוי בשדה אחר, והפריטים דחוסים.
המאפיינים של רשימות דינמיות דחוסות הם:
- אפשר להמיר את שדה האורך למספר שלם בלי לאבד את הדיוק.
- שדה האורך חייב להיות בהיקף.
- מספר הפריטים המינימלי לא נאכף במהלך תהליך הקידוד מחדש.
רשימות דינמיות דחוסות מוגדרות בקובץ העתקה באופן הבא:
01 REC.
02 LEN PIC S9(2) BINARY.
02 LIST OCCURS UNBOUNDED
DEPENDING ON LEN PIC X(1).
02 FLD PIC X(5).
בתמונה הבאה מוצגת פריסה של רשימה דינמית דחוסה.
הגדרות מחדש (REDEFINES)
הגדרות מחדש הן תכונה של COBOL שמאפשרת לאותם נתונים להיות בעלי כמה אפשרויות פענוח. במהלך תהליך הפענוח, הגדרות מחדש מופיעות כעמודות נוספות בטבלה שמתקבלת, והנתונים מפוענחים כמה פעמים.
המאפיינים של הגדרות מחדש הם:
- הגדרות מחדש של אותם נתוני בסיס לא נחשבות לשדות מקבילים, ולכן הן לא בטווח אחת של השנייה.
- שדות שהוגדרו מחדש מפוענחים כשהשדה הבסיסי מפוענח, ולא כשהם מוצהרים. השדה הבסיסי קובע גם את ההיקף של השדות שהוגדרו מחדש.
- לכל השדות שהוגדרו מחדש צריך להיות גודל זהה, והגודל שלהם צריך להיות קבוע. כלומר, אי אפשר להשתמש בשדות טקסט באורך משתנה ובשדות של רשימות דינמיות דחוסות בשדות שהוגדרו מחדש.
הגדרות מחדש מוגדרות בקובץ העתקה באופן הבא:
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).
בתמונה הבאה מוצגת הפריסה של שדה שהוגדר מחדש.
אפשר להשתמש בהגדרות מחדש בדרכים רבות, כולל הדרכים הנפוצות הבאות:
הצגת אותם נתונים בשתי דרכים שונות: זו הדרך הנפוצה ביותר לשימוש בהגדרות מחדש. במהלך תהליך הקידוד, הסדר שבו הנתונים מוזנים לא מוגדר, ולכן צריך לוודא שהנתונים ב-BigQuery ישמרו על השלמות שלהם כשמייצאים אותם.
דוגמה
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).שימוש באיחודים עם תגים: איחודים עם תגים הם דרך נפוצה להשתמש בהגדרות מחדש כשצריך רק אחת מהפרשנויות של נתוני רשומה כלשהי, בהתאם לשדה. אפשר להשתמש במצייני ערך null כדי לסמן פרשנויות לא נחוצות כ-null. הסיבה לכך היא שהערכות עצלות של מחווני null מונעות את הניתוח שלהם. המאפיינים של tagged unions הם:
- תהליך הקידוד נכשל אם מוגדרת יותר מהגדרה מחדש אחת.
- מיושמות רק בדיקות של שוויון ואי-שוויון.
דוגמה
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).אפשר להשתמש בדוגמה הבאה כדי להטמיע איחוד מתויג:
{ "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": {}} } ] }
סוגים לוגיים
כדי לבצע טרנסקוד של נתונים לפורמטים שונים ומפורמטים שונים, Mainframe Connector ממיר את כל הנתונים לייצוג ביניים (IR) שמבוסס על סוגים לוגיים. פורמטים של קלט ופלט מגדירים איך הנתונים מומרים לכל סוג לוגי וממנו. בטבלה הבאה מפורטים כל הסוגים הלוגיים שנתמכים על ידי Mainframe Connector.
| סוג לוגי | תיאור |
|---|---|
| BigDecimal | מייצג מספרים עשרוניים בכל קנה מידה ודיוק. |
| BigInteger | מייצג מספרים שלמים בכל גודל. |
| בייטים | מייצג מערך של בייטים בגדלים משתנים. |
| תאריך | מייצג תאריך ללא קשר לאזור זמן ספציפי. |
| Decimal64 | מייצג מספר עשרוני עם טווח שיכול להתאים למספר שלם חתום של 64 ביט בכל קנה מידה. |
| כפול | מייצג מספר בשיטת נקודה צפה עם דיוק כפול, כפי שמתואר ב-IEEE Standard for Floating-Point Arithmetic (IEEE 754). |
| רשימה | מייצג רשימה של פריטים מסוג מסוים. הרשימה יכולה להכיל מספר שרירותי של פריטים. |
| ארוכה | מייצג מספר שלם ב-64 סיביות עם סימן. |
| הקלטה | מייצג סדרה קבועה של שדות מסוגים שונים. |
| String | מייצג מחרוזת של תווים ב-Unicode שלא קשורים לקידוד ספציפי. אפשר לייצג כל מיקום תו (code point) תקין של Unicode. עם זאת, יכול להיות שאי אפשר לקודד חלק מהתווים בכל תהליכי הקידוד. מחרוזות לוגיות הן באורך משתנה. |
| חותמת הזמן | מייצג חותמת זמן שלא תלויה באזור זמן ספציפי. |
מיפוי סוג ORC
בטבלה הבאה מפורט המיפוי בין סוגים לוגיים של Mainframe Connector לבין סוגי ORC.
| סוג לוגי | סוג ה-ORC |
|---|---|
| BigDecimal | עשרוני |
| BigInteger | עשרוני |
| בייטים | blob בינארי |
| תאריך | תאריך |
| Decimal64 | decimal64 |
| כפול | float64 |
| רשימה | list |
| ארוכה | מספר שלם (bigint) ב-64 ביט |
| הקלטה | struct |
| String | מחרוזת מקודדת UTF-8 |
| חותמת הזמן | חותמת זמן (ללא אזור זמן מקומי) |
מיפוי סוגים ב-BigQuery
בטבלה הבאה מפורט המיפוי בין סוגים לוגיים של Mainframe Connector לבין סוגי נתונים ב-BigQuery.
| סוג לוגי | סוג נתונים ב-BigQuery | תגובות |
|---|---|---|
| BigDecimal | NUMERIC | |
| BigInteger | NUMERIC | |
| בייטים | BYTES | |
| תאריך | תאריך | |
| Decimal64 | NUMERIC | |
| כפול | FLOAT64 | |
| רשימה | ARRAY | אין תמיכה ברשימות מקוננות וברשימות של מפות. |
| ארוכה | INT64 | |
| הקלטה | STRUCT | כשאיחוד כולל רק וריאנט אחד, הוא מומר לשדה NULLABLE.
אחרת, איחוד מומר ל-RECORD עם רשימה של שדות NULLABLE.
שדות שאפשר להשאיר ריקים כוללים סיומות כמו field_0, field_1. רק לאחד מהשדות האלה מוקצה ערך כשקוראים את הנתונים. |
| String | מחרוזת | |
| חותמת הזמן | TIMESTAMP |
היקף השדה
שדה נחשב בטווח של שדה אחר אם הוא אחד מהשדות הבאים:
- שדה מקביל שמוגדר לפני השדה שדורש אותו.
- שדה ברשומת אב שמוגדר לפני השדה שדורש אותו.