הפניה לפקודות qsam ו-vsam

הכלי 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. בתרשימים הבאים מפורטות הפעולות האלה.

פענוח נתוני מחשב מרכזי ל- Google Cloud
פענוח נתונים במחשב המרכזי ל- Google Cloud
Encode mainframe data from Google Cloud
קידוד נתונים Google Cloud במחשב המרכזי

בדף הזה מופיעה סקירה כללית של תהליך הטרנסקוד באמצעות הפקודות 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

היקף השדה

שדה נחשב בטווח של שדה אחר אם הוא אחד מהשדות הבאים:

  • שדה מקביל שמוגדר לפני השדה שדורש אותו.
  • שדה ברשומת אב שמוגדר לפני השדה שדורש אותו.