העברת נתונים שעברו טרנסקוד באופן מקומי במחשב המרכזי אל Google Cloud

בדף הזה מוסבר איך אפשר לבצע טרנסקוד של נתונים במחשב מרכזי באופן מקומי במחשב המרכזי לפורמט נתמך, ואז להעביר את התוכן ל-BigQuery. טרנסקוד הוא תהליך של המרת מידע מצורה אחת של ייצוג מקודד לצורה אחרת. בדף הזה מוסבר איך אפשר להשתמש ב-Mainframe Connector כדי להמיר נתונים מ-mainframe לפורמט אופטימלי של עמודות בשורות (ORC), ואז לשמור את הנתונים ב-Cloud Storage.

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

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

הפקודות qsam ו-vsam מספקות את היתרונות הבאים:

  • תמיכה בסוגי נתונים מורכבים, כולל פסוקית OCCURS (רשימות), פסוקית REDEFINES ורשומות מקוננות. מידע נוסף על סוגי הנתונים האלה זמין במאמרים בנושא qsam וvsam המרת קידוד.
  • תמיכה בהגדרת תהליך המרת הקידוד באמצעות קובץ הגדרות של המרת הקידוד. היכולת הזו מאפשרת גמישות רבה יותר בפענוח הנתונים ל- Google Cloud, ובקידוד הנתונים בחזרה למחשב המרכזי.
  • תמיכה ביצירה של מערך נתונים של שגיאות, שהוא טבלה של שגיאות המרת קידוד שאפשר להשתמש בה כדי לבדוק שגיאות.
  • תמיכה בפורמטים שונים של קלט ופלט. היכולת הזו מאפשרת לכם לטעון את הנתונים שלכם למחסני נתונים שונים וממחסני נתונים שונים.

לפני שמתחילים

מתקינים את Mainframe Connector בכל מערך נתונים שמחולק למחיצות במחשב מרכזי שרוצים להשתמש בו כספריית פרוצדורות (PROCLIB).

העברת נתונים שעברו המרה מקומית במחשב המרכזי אל Google Cloud

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

  1. קריאה וקידוד מחדש של מערך נתונים במחשב מרכזי, והעלאה שלו ל-Cloud Storage בפורמט ORC (לפורמטים אחרים שנתמכים רק על ידי הפקודות qsam או vsam, אפשר לעיין ב-TranscodeFormat). הטרנסקוד מתבצע במהלך הפעולות qsam decode,‏ vsam decode או gsutil cp (בהתאם לפקודה שתבחרו), שבהן קבוצת נתונים של קוד החלפה עשרוני בינארי מורחב של מחשב מרכזי (EBCDIC) מומרת לפורמט ORC ב-UTF-8 במהלך ההעתקה לקטגוריה של Cloud Storage.
  2. טוענים את מערך הנתונים לטבלה ב-BigQuery.
  3. (אופציונלי) מריצים שאילתת SQL בטבלת BigQuery.
  4. (אופציונלי) ייצוא נתונים מ-BigQuery בחזרה למחשב המרכזי.

בקטעים הבאים מוסבר בפירוט איך להעביר נתונים שעברו טרנסקוד מקומי במחשב המרכזי אל Google Cloud באמצעות הפקודות qsam או vsam והפקודה gsutil cp.

קידוד מחדש באופן מקומי באמצעות הפקודות qsam ו-vsam

