Google Cloud के लिए ABAP SDK टूल का इस्तेमाल करके, SAP में BigQuery ML के अनुमान पढ़ना

1. परिचय

इस कोडलैब में, BigQuery में मशीन लर्निंग (एमएल) मॉडल बनाया जा सकता है. साथ ही, Google Cloud के लिए ABAP SDK टूल का इस्तेमाल करके, इस मॉडल से अनुमान लगाए जा सकते हैं.

आपको Google Cloud की इन सेवाओं का फ़ायदा मिलेगा:

  • BigQuery
  • Cloud Shell

आपको क्या बनाना होगा

आपको ये चीज़ें बनानी होंगी:

  • BigQuery मशीन लर्निंग (एमएल) मॉडल.
  • BigQuery API को कॉल करने के लिए, BigQuery जॉब यूज़र की भूमिका वाला सेवा खाता.
  • BigQuery API को कॉल करने और एमएल मॉडल से अनुमान पाने के लिए, एबीएपी प्रोग्राम.

2. ज़रूरी शर्तें

  • Chrome या Firefox जैसा ब्राउज़र.
  • आपके पास ऐसा Google Cloud प्रोजेक्ट होना चाहिए जिसमें बिलिंग की सुविधा चालू हो या Google Cloud Platform के लिए, 90 दिनों तक मुफ़्त में आज़माने की सुविधा वाला खाता बनाएं.
  • आपके सिस्टम में SAP GUI (Windows या Java) इंस्टॉल किया गया है. अगर आपके लैपटॉप पर SAP GUI पहले से इंस्टॉल है, तो ऐप्लिकेशन सर्वर आईपी के तौर पर वीएम के बाहरी आईपी पते का इस्तेमाल करके, SAP से कनेक्ट करें. अगर आप Mac पर हैं, तो इस लिंक में उपलब्ध Java के लिए SAP GUI को भी इंस्टॉल किया जा सकता है.

3. शुरू करने से पहले

6757b2fb50ddcc2d.png

  • अपने खाते की पुष्टि करने और डिफ़ॉल्ट प्रोजेक्ट को 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 सिस्टम का ऐक्सेस होना चाहिए जिसमें Google Cloud के लिए, ABAP SDK टूल इंस्टॉल किया गया हो.
  • इस कोडलैब का इस्तेमाल करने से पहले, आपको कोडलैब 1 (Google Cloud Platform पर ABAP Platform Trial 1909 इंस्टॉल करना और Google Cloud के लिए ABAP SDK इंस्टॉल करना) और कोडलैब 2 (Compute Engine VM पर SAP होस्ट किए गए SAP होस्ट किए गए टोकन का इस्तेमाल करके, ABAP SDK टूल की मदद से पुष्टि करने की सुविधा कॉन्फ़िगर करना) को पूरा करना होगा.
  • अगर आपने कोडलैब 1 और कोडलैब 2 को पूरा कर लिया है, तो इससे आपके लिए Google Cloud पर ABAP प्लैटफ़ॉर्म ट्रायल 1909 सिस्टम उपलब्ध होगा. साथ ही, पुष्टि और कनेक्टिविटी के लिए ज़रूरी सेटअप भी हो जाएगा.
  • अगर आपने कोडलैब 1 और कोडलैब 2 को पूरा नहीं किया है, तो इस कोडलैब में दिए गए चरणों को पूरा करने के लिए, आपके पास सभी ज़रूरी इंफ़्रास्ट्रक्चर और कनेक्टिविटी उपलब्ध नहीं होंगी. इसलिए, इस कोडलैब का इस्तेमाल करने से पहले आपको कोडलैब 1 और कोडलैब 2 को पूरा करना होगा.

4. अपने Google Cloud प्रोजेक्ट में BigQuery API V2 चालू करना

  1. Cloud Console में, सबसे ऊपर दाएं कोने में मौजूद Cloud Shell चालू करें पर क्लिक करें:

6757b2fb50ddcc2d.png

  1. BigQuery API को चालू करने के लिए, Cloud Shell में ये निर्देश चलाएं:
gcloud services enable bigquery.googleapis.com

पासवर्ड सेट अप करने के बाद, आपको नीचे दिखाया गया मैसेज दिखेगा

b5f52859df2c2f56.png

