בדף הזה מוסבר איך אפשר לבצע טרנסקוד של נתונים במחשב מרכזי באופן מקומי במחשב המרכזי לפורמט נתמך, ואז להעביר את התוכן ל-BigQuery. טרנסקוד הוא תהליך של המרת מידע מצורה אחת של ייצוג מקודד לצורה אחרת. בדף הזה מוסבר איך אפשר להשתמש ב-Mainframe Connector כדי להמיר נתונים מ-mainframe לפורמט אופטימלי של עמודות בשורות (ORC), ואז לשמור את הנתונים ב-Cloud Storage.
Mainframe Connector מספק שלוש דרכים לקידוד מחדש של נתונים במחשב המרכזי באופן מקומי במחשב המרכזי.
- שימוש בפקודות
qsam(גרסה 5.16.0 ואילך) - שימוש בפקודה
vsam decode(גרסה 5.18.0 ואילך) - שימוש בפקודה
gsutil cp
היתרונות של הפקודות qsam ו-vsam
הפקודות qsam ו-vsam מספקות את היתרונות הבאים:
- תמיכה בסוגי נתונים מורכבים, כולל פסוקית OCCURS (רשימות), פסוקית REDEFINES ורשומות מקוננות. מידע נוסף על סוגי הנתונים האלה זמין במאמרים בנושא
qsamוvsamהמרת קידוד. - תמיכה בהגדרת תהליך המרת הקידוד באמצעות קובץ הגדרות של המרת הקידוד. היכולת הזו מאפשרת גמישות רבה יותר בפענוח הנתונים ל- Google Cloud, ובקידוד הנתונים בחזרה למחשב המרכזי.
- תמיכה ביצירה של מערך נתונים של שגיאות, שהוא טבלה של שגיאות המרת קידוד שאפשר להשתמש בה כדי לבדוק שגיאות.
- תמיכה בפורמטים שונים של קלט ופלט. היכולת הזו מאפשרת לכם לטעון את הנתונים שלכם למחסני נתונים שונים וממחסני נתונים שונים.
לפני שמתחילים
מתקינים את Mainframe Connector בכל מערך נתונים שמחולק למחיצות במחשב מרכזי שרוצים להשתמש בו כספריית פרוצדורות (PROCLIB).
העברת נתונים שעברו המרה מקומית במחשב המרכזי אל Google Cloud
כדי לבצע טרנסקוד של נתונים באופן מקומי במחשב מרכזי ואז להעביר אותם ל-BigQuery, צריך לבצע את המשימות הבאות:
- קריאה וקידוד מחדש של מערך נתונים במחשב מרכזי, והעלאה שלו ל-Cloud Storage בפורמט ORC (לפורמטים אחרים שנתמכים רק על ידי הפקודות
qsamאוvsam, אפשר לעיין ב-TranscodeFormat). הטרנסקוד מתבצע במהלך הפעולותqsam decode,vsam decodeאוgsutil cp(בהתאם לפקודה שתבחרו), שבהן קבוצת נתונים של קוד החלפה עשרוני בינארי מורחב של מחשב מרכזי (EBCDIC) מומרת לפורמט ORC ב-UTF-8 במהלך ההעתקה לקטגוריה של Cloud Storage. - טוענים את מערך הנתונים לטבלה ב-BigQuery.
- (אופציונלי) מריצים שאילתת SQL בטבלת BigQuery.
- (אופציונלי) ייצוא נתונים מ-BigQuery בחזרה למחשב המרכזי.
בקטעים הבאים מוסבר בפירוט איך להעביר נתונים שעברו טרנסקוד מקומי במחשב המרכזי אל Google Cloud באמצעות הפקודות qsam או vsam והפקודה gsutil cp.
קידוד מחדש באופן מקומי באמצעות הפקודות qsam ו-vsam
כדי לבצע טרנסקוד לנתוני המיינפריים באופן מקומי במיינפריים באמצעות פקודות qsam או vsam, צריך לבצע את השלבים הבאים:
יוצרים משימה לקריאת מערך הנתונים במחשב המרכזי ולקידוד מחדש שלו לפורמט 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.אם רוצים לתעד את הפקודות שהופעלו במהלך התהליך הזה, אפשר להפעיל את סטטיסטיקת הטעינה.
יוצרים ושולחים משימת טעינה ב-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: שם הפרויקט שבו רוצים להריץ את השאילתה.
-
(אופציונלי) יוצרים ומגישים משימת שאילתה ב-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: המיקום שבו השאילתה תופעל. מומלץ להריץ את השאילתה במיקום שקרוב לנתונים.
-
(אופציונלי) יוצרים ושולחים משימת ייצוא שמבצעת קריאת 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, פועלים לפי השלבים הבאים:
יוצרים משימה לקריאת מערך הנתונים במחשב המרכזי ולקידוד מחדש שלו לפורמט 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), וכך קל יותר לנהל את החלפת הסמלים.
אם רוצים לתעד את הפקודות שהופעלו במהלך התהליך הזה, אפשר להפעיל את סטטיסטיקת הטעינה.
יוצרים ושולחים משימת טעינה ב-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: שם הפרויקט שבו רוצים להריץ את השאילתה.
-
(אופציונלי) יוצרים ומגישים משימת שאילתה ב-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: המיקום שבו השאילתה תופעל. מומלץ להריץ את השאילתה במיקום שקרוב לנתונים.
-
(אופציונלי) יוצרים ושולחים משימת ייצוא שמבצעת קריאת 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.
-