1. מבוא
בקודלאב הזה תלמדו ליצור מודל למידת מכונה (ML) ב-BigQuery ולקבל חיזויים מהמודל הזה באמצעות ABAP SDK for Google Cloud.
נעשה שימוש בשירותים הבאים של Google Cloud:
- BigQuery
- Cloud Shell
מה תפַתחו
עליכם ליצור את הפריטים הבאים:
- מודל למידת מכונה (ML) של BigQuery.
- חשבון שירות עם התפקיד BigQuery Job User כדי לקרוא ל-BigQuery API.
- תוכנית ABAP לקריאה ל-BigQuery API ולקבלת תחזיות ממודל ה-ML.
2. דרישות
- דפדפן, כמו Chrome או Firefox.
- פרויקט ב-Google Cloud שבו החיוב מופעל, או יצירת חשבון לתקופת ניסיון בחינם של 90 יום ב-Google Cloud Platform.
- SAP GUI (Windows או Java) מותקן במערכת. אם SAP GUI כבר מותקן במחשב הנייד, מתחברים ל-SAP באמצעות כתובת ה-IP החיצונית של ה-VM ככתובת ה-IP של שרת האפליקציות. אם אתם משתמשים ב-Mac, תוכלו גם להתקין את SAP GUI for Java שזמין בקישור הזה.
3. לפני שמתחילים
- בדף לבחירת הפרויקט במסוף Google Cloud, בוחרים או יוצרים פרויקט ב-Google Cloud (לדוגמה:
abap-sdk-poc
). - הקפידו לוודא שהחיוב מופעל בפרויקט שלכם ב-Cloud. כך בודקים אם החיוב מופעל בפרויקט אם אתם משתמשים בחשבון לתקופת ניסיון בחינם של 90 יום, אפשר לדלג על השלב הזה.
- תשתמשו ב-Cloud Shell, סביבת שורת פקודה שפועלת ב-Google Cloud.
- במסוף Cloud, לוחצים על Activate Cloud Shell בפינה הימנית העליונה:
- מריצים את הפקודות הבאות ב-Cloud Shell כדי לבצע אימות לחשבון ולהגדיר את פרויקט ברירת המחדל כ-
abap-sdk-poc
. הדוגמה היא לתחוםus-west4-b
. אם צריך, משנים את הפרויקט ואת האזור בפקודות הבאות בהתאם להעדפות שלכם.
gcloud auth login
gcloud config set project abap-sdk-poc
gcloud config set compute/zone us-west4-b
- צריכה להיות לכם גישה למערכת SAP עם ערכת ה-SDK של ABAP ל-Google Cloud.
- לפני שממשיכים בקודלאב הזה, צריך להשלים את הקודלאב 1 (התקנת ABAP Platform Trial 1909 ב-Google Cloud Platform והתקנת ABAP SDK ל-Google Cloud) ואת הקודלאב 2 (הגדרת אימות ABAP SDK באמצעות אסימונים ל-SAP Hosted ב-Compute Engine VM).
- אם השלמתם את Codelab 1 ואת Codelab 2, המערכת של ABAP Platform Trial 1909 ב-Google Cloud הוקצה לכם, יחד עם ההגדרות הנדרשות לאימות ולקישוריות.
- אם לא השלמתם את הקודלאב 1 ואת הקודלאב 2, לא תהיה לכם את כל התשתית והקישוריות הנדרשים כדי לבצע את השלבים שמפורטים בקודלאב הזה. לכן, עליכם להשלים את Codelab 1 ואת Codelab 2 לפני שתמשיכו ב-Codelab הזה.
4. הפעלת BigQuery API V2 בפרויקט Google Cloud
- במסוף Cloud, לוחצים על Activate Cloud Shell בפינה הימנית העליונה:
- כדי להפעיל את BigQuery API, מריצים את הפקודות הבאות ב-Cloud Shell:
gcloud services enable bigquery.googleapis.com
אם הפעולה בוצעה בהצלחה, אמורה להופיע הודעה כמו זו שבהמשך.
עכשיו BigQuery API אמור להיות מופעל בפרויקט Google Cloud.
5. יצירת חשבון שירות לגישה מאובטחת ל-BigQuery
כדי לקבל תחזיות של למידת מכונה באופן מאובטח ממודל למידת מכונה ב-BigQuery, צריך ליצור חשבון שירות עם התפקידים BigQuery Job User ו-BigQuery Data Viewer. התפקידים האלה יאפשרו לתוכנית להריץ שאילתות (כמשימות) בתוך הפרויקט ולקרוא נתונים מטבלאות. התפקיד הזה מעניק רק את ההרשאות הנדרשות ליצירת משימות ולקריאת נתונים, וכך מצמצם את סיכוני האבטחה.
יצירה של חשבון שירות
כדי ליצור חשבון שירות עם התפקיד הנדרש, מבצעים את השלבים הבאים:
- מריצים את הפקודה הבאה במסוף Cloud Shell:
gcloud iam service-accounts create abap-sdk-bigquery-jobuser --display-name="Service Account for BigQuery Job user"
- עכשיו מוסיפים את התפקידים הנדרשים לחשבון השירות שנוצר בשלב הקודם:
gcloud projects add-iam-policy-binding abap-sdk-poc --member='serviceAccount:abap-sdk-bigquery-jobuser@abap-sdk-poc.iam.gserviceaccount.com' --role='roles/bigquery.jobUser'
gcloud projects add-iam-policy-binding abap-sdk-poc --member='serviceAccount:abap-sdk-bigquery-jobuser@abap-sdk-poc.iam.gserviceaccount.com' --role='roles/bigquery.dataViewer'
בפקודה שלמעלה, abap-sdk-poc
משמש כ-placeholder לפרויקט ב-Google Cloud. מחליפים את abap-sdk-poc
במזהה הפרויקט.
- כדי לוודא שהתפקיד נוסף, עוברים לדף IAM. חשבון השירות שיצרתם אמור להופיע יחד עם התפקיד שהוקצה לו.
6. יצירת מודל של למידת מכונה ב-BigQuery
בסדנת הקוד הזו ניצור מודל k-means כדי לקבץ את מערך הנתונים של השכרת האופניים בלונדון. אפשר להחיל את האלגוריתם k-means כדי לקבץ את הנתונים באשכולות. בניגוד ללמידת מכונה בפיקוח, שמתמקדת בניתוח נתונים חזוי, למידה ללא פיקוח מתמקדת בניתוח נתונים תיאורי. המטרה היא להבין את הנתונים כדי שתוכלו לקבל החלטות מבוססות-נתונים.
יצירת מערך הנתונים
כדי ליצור מערך נתונים ב-BigQuery לאחסון מודל ה-ML, מבצעים את השלבים הבאים:
- נכנסים לדף BigQuery במסוף Google Cloud. לדף BigQuery
- בחלונית Explorer, לוחצים על שם הפרויקט.
- לוחצים על
הצגת פעולות > יצירת מערך נתונים.
- בדף Create dataset, מבצעים את הפעולות הבאות:
- בשדה Dataset ID מזינים
bqml_tutorial
. - בקטע Location type (סוג מיקום), בוחרים באפשרות Multi-region (מספר אזורים) ואז באפשרות EU (multiple regions in European Union) (האיחוד האירופי (מספר אזורים באיחוד האירופי)). מערך הנתונים הציבורי של London Bicycle Hires מאוחסן במספר אזורים באיחוד האירופי. מערך הנתונים צריך להיות באותו מיקום.
- משאירים את שאר הגדרות ברירת המחדל כפי שהן ולוחצים על Create dataset.
יצירת מודל k-means
עכשיו, אחרי שמגדירים את מערך הנתונים, השלב הבא הוא ליצור מודל k-means באמצעות הנתונים. אפשר ליצור מודל k-means ולאמן אותו באמצעות משפט CREATE MODEL עם האפשרות model_type=kmeans
.
כדי להריץ את השאילתה וליצור מודל k-means:
- עוברים לדף BigQuery. כניסה ל-BigQuery
- בחלונית העריכה, מריצים את משפט ה-SQL הבא:
CREATE OR REPLACE MODEL `bqml_tutorial.london_station_clusters` OPTIONS(model_type='kmeans', num_clusters=4) AS WITH hs AS ( SELECT h.start_station_name AS station_name, IF (EXTRACT(DAYOFWEEK FROM h.start_date) = 1 OR EXTRACT(DAYOFWEEK FROM h.start_date) = 7, "weekend", "weekday") AS isweekday, h.duration, ST_DISTANCE(ST_GEOGPOINT(s.longitude, s.latitude), ST_GEOGPOINT(-0.1, 51.5))/1000 AS distance_from_city_center FROM `bigquery-public-data.london_bicycles.cycle_hire` AS h JOIN `bigquery-public-data.london_bicycles.cycle_stations` AS s ON h.start_station_id = s.id WHERE h.start_date BETWEEN CAST('2015-01-01 00:00:00' AS TIMESTAMP) AND CAST('2016-01-01 00:00:00' AS TIMESTAMP) ), stationstats AS ( SELECT station_name, isweekday, AVG(duration) AS duration, COUNT(duration) AS num_trips, MAX(distance_from_city_center) AS distance_from_city_center FROM hs GROUP BY station_name, isweekday) SELECT * EXCEPT(station_name, isweekday) FROM stationstats
- בחלונית הניווט, בקטע Resources (משאבים), מרחיבים את שם הפרויקט, לוחצים על bqml_tutorial ואז על london_station_clusters.
- לוחצים על הכרטיסייה Schema. הסכימה של המודל כוללת את שלושת המאפיינים של התחנות שמערכת BigQuery ML השתמשה בהם כדי לבצע קיבוץ. הסכימה אמורה להיראות כך:
- לוחצים על הכרטיסייה Evaluation. בכרטיסייה הזו מוצגות תצוגות חזותיות של האשכולות שזוהו על ידי מודל k-means. בקטע מאפיינים מספריים, בתרשימי העמודות מוצגים עד 10 מהערכים החשובים ביותר של המאפיינים המספריים לכל מרכז כובד. בתפריט הנפתח, בוחרים את התכונות שרוצים להציג בתרשים.
7. הצגת חיזויים של BigQuery ML באמצעות ABAP SDK ל-Google Cloud
עכשיו, אחרי שהגדרתם את הדרישות המוקדמות בצד של Google Cloud, אתם מוכנים לבצע את השלבים במערכת SAP כדי לקבל תחזיות ממודל ה-ML באמצעות ABAP SDK ל-Google Cloud.
יצירת הגדרת מפתח לקוח
לצורך הגדרות שקשורות לאימות ולקישוריות, ערכת ה-SDK של ABAP ל-Google Cloud משתמשת בטבלאות /GOOG/CLIENT_KEY
ו-/GOOG/SERVIC_MAP.
.
כדי לשמור על ההגדרות בטבלה /GOOG/CLIENT_KEY
:
- בממשק המשתמש של SAP, מזינים את קוד העסקה SPRO.
- לוחצים על SAP Reference IMG.
- לוחצים על ABAP SDK for Google Cloud > Basic Settings > Configure Client Key.
- משאירים את הערכים הבאים בשדות המפורטים, ושאר השדות ריקים:
שדה | ערך |
שם המפתח ב-Google Cloud | BIGQUERY_ML |
שם חשבון השירות ב-Google Cloud | abap-sdk-bigquery-jobuser@abap-sdk-poc.iam.gserviceaccount.com |
היקף Google Cloud | https://www.googleapis.com/auth/cloud-platform |
מזהה פרויקט | abap-sdk-poc |
Authorization Class | /GOOG/CL_AUTH_GOOGLE |
יצירת דוח ABAP כדי לקבל חיזויים מהמודל של BigQuery ML
כדי ליצור דוח ABAP, מבצעים את השלבים הבאים:
- ב-SAP GUI, עוברים לקוד העסקה
SE38
ויוצרים תוכנית דוחות בשםZDEMO_BIGQUERY_ML_PREDICT.
. - בחלון הקופץ שנפתח, מספקים את הפרטים כפי שמוצג בתמונה הבאה:
- בחלון הקופץ הבא, בוחרים באפשרות Local Object (אובייקט מקומי) או מספקים שם לחבילה בהתאם.
- בעורך ABAP, מוסיפים את הקוד הבא:
REPORT zdemo_bigquery_ml_predict. types: begin of lty_query_result, centroid_id type i, station_name type string, isweekday type string, num_trips type i, distance_from_city type string, end of lty_query_result, ltt_query_result type standard table of lty_query_result. DATA: lv_project_id TYPE string, ls_input TYPE /goog/cl_bigquery_v2=>ty_103, ls_output TYPE lty_query_result, lt_output TYPE ltt_query_result. CONSTANTS: lc_newline TYPE c VALUE cl_abap_char_utilities=>newline. TRY. "Initialize Bigquery object, pass the client key name that you have configured in /GOOG/CLIENT_KEY table DATA(lo_bq) = NEW /goog/cl_bigquery_v2( iv_key_name = 'BIGQUERY_ML' ). "Populate relevant parameters lv_project_id = lo_bq->gv_project_id. ls_input-default_dataset-project_id = 'abap-sdk-poc'. ls_input-default_dataset-dataset_id = 'bqml_tutorial'. "This query gets predictions from ls_input-query = | WITH | && lc_newline && | hs AS ( | && lc_newline && | SELECT | && lc_newline && | h.start_station_name AS station_name, | && lc_newline && | IF | && lc_newline && | (EXTRACT(DAYOFWEEK | && lc_newline && | FROM | && lc_newline && | h.start_date) = 1 | && lc_newline && | OR EXTRACT(DAYOFWEEK | && lc_newline && | FROM | && lc_newline && | h.start_date) = 7, | && lc_newline && | "weekend", | && lc_newline && | "weekday") AS isweekday, | && lc_newline && | h.duration, | && lc_newline && | ST_DISTANCE(ST_GEOGPOINT(s.longitude, | && lc_newline && | s.latitude), | && lc_newline && | ST_GEOGPOINT(-0.1, | && lc_newline && | 51.5))/1000 AS distance_from_city_center | && lc_newline && | FROM | && lc_newline && | `bigquery-public-data.london_bicycles.cycle_hire` AS h | && lc_newline && | JOIN | && lc_newline && | `bigquery-public-data.london_bicycles.cycle_stations` AS s | && lc_newline && | ON | && lc_newline && | h.start_station_id = s.id | && lc_newline && | WHERE | && lc_newline && | h.start_date BETWEEN CAST('2015-01-01 00:00:00' AS TIMESTAMP) | && lc_newline && | AND CAST('2016-01-01 00:00:00' AS TIMESTAMP) ), | && lc_newline && | stationstats AS ( | && lc_newline && | SELECT | && lc_newline && | station_name, | && lc_newline && | isweekday, | && lc_newline && | AVG(duration) AS duration, | && lc_newline && | COUNT(duration) AS num_trips, | && lc_newline && | MAX(distance_from_city_center) AS distance_from_city_center | && lc_newline && | FROM | && lc_newline && | hs | && lc_newline && | GROUP BY | && lc_newline && | station_name, isweekday ) | && lc_newline && | SELECT | && lc_newline && | * EXCEPT(nearest_centroids_distance) | && lc_newline && | FROM | && lc_newline && | ML.PREDICT( MODEL `bqml_tutorial.london_station_clusters`, | && lc_newline && | ( | && lc_newline && | SELECT | && lc_newline && | * | && lc_newline && | FROM | && lc_newline && | stationstats | && lc_newline && | WHERE | && lc_newline && | REGEXP_CONTAINS(station_name, 'Kennington'))) |. "Call API method: bigquery.jobs.query CALL METHOD lo_bq->query_jobs EXPORTING iv_p_project_id = lv_project_id is_input = ls_input IMPORTING es_output = DATA(ls_response) ev_ret_code = DATA(lv_ret_code) ev_err_text = DATA(lv_err_text) es_err_resp = DATA(ls_err_resp). IF lo_bq->is_success( lv_ret_code ). "API Call successful, loop through the data & display the result IF ls_response-job_complete = abap_true. LOOP AT ls_response-rows ASSIGNING FIELD-SYMBOL(<ls_row>). LOOP AT <ls_row>-f ASSIGNING FIELD-SYMBOL(<ls_value>). ASSIGN <ls_value>-v->* TO FIELD-SYMBOL(<ls_field_value>). CASE sy-tabix. WHEN 1. ls_output-centroid_id = <ls_field_value>. WHEN 2. ls_output-station_name = <ls_field_value>. WHEN 3. ls_output-isweekday = <ls_field_value>. WHEN 4. ls_output-num_trips = <ls_field_value>. WHEN 5. ls_output-distance_from_city = <ls_field_value>. ENDCASE. ENDLOOP. APPEND ls_output TO lt_output. CLEAR ls_output. ENDLOOP. IF lt_output IS NOT INITIAL. cl_demo_output=>new( )->begin_section( 'ML.Predict Query Details' )->write_text( ls_input-query )->write_text( 'Dataset: bigquery-public-data.london_bicycles' )->end_section( )->begin_section( 'ML.Predict Query Results' )->write_data( lt_output )->end_section( )->display( ). ENDIF. ENDIF. ELSE. "Display error message in case the API call fails MESSAGE lv_err_text TYPE 'E'. ENDIF. "Close HTTP Connection lo_bq->close( ). CATCH /goog/cx_sdk INTO DATA(lo_exception). MESSAGE lo_exception->get_text( ) TYPE 'E'. ENDTRY.
- שומרים ומפעילים את הדוח.
- מפעילים את הדוח (F8).
אם הפעולה בוצעה בהצלחה, אמור להופיע פלט של דוח כמו זה שמופיע בהמשך:
8. מזל טוב
עבודה נהדרת על השלמת הקודלה 'קבלת חיזויים ממודל של למידת מכונה (ML) ב-BigQuery באמצעות ABAP SDK ל-Google Cloud'.
הצלחת לאחזר חיזויים של מודל למידת מכונה ב-BigQuery, ישירות מתוך מערכת SAP! הגעתם לרמה חדשה של שילוב בין ABAP לשירותי Google Cloud. אתם יכולים להרחיב את האופקים בעזרת סדנאות קוד נוספות בנושא ABAP SDK ל-Google Cloud:
- שימוש ב-Translation API עם ABAP SDK ל-Google Cloud
- העלאת אובייקט גדול לקטגוריה של Cloud Storage באמצעות חלוקה למקטעים
- אחזור פרטי כניסה/סודות מ-Secret Manager באמצעות ABAP SDK ל-Google Cloud
- קריאה ל-Vertex AI test-bison מ-ABAP
9. הסרת המשאבים
אם אתם לא רוצים להמשיך בקודלאבים הנוספים שקשורים ל-ABAP SDK ל-Google Cloud, תוכלו להמשיך לניקוי.
מחיקת הפרויקט
- מוחקים את הפרויקט ב-Google Cloud:
gcloud projects delete abap-sdk-poc
מחיקת משאבים ספציפיים
- מוחקים את מכונה לעיבוד נתונים:
gcloud compute instances delete abap-trial-docker
- מוחקים את firewall-rules:
gcloud compute firewall-rules delete sapmachine
- מוחקים את חשבון השירות:
gcloud iam service-accounts delete \
abap-sdk-bigquery-jobuser@abap-sdk-poc.iam.gserviceaccount.com