अब आपको अपने Google Cloud प्रोजेक्ट में BigQuery API चालू करना होगा.

5. BigQuery का सुरक्षित ऐक्सेस पाने के लिए सेवा खाता बनाना

BigQuery ML मॉडल से एमएल अनुमान सुरक्षित तरीके से पाने के लिए, आपको 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'

ऊपर दिया गया निर्देश, Google Cloud प्रोजेक्ट के लिए प्लेसहोल्डर के तौर पर abap-sdk-poc का इस्तेमाल करता है. abap-sdk-poc की जगह अपना प्रोजेक्ट आईडी डालें.

  1. यह पुष्टि करने के लिए कि भूमिका जोड़ दी गई है, IAM पेज पर जाएं. आपका बनाया गया सेवा खाता, उसे असाइन की गई भूमिका के साथ सूची में दिखना चाहिए.

6. BigQuery मशीन लर्निंग मॉडल बनाना

इस कोडलैब में, हम लंदन में किराये पर साइकल लेने वाले लोगों के डेटासेट को इकट्ठा करने के लिए, k-मीन मॉडल बनाएंगे. अपने डेटा को क्लस्टर में ग्रुप करने के लिए, k-means एल्गोरिदम का इस्तेमाल किया जा सकता है. निगरानी में रखे गए मशीन लर्निंग सिस्टम में, अनुमानित आंकड़ों के बारे में बताया जाता है, जबकि अनसुपरवाइज़्ड लर्निंग में जानकारी देने वाले आंकड़ों की जानकारी होती है. यह आपके डेटा को समझने के बारे में है, ताकि आप डेटा के आधार पर फ़ैसले ले सकें.

अपना डेटासेट बनाना

अपने एमएल मॉडल को स्टोर करने के लिए, BigQuery डेटासेट बनाने के लिए, यह तरीका अपनाएं:

  1. Google Cloud Console में, BigQuery पेज पर जाएं. BigQuery पेज पर जाएं
  2. एक्सप्लोरर पैनल में, अपने प्रोजेक्ट के नाम पर क्लिक करें.
  3. 5cf3b742649f1e2c.png पर क्लिक करें कार्रवाइयां देखें > डेटासेट बनाएं.

3fbc072041bfa313.png

  1. डेटासेट बनाएं पेज पर, यह तरीका अपनाएं:
  • डेटासेट आईडी के लिए, bqml_tutorial डालें.
  • जगह के टाइप के लिए, एक से ज़्यादा क्षेत्र चुनें. इसके बाद, ईयू (यूरोपियन यूनियन में एक से ज़्यादा क्षेत्र) चुनें. लंदन साइकल हाइर्स का सार्वजनिक डेटासेट, ईयू (यूरोपीय संघ) के कई इलाकों में सेव है. आपका डेटासेट एक ही जगह पर होना चाहिए.
  • बाकी डिफ़ॉल्ट सेटिंग में कोई बदलाव न करें और डेटासेट बनाएं पर क्लिक करें. डेटासेट पेज बनाएं.

k-मीन वाला मॉडल बनाना

आपका डेटासेट सेट अप हो गया है, अब अगला कदम है, डेटा का इस्तेमाल करके k-मीन वाला मॉडल बनाना. मॉडल बनाएं स्टेटमेंट का इस्तेमाल करके, के-मीन (k-मीन) मॉडल को ट्रेन किया जा सकता है. इसके लिए, model_type=kmeans विकल्प चुना जा सकता है.

क्वेरी चलाने और k-मीन वाला मॉडल बनाने के लिए, नीचे दिया गया तरीका अपनाएं:

  1. BigQuery पेज पर जाएं. BigQuery पर जाएं
  2. एडिटर पैनल में, नीचे दिया गया एसक्यूएल स्टेटमेंट चलाएं:
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 ML का इस्तेमाल करके, तीन स्टेशन एट्रिब्यूट का इस्तेमाल किया जाता है. स्कीमा ऐसा दिखना चाहिए:

5f1feb313bd0f6a5.png

  1. आकलन टैब पर क्लिक करें. यह टैब, k-मीन मॉडल से पहचाने गए क्लस्टर के विज़ुअलाइज़ेशन दिखाता है. संख्या वाली सुविधाएं में, बार ग्राफ़ हर सेंट्रोइड के लिए सबसे अहम न्यूमेरिक सुविधा की 10 वैल्यू तक दिखाता है. ड्रॉप-डाउन मेन्यू से, विज़ुअलाइज़ करने के लिए सुविधाओं को चुना जा सकता है.

