1. مقدمة
في هذا الدرس التطبيقي حول الترميز، ستُنشئ نموذج تعلُّم آلي في BigQuery وستحصل على توقّعات من هذا النموذج باستخدام حزمة تطوير البرامج (SDK) ABAP لـ Google Cloud.
ستستفيد من خدمات Google Cloud التالية:
- BigQuery
- Cloud Shell
ما ستُنشئه
عليك إنشاء ما يلي:
- نموذج تعلُّم آلي (ML) في BigQuery
- حساب خدمة لديه دور "مستخدم مهمة في BigQuery" للاتّصال بواجهة برمجة التطبيقات BigQuery API
- برنامج ABAP لاستدعاء BigQuery API والحصول على توقّعات من نموذج تعلُّم الآلة
2. المتطلبات
- متصفّح، مثل Chrome أو Firefox
- مشروع على Google Cloud تم تفعيل الفوترة فيه أو إنشاء حساب في فترة تجريبية مجانية لمدة 90 يومًا على Google Cloud Platform
- يجب تثبيت SAP GUI (Windows أو Java) في نظامك. إذا سبق تثبيت SAP GUI على الكمبيوتر المحمول، يمكنك الاتصال بخدمة SAP باستخدام عنوان IP الخارجي للجهاز الظاهري كعنوان IP لخادم التطبيقات. إذا كنت تستخدم جهاز Mac، يمكنك أيضًا تثبيت SAP GUI for Java المتاح في هذا الرابط.
3- قبل البدء
- في Google Cloud Console، في صفحة أداة اختيار المشاريع، اختَر مشروعًا على Google Cloud أو أنشِئه (على سبيل المثال:
abap-sdk-poc
). - تأكَّد من تفعيل الفوترة لمشروعك على Cloud. تعرَّف على كيفية التحقّق مما إذا كانت الفوترة مفعَّلة في مشروع. يمكنك تخطّي هذه الخطوة إذا كنت تستخدم حساب الفترة التجريبية المجانية لمدة 90 يومًا.
- ستستخدم Cloud Shell، وهي بيئة سطر أوامر تعمل في Google Cloud.
- من Cloud Console، انقر على تفعيل 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 1909 على Google Cloud Platform وتثبيت حزمة تطوير البرامج (SDK) ABAP لـ Google Cloud) والدرس التطبيقي 2 (ضبط مصادقة حزمة تطوير البرامج (SDK) ABAP باستخدام الرموز المميّزة لنظام SAP المستضاف على جهاز افتراضي في Compute Engine) قبل المتابعة في هذا الدرس التطبيقي.
- إذا أكملت ورشةَي التطوير codelab 1 وcodelab 2، كان من المفترض أن يتم توفير نظام ABAP Platform Trial 1909 على Google Cloud، بالإضافة إلى الإعداد المطلوب للمصادقة والاتصال.
- إذا لم تكن قد أكملت "مختبر الرموز البرمجية" 1 و"مختبر الرموز البرمجية" 2، لن تتوفّر لديك كل البنية الأساسية وإمكانية الاتصال المطلوبة لتنفيذ الخطوات الواردة في "مختبر الرموز البرمجية" هذا. لذلك، عليك إكمال ورشةَي التطوير 1 و2 قبل المتابعة في ورشة التطوير هذه.
4. تفعيل الإصدار 2 من واجهة برمجة تطبيقات BigQuery في مشروعك على Google Cloud
- من Cloud Console، انقر على تفعيل Cloud Shell في أعلى يسار الصفحة:
- شغِّل الأوامر التالية في Cloud Shell لتفعيل BigQuery API:
gcloud services enable bigquery.googleapis.com
عند تنفيذ الأمر بنجاح، من المفترض أن تظهر لك رسالة كما هو موضّح أدناه.
من المفترض أن تكون واجهة برمجة التطبيقات BigQuery API مفعّلة الآن في مشروعك على Google Cloud.
5- إنشاء حساب خدمة للوصول الآمن إلى BigQuery
للحصول على توقّعات تعلُّم الآلة بشكل آمن من نموذج تعلُّم الآلة في BigQuery، عليك إنشاء حساب خدمة يتضمّن دورَي مستخدم وظائف BigQuery ومُشاهد بيانات BigQuery، ما سيسمح لبرنامجك بتنفيذ طلبات البحث (كوظائف) ضمن المشروع وقراءة البيانات من الجداول. لا يمنح هذا الدور سوى الإذن اللازم لإنشاء مهام وقراءة البيانات، ما يقلل من المخاطر الأمنية.
إنشاء حساب خدمة
لإنشاء حساب خدمة بالدور المطلوب، اتّبِع الخطوات التالية:
- نفِّذ الأمر التالي في وحدة 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
في هذا الدرس التطبيقي حول الترميز، سننشئ نموذجًا للخوارزمية التصنيفية لتجميع مجموعة بيانات تأجير الدراجات في لندن. يمكنك تطبيق خوارزمية الوسائل الحسابية لتجميع بياناتك في مجموعات. على عكس تعلُّم الآلة المُوجَّه الذي يتناول التحليلات التنبؤية، يتناول التعلم غير المُوجَّه التحليلات الوصفية. إنّ الأمر يتعلق بفهم بياناتك حتى تتمكّن من اتخاذ قرارات مستندة إلى البيانات.
إنشاء مجموعة البيانات
لإنشاء مجموعة بيانات BigQuery لتخزين نموذج الذكاء الاصطناعي، اتّبِع الخطوات التالية:
- في وحدة تحكّم Google Cloud، انتقِل إلى صفحة BigQuery. الانتقال إلى صفحة BigQuery
- في لوحة المستكشف، انقر على اسم مشروعك.
- انقر على
عرض الإجراءات > إنشاء مجموعة بيانات.
- في صفحة إنشاء مجموعة بيانات، اتّبِع الخطوات التالية:
- بالنسبة إلى معرّف مجموعة البيانات، أدخِل
bqml_tutorial
. - بالنسبة إلى نوع الموقع الجغرافي، اختَر مناطق متعدّدة، ثمّ اختَر الاتحاد الأوروبي (مناطق متعدّدة في الاتحاد الأوروبي). يتم تخزين مجموعة البيانات العامة "تأجير الدراجات في لندن" في المناطق المتعددة في الاتحاد الأوروبي. يجب أن تكون مجموعة البيانات في الموقع الجغرافي نفسه.
- اترك الإعدادات التلقائية المتبقية كما هي، وانقر على إنشاء مجموعة بيانات.
إنشاء نموذج "متوسطة k"
بعد إعداد مجموعة البيانات، تكون الخطوة التالية هي إنشاء نموذج "متوسطة عدد النقاط" باستخدام البيانات. يمكنك إنشاء نموذج "متوسطة عدد النقاط" وتدريبه باستخدام عبارة CREATE MODEL مع الخيار model_type=kmeans
.
لتنفيذ طلب البحث وإنشاء نموذج "متوسطة عدد النقاط"، اتّبِع الخطوات التالية:
- انتقِل إلى صفحة 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.
- انقر على علامة التبويب المخطّط. يسرد مخطّط النموذج سمات المحطات الثلاث التي استخدمتها تكنولوجيات الذكاء الاصطناعي في BigQuery لإجراء التجميع. من المفترض أن يظهر المخطط على النحو التالي:
- انقر على علامة التبويب التقييم. تعرض علامة التبويب هذه عروضًا مرئية للمجموعات التي حدّدها نموذج "متوسطة عدد النقاط". ضمن السمات الرقمية، تعرض الرسوم البيانية الشريطية ما يصل إلى 10 من أهم قيم السمات الرقمية لكل مركز ثقل. يمكنك اختيار الميزات التي تريد عرضها من القائمة المنسدلة.
7- الحصول على توقّعات الذكاء الاصطناعي في BigQuery باستخدام حزمة تطوير البرامج (SDK) لـ ABAP في Google Cloud
بعد إعداد المتطلبات الأساسية من جانب Google Cloud، تكون مستعدًا لإكمال الخطوات في نظام SAP للحصول على توقّعات من نموذج تعلُّم الآلة باستخدام حزمة تطوير البرامج (SDK) لـ ABAP في Google Cloud.
إنشاء إعدادات مفتاح العميل
بالنسبة إلى الإعدادات ذات الصلة بالمصادقة والاتصال، تستخدم حزمة ABAP SDK لـ Google Cloud الجدولَين /GOOG/CLIENT_KEY
و/GOOG/SERVIC_MAP.
.
للحفاظ على الإعدادات في جدول /GOOG/CLIENT_KEY
، اتّبِع الخطوات التالية:
- في واجهة مستخدم SAP، أدخِل رمز المعاملة SPRO.
- انقر على SAP Reference IMG.
- انقر على حزمة تطوير برامج ABAP لـ 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، اتّبِع الخطوات التالية:
- في واجهة مستخدم 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. تهانينا
لقد أتممت بنجاح دورة تعلم "الحصول على توقّعات من نموذج تعلُّم الآلة في BigQuery باستخدام حزمة تطوير البرامج (SDK) لـ ABAP في Google Cloud".
لقد استردت بنجاح توقّعات نموذج تعلُّم الآلة في BigQuery، مباشرةً من داخل نظام SAP. لقد حقّقت مستوى جديدًا من الدمج بين ABAP وخدمات Google Cloud. يمكنك توسيع آفاقك من خلال الاطّلاع على دروس تطبيقية أخرى مثيرة للاهتمام حول حزمة تطوير البرامج (SDK) ABAP لـ Google Cloud:
- استخدام واجهة برمجة التطبيقات Translation API مع حزمة تطوير البرامج (SDK) ABAP لـ Google Cloud
- تحميل ملف كبير إلى حزمة Cloud Storage باستخدام تقسيم الملف إلى أجزاء
- استرداد بيانات الاعتماد/السِرّ من Secret Manager باستخدام حزمة تطوير البرامج (SDK) لـ ABAP في Google Cloud
- الاتصال بتطبيق Vertex AI test-bison من ABAP
9. تَنظيم
إذا كنت لا تريد مواصلة استخدام مجموعات الاختبار البرمجي الإضافية المرتبطة بحزمة تطوير البرامج (SDK) لـ ABAP في 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