قراءة توقّعات الذكاء الاصطناعي في BigQuery في SAP باستخدام حزمة تطوير البرامج (SDK) لـ ABAP في Google Cloud

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- قبل البدء

6757b2fb50ddcc2d.png

  • شغِّل الأوامر التالية في 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

  1. من Cloud Console، انقر على تفعيل Cloud Shell في أعلى يسار الصفحة:

6757b2fb50ddcc2d.png

  1. شغِّل الأوامر التالية في Cloud Shell لتفعيل BigQuery API:
gcloud services enable bigquery.googleapis.com

عند تنفيذ الأمر بنجاح، من المفترض أن تظهر لك رسالة كما هو موضّح أدناه.

b5f52859df2c2f56.png

من المفترض أن تكون واجهة برمجة التطبيقات BigQuery API مفعّلة الآن في مشروعك على Google Cloud.

5- إنشاء حساب خدمة للوصول الآمن إلى BigQuery

للحصول على توقّعات تعلُّم الآلة بشكل آمن من نموذج تعلُّم الآلة في BigQuery، عليك إنشاء حساب خدمة يتضمّن دورَي مستخدم وظائف BigQuery ومُشاهد بيانات BigQuery، ما سيسمح لبرنامجك بتنفيذ طلبات البحث (كوظائف) ضمن المشروع وقراءة البيانات من الجداول. لا يمنح هذا الدور سوى الإذن اللازم لإنشاء مهام وقراءة البيانات، ما يقلل من المخاطر الأمنية.

إنشاء حساب خدمة

لإنشاء حساب خدمة بالدور المطلوب، اتّبِع الخطوات التالية:

  1. نفِّذ الأمر التالي في وحدة Cloud Shell الطرفية:
gcloud iam service-accounts create abap-sdk-bigquery-jobuser --display-name="Service Account for BigQuery Job user"
  1. أضِف الآن الأدوار المطلوبة إلى حساب الخدمة الذي تم إنشاؤه في الخطوة السابقة:
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 برقم تعريف مشروعك.

  1. للتأكّد من إضافة الدور، انتقِل إلى صفحة IAM. من المفترض أن يكون حساب الخدمة الذي أنشأته مُدرَجًا مع الدور الذي تم إسناده إليه.

6- إنشاء نموذج تعلُّم آلي في BigQuery

في هذا الدرس التطبيقي حول الترميز، سننشئ نموذجًا للخوارزمية التصنيفية لتجميع مجموعة بيانات تأجير الدراجات في لندن. يمكنك تطبيق خوارزمية الوسائل الحسابية لتجميع بياناتك في مجموعات. على عكس تعلُّم الآلة المُوجَّه الذي يتناول التحليلات التنبؤية، يتناول التعلم غير المُوجَّه التحليلات الوصفية. إنّ الأمر يتعلق بفهم بياناتك حتى تتمكّن من اتخاذ قرارات مستندة إلى البيانات.

إنشاء مجموعة البيانات

لإنشاء مجموعة بيانات BigQuery لتخزين نموذج الذكاء الاصطناعي، اتّبِع الخطوات التالية:

  1. في وحدة تحكّم Google Cloud، انتقِل إلى صفحة BigQuery. الانتقال إلى صفحة BigQuery
  2. في لوحة المستكشف، انقر على اسم مشروعك.
  3. انقر على 5cf3b742649f1e2c.png عرض الإجراءات > إنشاء مجموعة بيانات.

3fbc072041bfa313.png

  1. في صفحة إنشاء مجموعة بيانات، اتّبِع الخطوات التالية:
  • بالنسبة إلى معرّف مجموعة البيانات، أدخِل bqml_tutorial.
  • بالنسبة إلى نوع الموقع الجغرافي، اختَر مناطق متعدّدة، ثمّ اختَر الاتحاد الأوروبي (مناطق متعدّدة في الاتحاد الأوروبي). يتم تخزين مجموعة البيانات العامة "تأجير الدراجات في لندن" في المناطق المتعددة في الاتحاد الأوروبي. يجب أن تكون مجموعة البيانات في الموقع الجغرافي نفسه.
  • اترك الإعدادات التلقائية المتبقية كما هي، وانقر على إنشاء مجموعة بيانات. أنشئ صفحة مجموعة البيانات.

