1. مقدمه
در این لبه کد، یک مدل یادگیری ماشینی (ML) در BigQuery ایجاد میکنید و با استفاده از ABAP SDK برای Google Cloud، پیشبینیهایی از این مدل دریافت میکنید.
شما از خدمات Google Cloud زیر استفاده خواهید کرد:
- BigQuery
- پوسته ابری
چیزی که خواهی ساخت
شما موارد زیر را ایجاد خواهید کرد:
- یک مدل یادگیری ماشینی BigQuery (ML).
- یک حساب سرویس با نقش BigQuery Job User برای فراخوانی BigQuery API.
- یک برنامه ABAP برای فراخوانی BigQuery API و دریافت پیشبینی از مدل ML.
2. الزامات
- یک مرورگر، مانند کروم یا فایرفاکس .
- یک پروژه Google Cloud با فعال کردن صورتحساب یا ایجاد یک حساب آزمایشی رایگان 90 روزه برای Google Cloud Platform.
- SAP GUI (ویندوز یا جاوا) در سیستم شما نصب شده است. اگر SAP GUI قبلاً روی لپتاپ شما نصب شده است، با استفاده از آدرس IP خارجی VM به عنوان IP سرور برنامه، به SAP متصل شوید. اگر در مک هستید، می توانید SAP GUI برای جاوا را نیز در این لینک نصب کنید.
3. قبل از شروع
- در Google Cloud Console ، در صفحه انتخابگر پروژه، یک پروژه Google Cloud را انتخاب یا ایجاد کنید (به عنوان مثال:
abap-sdk-poc
). - مطمئن شوید که صورتحساب برای پروژه Cloud شما فعال است. با نحوه بررسی فعال بودن صورتحساب در پروژه آشنا شوید. اگر از حساب آزمایشی رایگان 90 روزه استفاده می کنید، از این مرحله رد شوید.
- شما از Cloud Shell ، یک محیط خط فرمان در حال اجرا در Google Cloud استفاده خواهید کرد.
- از Cloud Console، روی Activate Cloud Shell در گوشه سمت راست بالا کلیک کنید:
- دستورات زیر را در Cloud Shell برای احراز هویت برای حساب خود اجرا کنید و پروژه پیش فرض را روی
abap-sdk-poc
تنظیم کنید. Zoneus-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 دسترسی داشته باشید.
- قبل از ادامه با این آزمایشگاه کد 1 ( نصب ABAP Platform Trial 1909 در Google Cloud Platform و نصب ABAP SDK for Google Cloud) و codelab 2 ( پیکربندی احراز هویت ABAP SDK با استفاده از نشانهها برای SAP Hosted on Compute Engine VM ) را تکمیل کنید.
- اگر کد 1 و کد 2 را تکمیل کرده باشید، با این کار یک سیستم آزمایشی 1909 پلتفرم ABAP در Google Cloud به همراه تنظیمات لازم برای احراز هویت و اتصال را برای شما فراهم می کند.
- اگر Codelab 1 و Codelab 2 را تکمیل نکرده باشید، تمامی زیرساخت ها و اتصالات لازم برای انجام مراحل ارائه شده در این کدلب را نخواهید داشت. بنابراین، قبل از ادامه کار با این کد، باید کد 1 و کد 2 را تکمیل کنید.
4. BigQuery API V2 را در پروژه Google Cloud خود فعال کنید
- از Cloud Console، روی Activate Cloud Shell در گوشه سمت راست بالا کلیک کنید:
- برای فعال کردن BigQuery API دستورات زیر را در Cloud Shell اجرا کنید:
gcloud services enable bigquery.googleapis.com
در اجرای موفقیت آمیز باید پیامی را مشاهده کنید که مطابق شکل زیر نمایش داده می شود
اکنون باید BigQuery API را در پروژه Google Cloud خود فعال کنید.
5. یک حساب سرویس برای دسترسی ایمن BigQuery ایجاد کنید
برای دریافت ایمن پیشبینیهای ML از یک مدل 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
به عنوان یک مکان نگهدار برای پروژه Google Cloud استفاده می کند. abap-sdk-poc
با شناسه پروژه خود جایگزین کنید.
- برای تأیید، نقش اضافه شده است، به صفحه IAM بروید. حساب سرویسی که ایجاد کردید باید همراه با نقشی که به آن اختصاص داده شده است، فهرست شود.
6. ایجاد یک مدل یادگیری ماشین BigQuery
در این آزمایشگاه کد، ما یک مدل k-means برای خوشهبندی مجموعه دادههای اجاره دوچرخه لندن ایجاد میکنیم. می توانید از الگوریتم k-means برای گروه بندی داده های خود در خوشه ها استفاده کنید. برخلاف یادگیری ماشینی نظارت شده، که در مورد تجزیه و تحلیل پیش بینی کننده است، یادگیری بدون نظارت در مورد تجزیه و تحلیل توصیفی است. این در مورد درک داده های شما است تا بتوانید تصمیمات مبتنی بر داده را بگیرید.
مجموعه داده خود را ایجاد کنید
برای ایجاد یک مجموعه داده BigQuery برای ذخیره مدل ML خود، مراحل زیر را انجام دهید:
- در کنسول Google Cloud، به صفحه BigQuery بروید. به صفحه BigQuery بروید
- در پنجره Explorer ، روی نام پروژه خود کلیک کنید.
- کلیک کنید
مشاهده کنشها > ایجاد مجموعه داده .
- در صفحه ایجاد مجموعه داده ، موارد زیر را انجام دهید:
- برای شناسه مجموعه داده ،
bqml_tutorial
وارد کنید. - برای نوع مکان ، Multi-region را انتخاب کنید و سپس EU (منطقه های متعدد در اتحادیه اروپا) را انتخاب کنید. مجموعه داده عمومی London Bicycle Hires در چند منطقه اتحادیه اروپا ذخیره می شود. مجموعه داده شما باید در همان مکان باشد.
- تنظیمات پیشفرض باقیمانده را همانطور که هستند رها کنید و روی ایجاد مجموعه داده کلیک کنید.
یک مدل k-means ایجاد کنید
اکنون که مجموعه داده شما تنظیم شده است، گام بعدی ایجاد یک مدل k-means با استفاده از داده ها است. می توانید با استفاده از دستور CREATE MODEL با گزینه model_type=kmeans
یک مدل k-means ایجاد و آموزش دهید.
برای اجرای کوئری و ایجاد مدل 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
- در پانل پیمایش، در بخش منابع ، نام پروژه خود را گسترش دهید، روی 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 دریافت کنید.
ایجاد پیکربندی کلید مشتری
برای احراز هویت و پیکربندی مرتبط با اتصال، ABAP SDK برای Google Cloud از جداول /GOOG/CLIENT_KEY
و /GOOG/SERVIC_MAP.
برای حفظ پیکربندی در جدول /GOOG/CLIENT_KEY
، مراحل زیر را انجام دهید:
- در SAP GUI، کد تراکنش SPRO را وارد کنید.
- روی SAP Reference IMG کلیک کنید.
- روی ABAP SDK برای 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 Scope | https://www.googleapis.com/auth/cloud-platform |
شناسه پروژه | abap-sdk-poc |
کلاس مجوز | /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. تبریک می گویم
کار بسیار عالی برای تکمیل آزمایشگاه کد "دریافت پیش بینی ها از مدل BigQuery Machine Learning (ML) با استفاده از ABAP SDK for Google Cloud"!
شما با موفقیت پیشبینیهای یک مدل یادگیری ماشین BigQuery را درست از درون سیستم SAP خود بازیابی کردهاید! سطح جدیدی از ادغام بین ABAP و Google Cloud Services را باز کرده اید. افقهای خود را با سایر نرمافزارهای توسعه نرمافزار توسعه نرمافزار ABAP هیجانانگیز برای آزمایشگاههای کد Google Cloud گسترش دهید:
- استفاده از Translation API با ABAP SDK برای Google Cloud
- یک شی بزرگ را با استفاده از تکه کردن در یک سطل فضای ذخیره سازی ابری آپلود کنید
- بازیابی اعتبارنامه/اسرار از 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
- قوانین فایروال را حذف کنید:
gcloud compute firewall-rules delete sapmachine
- حساب سرویس را حذف کنید:
gcloud iam service-accounts delete \
abap-sdk-bigquery-jobuser@abap-sdk-poc.iam.gserviceaccount.com