8f9b53971e33dc08.png

7. Google Cloud के लिए ABAP SDK टूल का इस्तेमाल करके, BigQuery ML के अनुमान पाना

आपने Google Cloud पर ज़रूरी शर्तें सेट अप कर ली हैं. अब आप अपने SAP सिस्टम में दिए गए चरणों को पूरा करने के लिए तैयार हैं. इन चरणों की मदद से, आपको Google Cloud के लिए ABAP SDK टूल की मदद से, एमएल मॉडल से अनुमान मिल जाएंगे.

क्लाइंट कुंजी का कॉन्फ़िगरेशन बनाना

पुष्टि और कनेक्टिविटी से जुड़े कॉन्फ़िगरेशन के लिए, Google Cloud का ABAP SDK टूल, /GOOG/CLIENT_KEY और /GOOG/SERVIC_MAP. टेबल का इस्तेमाल करता है

/GOOG/CLIENT_KEY टेबल में कॉन्फ़िगरेशन बनाए रखने के लिए, यह तरीका अपनाएं:

  1. SAP GUI में, लेन-देन कोड SPRO डालें.
  2. SAP रेफ़रंस IM पर क्लिक करें.
  3. Google Cloud के लिए ABAP SDK टूल > बुनियादी सेटिंग > क्लाइंट कुंजी कॉन्फ़िगर करें

25871e639293b9ee.png

  1. सूची में शामिल फ़ील्ड के लिए इन वैल्यू को बनाए रखें और अन्य सभी फ़ील्ड को खाली छोड़ दें:

फ़ील्ड

वैल्यू

Google क्लाउड कुंजी का नाम

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

BigQuery एमएल मॉडल से अनुमान पाने के लिए, एबीएपी रिपोर्ट बनाना

एबीएपी रिपोर्ट बनाने के लिए, यह तरीका अपनाएं:

  1. अपने SAP GUI में, ट्रांज़ैक्शन कोड SE38 पर जाएं और ZDEMO_BIGQUERY_ML_PREDICT. नाम से रिपोर्ट प्रोग्राम बनाएं
  2. स्क्रीन पर खुलने वाले पॉप-अप में जानकारी डालें, जैसा कि इस इमेज में दिखाया गया है:

4cb32d50427df294.png

  1. अगले पॉप-अप में, लोकल ऑब्जेक्ट चुनें या ज़रूरत के हिसाब से पैकेज का नाम डालें.
  2. एबीएपी एडिटर में, यह कोड जोड़ें:
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. बधाई हो

"Google Cloud के लिए ABAP SDK टूल का इस्तेमाल करके, BigQuery मशीन लर्निंग (एमएल) मॉडल की मदद से अनुमान लगाना" सेक्शन को पूरा करके आपने शानदार काम किया है codelab!

आपने अपने SAP सिस्टम से BigQuery मशीन लर्निंग मॉडल के अनुमान हासिल कर लिए हैं! आपने ABAP और Google Cloud Services के बीच इंटिग्रेशन का एक नया लेवल अनलॉक किया है. Google Cloud कोडलैब के लिए बने अन्य शानदार ABAP SDK टूल की मदद से, अपनी सोच का दायरा बढ़ाएं:

  • Google Cloud के लिए ABAP SDK टूल के साथ Translation API का इस्तेमाल करना
  • चंकिंग का इस्तेमाल करके, किसी बड़े ऑब्जेक्ट को Cloud Storage बकेट में अपलोड करना
  • Google Cloud के लिए, ABAP SDK टूल की मदद से, सीक्रेट मैनेजर से क्रेडेंशियल/सीक्रेट हासिल करना
  • ABAP से Vertex AI टेस्ट-बायसन को कॉल करें

9. व्यवस्थित करें

अगर आपको Google Cloud के लिए, ABAP SDK टूल से जुड़े अतिरिक्त कोडलैब का इस्तेमाल नहीं करना है, तो कृपया क्लीनअप की प्रोसेस पूरी करें.

प्रोजेक्ट मिटाएं

  • 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