إنشاء نموذج "متوسطة k"

بعد إعداد مجموعة البيانات، تكون الخطوة التالية هي إنشاء نموذج "متوسطة عدد النقاط" باستخدام البيانات. يمكنك إنشاء نموذج "متوسطة عدد النقاط" وتدريبه باستخدام عبارة CREATE MODEL مع الخيار model_type=kmeans.

لتنفيذ طلب البحث وإنشاء نموذج "متوسطة عدد النقاط"، اتّبِع الخطوات التالية:

  1. انتقِل إلى صفحة BigQuery. الانتقال إلى BigQuery
  2. في لوحة المحرِّر، نفِّذ عبارة 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
  1. في لوحة التنقّل، ضمن قسم المراجع، وسِّع اسم مشروعك، وانقر على bqml_tutorial، ثمّ انقر على london_station_clusters.
  2. انقر على علامة التبويب المخطّط. يسرد مخطّط النموذج سمات المحطات الثلاث التي استخدمتها تكنولوجيات الذكاء الاصطناعي في BigQuery لإجراء التجميع. من المفترض أن يظهر المخطط على النحو التالي:

5f1feb313bd0f6a5.png

  1. انقر على علامة التبويب التقييم. تعرض علامة التبويب هذه عروضًا مرئية للمجموعات التي حدّدها نموذج "متوسطة عدد النقاط". ضمن السمات الرقمية، تعرض الرسوم البيانية الشريطية ما يصل إلى 10 من أهم قيم السمات الرقمية لكل مركز ثقل. يمكنك اختيار الميزات التي تريد عرضها من القائمة المنسدلة.

8f9b53971e33dc08.png

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، اتّبِع الخطوات التالية:

  1. في واجهة مستخدم SAP، أدخِل رمز المعاملة SPRO.
  2. انقر على SAP Reference IMG.
  3. انقر على حزمة تطوير برامج ABAP لـ Google Cloud ‏ > الإعدادات الأساسية > ضبط مفتاح العميل.

25871e639293b9ee.png

  1. يجب الحفاظ على القيم التالية في الحقول المدرَجة، واترك جميع الحقول الأخرى فارغة:

الحقل

القيمة

اسم مفتاح 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، اتّبِع الخطوات التالية:

  1. في واجهة مستخدم SAP، انتقِل إلى رمز المعاملة SE38 وأنشئ برنامج تقارير باسم ZDEMO_BIGQUERY_ML_PREDICT..
  2. في النافذة المنبثقة التي تظهر، قدِّم التفاصيل كما هو موضّح في الصورة التالية:

4cb32d50427df294.png

  1. في النافذة المنبثقة التالية، اختَر كائن محلي أو أدخِل اسم حزمة حسب الاقتضاء.
  2. في "محرر 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.
  1. احفظ التقرير وفعِّله.
  2. تنفيذ التقرير (F8).

عند تنفيذ الأمر بنجاح، من المفترض أن يظهر لك ناتج التقرير كما هو موضّح أدناه:

739e5685511fc9fc.png

6405542a597ed09f.png

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

حذف موارد فردية

  1. حذف وحدة الحوسبة:
gcloud compute instances delete abap-trial-docker
  1. حذف قواعد جدار الحماية:
gcloud compute firewall-rules delete sapmachine
  1. لحذف حساب الخدمة:
gcloud iam service-accounts delete \
    abap-sdk-bigquery-jobuser@abap-sdk-poc.iam.gserviceaccount.com