כדי לבצע טרנסקוד לנתוני המיינפריים באופן מקומי במיינפריים באמצעות פקודות qsam או vsam, צריך לבצע את השלבים הבאים:

  1. יוצרים משימה לקריאת מערך הנתונים במחשב המרכזי ולקידוד מחדש שלו לפורמט ORC, כמו שמוצג בפקודה הבאה. קריאת הנתונים ממערך הנתונים INFILE, ופריסת הרשומות מ-COPYBOOK DD.

    אפשר לשנות את התנהגות ברירת המחדל של תהליך הקידוד מחדש של Mainframe Connector באמצעות קובץ תצורה של קידוד מחדש עם הארגומנט --transcode-configuration.

    • אם מערך הנתונים של הקלט הוא קובץ של שיטת גישה טורית בתור (QSAM) עם אורך רשומה קבוע או משתנה, משתמשים בפקודה הבאה:

      //STEP01 EXEC BQSH
      //INFILE DD DSN=<HLQ>.DATA.FILENAME,DISP=SHR
      //COPYBOOK DD DISP=SHR,DSN=<HLQ>.COPYBOOK.CPY
      //CONFIG DD DISP=SHR,DSN=<HLQ>.CONFIG.SETTINGS
      //STDIN DD *
      BUCKET=BUCKET_NAME
      qsam decode --copybook dd:COPYBOOK --transcode-configuration dd:CONFIG dd:INFILE gs://$BUCKET/tablename
      /*
      
    • אם מערך הנתונים של הקלט הוא קובץ VSAM (שיטת גישה לאחסון וירטואלי) עם אורך רשומה קבוע או משתנה, משתמשים בפקודה הבאה:

      //STEP01 EXEC BQSH
      //INFILE DD DSN=<HLQ>.DATA.FILENAME,DISP=SHR
      //COPYBOOK DD DISP=SHR,DSN=<HLQ>.COPYBOOK.CPY
      //CONFIG DD DISP=SHR,DSN=<HLQ>.CONFIG.SETTINGS
      //STDIN DD *
      BUCKET=BUCKET_NAME
      vsam decode --copybook dd:COPYBOOK --transcode-configuration dd:CONFIG dd:INFILE gs://$BUCKET/tablename
      /*
      

    מחליפים את BUCKET_NAME בשם של קטגוריית Cloud Storage שאליה רוצים להעתיק את הנתונים מהמחשב המרכזי.

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

    בדוגמה הזו, משתמשים ב-DD DataPath כדי לציין את הנתיב של קובץ ה-copybook, הקלט והגדרות הקידוד. אפשרויות נוספות מפורטות במאמר DataPath.

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

  2. יוצרים ושולחים משימת טעינה ב-BigQuery שטוענת מחיצות של קובץ ORC מ-tablename.orc אל MY_DATASET.MY_TABLE, באופן הבא.

    Example JCL
    //STEP02 EXEC BQSH
    //STDIN DD *
    BUCKET=BUCKET_NAME
    PROJECT=PROJECT_NAME
    bq load --project_id=$PROJECT \
      myproject:MY_DATASET.MY_TABLE \
      gs://$BUCKET/tablename.orc/*
    /*
    

    מחליפים את מה שכתוב בשדות הבאים:

    • BUCKET_NAME: השם של קטגוריית Cloud Storage שמכילה את קובצי ה-ORC שרוצים לטעון ל-BigQuery.
    • PROJECT_NAME: שם הפרויקט שבו רוצים להריץ את השאילתה.
  3. (אופציונלי) יוצרים ומגישים משימת שאילתה ב-BigQuery שמבצעת קריאת SQL מקובץ ה-DD של השאילתה. בדרך כלל השאילתה תהיה הצהרת MERGE או SELECT INTO DML שתגרום לשינוי של טבלה ב-BigQuery. שימו לב: Mainframe Connector מתעד את המדדים של המשימה, אבל לא כותב את תוצאות השאילתה לקובץ.

    אפשר להריץ שאילתות ב-BigQuery בכמה דרכים – בשורה, עם מערך נתונים נפרד באמצעות DD, או עם מערך נתונים נפרד באמצעות DSN.

    Example JCL
    //STEP03 EXEC BQSH
    //QUERY DD DSN=<HLQ>.QUERY.FILENAME,DISP=SHR
    //STDIN DD *
    PROJECT=PROJECT_NAME
    LOCATION=LOCATION
    bq query --project_id=$PROJECT \
    --location=$LOCATION/*
    /*
    

    מחליפים את מה שכתוב בשדות הבאים:

    • PROJECT_NAME: שם הפרויקט שבו רוצים להריץ את השאילתה.
    • LOCATION: המיקום שבו השאילתה תופעל. מומלץ להריץ את השאילתה במיקום שקרוב לנתונים.
  4. (אופציונלי) יוצרים ושולחים משימת ייצוא שמבצעת קריאת SQL מקובץ ה-DD של השאילתה, ומייצאת את מערך הנתונים שמתקבל למחשב מרכזי כקובץ בינארי.

    אפשר לשנות את התנהגות ברירת המחדל של תהליך הטרנסקוד של Mainframe Connector באמצעות קובץ תצורה של טרנסקודר עם הארגומנט --transcode-configuration.

    //STEP04 EXEC BQSH
    //OUTFILE DD DSN=<HLQ>.DATA.FILENAME,DISP=SHR
    //COPYBOOK DD DISP=SHR,DSN=<HLQ>.COPYBOOK.CPY
    //CONFIG DD DISP=SHR,DSN=<HLQ>.CONFIG.SETTINGS
    //QUERY DD DSN=<HLQ>.QUERY.FILENAME,DISP=SHR
    //STDIN DD *
    
    PROJECT=PROJECT_NAME
    qsam encode \
      dd:QUERY
      dd:OUTFILE
      --copybook dd:COPYBOOK
      --transcode-configuration dd:CONFIG
      --input-format=BIGQUERY \
      --input-parameter project_id=PROJECT_NAME \
      --input-parameter location=LOCATION/*
    /*
    

    מחליפים את מה שכתוב בשדות הבאים:

    • PROJECT_NAME: שם הפרויקט שבו רוצים להריץ את השאילתה.
    • LOCATION: המיקום שבו השאילתה תופעל. מומלץ להריץ את השאילתה במיקום שקרוב לנתונים.

    הנתונים מיוצאים למערך הנתונים OUTFILE DD. פריסת הרשומה מתוארת על ידי COPYBOOK DD. אפשרויות נוספות להגדרת נתיבים של copybook,‏ outfile וקידוד מחדש מפורטות במאמר DataPath.

קידוד מחדש באופן מקומי באמצעות הפקודה gsutil cp

כדי לבצע טרנסקוד לנתוני המיינפריים באופן מקומי במיינפריים באמצעות הפקודה gsutil cp, פועלים לפי השלבים הבאים:

  1. יוצרים משימה לקריאת מערך הנתונים במחשב המרכזי ולקידוד מחדש שלו לפורמט ORC, כמו שמוצג בפקודה הבאה. קריאת הנתונים ממערך הנתונים INFILE, ופריסת הרשומות מ-COPYBOOK DD.

    קבוצת הנתונים של הקלט חייבת להיות קובץ של שיטת גישה רציפה בתור (QSAM) עם אורך רשומה קבוע או משתנה.

    //STEP01 EXEC BQSH
    //INFILE DD DSN=<HLQ>.DATA.FILENAME,DISP=SHR
    //COPYBOOK DD DISP=SHR,DSN=<HLQ>.COPYBOOK.FILENAME
    //STDIN DD *
    BUCKET=BUCKET_NAME
    gsutil cp --replace gs://$BUCKET/tablename.orc
    /*
    

    מחליפים את BUCKET_NAME בשם של קטגוריית Cloud Storage שאליה רוצים להעתיק את הנתונים מהמחשב המרכזי.

    כדי להימנע מציון משתנים כמו מזהי פרויקטים ושמות של מאגרי מידע בכל פרוצדורת JCL, אפשר להוסיף אותם ל-BQSH PROCLIB ולהפנות אליהם בכמה פרוצדורות JCL כמשתני סביבה. הגישה הזו גם עוזרת לבצע מעבר חלק בין סביבות ייצור לסביבות שאינן ייצור, כי משתנים ספציפיים לסביבה מוגדרים ב-BQSH PROCLIB של הסביבה. רשימה מלאה של משתני הסביבה שנתמכים על ידי Mainframe Connector מופיעה במאמר משתני סביבה.

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

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

  2. יוצרים ושולחים משימת טעינה ב-BigQuery שטוענת מחיצות של קובץ ORC מ-tablename.orc אל MY_DATASET.MY_TABLE, באופן הבא.

    Example JCL
    //STEP02 EXEC BQSH
    //STDIN DD *
    BUCKET=BUCKET_NAME
    PROJECT=PROJECT_NAME
    bq load --project_id=$PROJECT \
      myproject:MY_DATASET.MY_TABLE \
      gs://$BUCKET/tablename.orc/*
    /*
    

    מחליפים את מה שכתוב בשדות הבאים:

    • BUCKET_NAME: השם של קטגוריית Cloud Storage שמכילה את קובצי ה-ORC שרוצים לטעון ל-BigQuery.
    • PROJECT_NAME: שם הפרויקט שבו רוצים להריץ את השאילתה.
  3. (אופציונלי) יוצרים ומגישים משימת שאילתה ב-BigQuery שמבצעת קריאת SQL מקובץ ה-DD של השאילתה. בדרך כלל השאילתה תהיה הצהרת MERGE או SELECT INTO DML שתגרום לשינוי של טבלה ב-BigQuery. שימו לב: Mainframe Connector מתעד את המדדים של המשימה, אבל לא כותב את תוצאות השאילתה לקובץ.

    אפשר להריץ שאילתות ב-BigQuery בכמה דרכים – בשורה, עם מערך נתונים נפרד באמצעות DD, או עם מערך נתונים נפרד באמצעות DSN.

    Example JCL
    //STEP03 EXEC BQSH
    //QUERY DD DSN=<HLQ>.QUERY.FILENAME,DISP=SHR
    //STDIN DD *
    PROJECT=PROJECT_NAME
    LOCATION=LOCATION
    bq query --project_id=$PROJECT \
    --location=$LOCATION/*
    /*
    

    מחליפים את מה שכתוב בשדות הבאים:

    • PROJECT_NAME: שם הפרויקט שבו רוצים להריץ את השאילתה.
    • LOCATION: המיקום שבו השאילתה תופעל. מומלץ להריץ את השאילתה במיקום שקרוב לנתונים.
  4. (אופציונלי) יוצרים ושולחים משימת ייצוא שמבצעת קריאת SQL מקובץ ה-DD של השאילתה, ומייצאת את מערך הנתונים שמתקבל למחשב מרכזי כקובץ בינארי.

    Example JCL
    //STEP04 EXEC BQSH
    //OUTFILE DD DSN=<HLQ>.DATA.FILENAME,DISP=SHR
    //COPYBOOK DD DISP=SHR,DSN=<HLQ>.COPYBOOK.FILENAME
    //QUERY DD DSN=<HLQ>.QUERY.FILENAME,DISP=SHR
    //STDIN DD *
    PROJECT=PROJECT_NAME
    DATASET_ID=DATASET_ID
    DESTINATION_TABLE=DESTINATION_TABLE
    bq export --project_id=$PROJECT \
      --dataset_id=$DATASET_ID \
      --destination_table=$DESTINATION_TABLE \
      --location="US" \
      --remoteHost <mainframe-connector-url>.a.run.app \
      --remotePort 443
    /*
    

    מחליפים את מה שכתוב בשדות הבאים:

    • PROJECT_NAME: שם הפרויקט שבו רוצים להריץ את השאילתה.
    • DATASET_ID: מזהה מערך הנתונים ב-BigQuery שמכיל את הטבלה שרוצים לייצא.
    • DESTINATION_TABLE: הטבלה ב-BigQuery שרוצים לייצא.

    הנתונים מיוצאים למערך הנתונים OUTFILE DD. פריסת הרשומה מתוארת על ידי COPYBOOK DD.