1. מבוא
ב-Codelab הזה תיצרו מודל של למידת מכונה (ML) ב-BigQuery ותקבלו חיזויים מהמודל הזה באמצעות ABAP SDK ל-Google Cloud.
תשתמשו בשירותי Google Cloud הבאים:
- BigQuery
- Cloud Shell
מה תפַתחו
ייווצרו הפריטים הבאים:
- מודל למידת מכונה (ML) ב-BigQuery.
- חשבון שירות עם תפקיד BigQuery Job User לקריאה ל-BigQuery API.
- תוכנית ABAP לשליחת קריאה ל-BigQuery API ולקבל חיזויים ממודל למידת המכונה.
2. דרישות
- דפדפן כמו Chrome או Firefox.
- פרויקט ב-Google Cloud שהחיוב בו מופעל או יצירת חשבון לתקופת ניסיון בחינם למשך 90 יום ל-Google Cloud Platform.
- SAP GUI (Windows או Java) מותקן במערכת. אם SAP GUI כבר מותקן במחשב הנייד שלכם, מתחברים ל-SAP באמצעות כתובת ה-IP החיצונית של VM בתור כתובת ה-IP של שרת האפליקציות. אם אתם משתמשים ב-Mac, תוכלו גם להתקין את SAP GUI ל-Java שזמין בקישור הזה.
3. לפני שמתחילים
- במסוף Google Cloud, בדף בורר הפרויקטים, בוחרים או יוצרים פרויקט ב-Google Cloud (לדוגמה:
abap-sdk-poc
). - הקפידו לוודא שהחיוב מופעל בפרויקט שלכם ב-Cloud. איך בודקים אם החיוב מופעל בפרויקט אפשר לדלג על השלב הזה אם משתמשים בחשבון לתקופת ניסיון בחינם למשך 90 יום.
- תשתמשו ב-Cloud Shell, סביבת שורת הפקודה שפועלת ב-Google Cloud.
- לוחצים על Activate Cloud Shell בפינה הימנית העליונה ב-Cloud Console:
- כדי לאמת את החשבון ולהגדיר את פרויקט ברירת המחדל ל-
abap-sdk-poc
, מריצים את הפקודות הבאות ב-Cloud Shell. התחוםus-west4-b
משמש כדוגמה. במקרה הצורך, אפשר לשנות את הפרויקט והאזור בפקודות הבאות בהתאם להעדפות שלך.
gcloud auth login
gcloud config set project abap-sdk-poc
gcloud config set compute/zone us-west4-b
- צריכה להיות לכם גישה למערכת SAP עם התקנה של ABAP SDK ל-Google Cloud.
- לפני שממשיכים ב-Codelab הזה, צריך להשלים את Codelab 1 (התקנת גרסת ניסיון 1909 של ABAP Platform ב-Google Cloud Platform והתקנת ABAP SDK ל-Google Cloud) ו-Codelab 2 (הגדרת אימות ABAP SDK באמצעות אסימונים ל-SAP שמתארח ב-VM של Compute Engine).
- אם השלמתם את Codelab 1 ואת Codelab 2, הייתה מוקצית לך מערכת ABAP Platform ממשלתית 1909 לניסיון ב-Google Cloud, יחד עם ההגדרה הדרושה לאימות ולקישוריות.
- אם לא השלמתם את Codelab 1 ואת Codelab 2, לא יהיו לכם כל התשתית והקישוריות הנדרשים לביצוע השלבים המפורטים ב-Codelab הזה. לכן לפני שממשיכים ב-Codelab הזה צריך להשלים את Codelab 1 ואת Codelab 2.
4. הפעלת BigQuery API V2 בפרויקט Google Cloud
- לוחצים על Activate Cloud Shell בפינה הימנית העליונה ב-Cloud Console:
- כדי להפעיל את BigQuery API, מריצים את הפקודות הבאות ב-Cloud Shell:
gcloud services enable bigquery.googleapis.com
כשהביצוע יסתיים בהצלחה, אמורה להופיע הודעה שמוצגת בהמשך
עכשיו BigQuery API אמור להיות מופעל בפרויקט שלכם ב-Google Cloud.
5. יצירת חשבון שירות לגישה מאובטחת ל-BigQuery
כדי לקבל באופן מאובטח חיזויים של למידת מכונה ממודל של BigQuery ML, צריך ליצור חשבון שירות עם התפקידים 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
ב-Codelab הזה, ניצור מודל k-mean לקיבוץ מערך הנתונים של השכרת אופניים בלונדון. תוכלו להחיל את האלגוריתם k-means כדי לקבץ את הנתונים באשכולות. בניגוד ללמידת מכונה בפיקוח, שעוסקת בניתוח נתונים חזוי, למידה בלתי מונחית קשורה לניתוח תיאורי. המטרה היא להבין את הנתונים שלכם כדי שתוכלו לקבל החלטות שמבוססות על נתונים.
יצירת מערך הנתונים
כדי ליצור מערך נתונים ב-BigQuery לאחסון מודל למידת מכונה, מבצעים את השלבים הבאים:
- נכנסים לדף ב-BigQuery במסוף Google Cloud. כניסה לדף BigQuery
- בחלונית Explorer לוחצים על שם הפרויקט.
- לוחצים על
הצגת פעולות > יצירת מערך נתונים.
- בדף Create dataset מבצעים את הפעולות הבאות:
- בשדה Dataset ID, מזינים
bqml_tutorial
. - בקטע Location type (סוג המיקום), בוחרים באפשרות Multi-region (מספר אזורים) ואז בוחרים EU (מספר אזורים באיחוד האירופי). מערך הנתונים הציבורי של London bike hires מאוחסן במספר אזורים באיחוד האירופי. מערך הנתונים חייב להיות באותו מיקום.
- משאירים את שאר הגדרות ברירת המחדל כפי שהן ולוחצים על Create dataset.
יצירת מודל k-כלומר
אחרי שהגדרתם את מערך הנתונים, השלב הבא הוא ליצור מודל k-means באמצעות הנתונים. אפשר ליצור ולאמן מודל k באמצעות ההצהרה 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 לביצוע אשכולות. הסכימה אמורה להיראות כך:
- לוחצים על הכרטיסייה הערכה. בכרטיסייה הזו מוצגות תצוגות חזותיות של האשכולות שזוהו על ידי מודל ה-K. בקטע תכונות מספריות, תרשימי עמודות מציגים עד 10 מהערכים של התכונות המספריות החשובות ביותר לכל מרכז. בתפריט הנפתח אפשר לבחור את התכונות שרוצים להציג.
7. קבלת חיזויים של BigQuery ML באמצעות ABAP SDK ל-Google Cloud
עכשיו, אחרי שהגדרתם את הדרישות המוקדמות ב-Google Cloud, אתם מוכנים להשלים את השלבים במערכת SAP שלכם כדי לקבל חיזויים ממודל למידת המכונה באמצעות ABAP SDK ל-Google Cloud.
יצירה של תצורת מפתח לקוח
להגדרות שקשורות לאימות ולקישוריות, ב-ABAP SDK ל-Google Cloud נעשה שימוש בטבלאות /GOOG/CLIENT_KEY
ו-/GOOG/SERVIC_MAP.
כדי לשמור את ההגדרות בטבלה /GOOG/CLIENT_KEY
, מבצעים את השלבים הבאים:
- ב-SAP GUI, מזינים את קוד העסקה SPRO.
- לוחצים על SAP Reference JPG.
- לוחצים על ABAP SDK for Google Cloud > הגדרות בסיסיות > הגדרת מפתח לקוח
- משאירים את הערכים הבאים מול השדות הרשומים, ומשאירים את כל שאר השדות ריקים:
שדה | ערך |
שם המפתח ב-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 |
רמת הרשאה | /GOOG/CL_AUTH_GOOGLE |
יצירת דוח ABAP כדי לקבל חיזויים ממודל למידת המכונה של BigQuery
כדי ליצור דוח ABAP:
- ב-GUI של SAP, עוברים אל קוד העסקה
SE38
ויוצרים תוכנית דוחות בשםZDEMO_BIGQUERY_ML_PREDICT.
- בחלון הקופץ שנפתח, מזינים את הפרטים שמופיעים בתמונה הבאה:
- בחלון הקופץ הבא, בוחרים באפשרות אובייקט מקומי או מספקים שם חבילה מתאים.
- בעורך 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' codelab!
אחזור בהצלחה חיזויים של מודל למידת מכונה של BigQuery, ישירות מתוך מערכת SAP שלך! קיבלת גישה לרמה חדשה של שילוב בין ABAP לשירותי Google Cloud. מרחיבים את האופקים עם עוד SDK מלהיב של ABAP ל-Google Cloud Codelabs:
- שימוש ב-Translation API עם ABAP SDK ל-Google Cloud
- העלאת אובייקט גדול לקטגוריה של Cloud Storage באמצעות מקטע נתונים
- אחזור של פרטי כניסה או סודות מ-Secret Manager באמצעות ABAP SDK ל-Google Cloud
- ביצוע שיחה של Vertex AI לבדיקה מ-ABAP
9. הסרת המשאבים
לא רוצה להמשיך עם ה-Codelabs הנוספים שקשורים ל-ABAP SDK ל-Google Cloud? אפשר להמשיך בניקוי.
מחיקת הפרויקט
- מוחקים את הפרויקט ב-Google Cloud:
gcloud projects delete abap-sdk-poc
איך מוחקים משאבים ספציפיים
- מוחקים את מכונת המחשוב:
gcloud compute instances delete abap-trial-docker
- מוחקים את כללי חומת האש:
gcloud compute firewall-rules delete sapmachine
- מוחקים את חשבון השירות:
gcloud iam service-accounts delete \
abap-sdk-bigquery-jobuser@abap-sdk-poc.iam.gserviceaccount.com