Czytanie prognoz BigQuery ML w SAP za pomocą ABAP SDK dla Google Cloud

1. Wprowadzenie

W tym ćwiczeniu w Codelab utworzysz model uczenia maszynowego w BigQuery i uzyskasz prognozy z tego modelu za pomocą pakietu ABAP SDK dla Google Cloud.

Korzystasz z tych usług Google Cloud:

  • BigQuery
  • Cloud Shell

Co utworzysz

Utwórz:

  • model systemów uczących się BigQuery.
  • konto usługi z rolą „użytkownik zadań BigQuery” do wywoływania interfejsu BigQuery API.
  • program ABAP do wywoływania interfejsu BigQuery API i uzyskiwania prognoz z modelu ML;

2. Wymagania

  • przeglądarkę, np. Chrome lub Firefox;
  • Projekt Google Cloud z włączonymi płatnościami lub utwórz konto na 90-dniowy okres próbny w Google Cloud Platform.
  • interfejs graficzny SAP (wersja na system Windows lub Java) zainstalowany w systemie; Jeśli interfejs SAP GUI jest już zainstalowany na laptopie, połącz się z SAP, używając zewnętrznego adresu IP maszyny wirtualnej jako adresu IP serwera aplikacji. Jeśli używasz komputera Mac, możesz też zainstalować interfejs SAP dla Javy, który jest dostępny pod tym linkiem.

3. Zanim zaczniesz

6757b2fb50ddcc2d.png

  • Uruchom te polecenia w Cloud Shell, aby uwierzytelnić swoje konto i ustawić projekt abap-sdk-poc jako domyślny. W tym przykładzie użyto strefy us-west4-b. W razie potrzeby zmień projekt i strefę w poniższych poleceniach zgodnie ze swoimi preferencjami.
gcloud auth login
gcloud config set project abap-sdk-poc
gcloud config set compute/zone us-west4-b
  • Musisz mieć dostęp do systemu SAP z zainstalowanym pakietem ABAP SDK for Google Cloud.
  • Zanim przejdziesz do tego ćwiczenia, musisz ukończyć ćwiczenie 1 (Zainstaluj wersję próbną platformy ABAP 1909 w Google Cloud Platform i zainstaluj pakiet ABAP SDK dla Google Cloud) oraz ćwiczenie 2 (Skonfiguruj uwierzytelnianie pakietu ABAP SDK za pomocą tokenów dla SAP hostowanego w maszynie wirtualnej Compute Engine).
  • Jeśli wykonasz ćwiczenia 1 i 2, w Google Cloud zostanie utworzony system ABAP Platform Trial 1909 wraz z wymaganą konfiguracją uwierzytelniania i łączności.
  • Jeśli nie ukończysz ćwiczeń 1 i 2, nie będziesz mieć całej wymaganej infrastruktury ani połączeń, aby wykonać czynności opisane w tym ćwiczeniu. Dlatego zanim przejdziesz do tego ćwiczenia, musisz ukończyć ćwiczenia 1 i 2.

4. Włączanie interfejsu BigQuery API 2 w projekcie Google Cloud

  1. W Cloud Console w prawym górnym rogu kliknij Aktywuj Cloud Shell:

6757b2fb50ddcc2d.png

  1. Aby włączyć interfejs BigQuery API, uruchom w Cloud Shell te polecenia:
gcloud services enable bigquery.googleapis.com

Po pomyślnym wykonaniu powinien wyświetlić się komunikat podobny do tego

b5f52859df2c2f56.png

Interfejs BigQuery API powinien być teraz włączony w projekcie Google Cloud.

5. Tworzenie konta usługi w celu bezpiecznego dostępu do BigQuery

Aby bezpiecznie uzyskiwać prognozy ML z modelu ML w BigQuery, musisz utworzyć konto usługi z rolami Użytkownik zapytań BigQueryWyświetlający dane BigQuery, które umożliwią programowi wykonywanie zapytań (jako zadań) w ramach projektu i odczytywanie danych z tabel. Ta rola przyznaje tylko niezbędne uprawnienia do tworzenia zadań i odczytu danych, co minimalizuje zagrożenia dla bezpieczeństwa.

utworzyć konto usługi,

Aby utworzyć konto usługi z wymaganą rolą, wykonaj te czynności:

  1. Uruchom w terminalu Cloud Shell to polecenie:
gcloud iam service-accounts create abap-sdk-bigquery-jobuser --display-name="Service Account for BigQuery Job user"
  1. Teraz dodaj wymagane role do konta usługi utworzonego w poprzednim kroku:
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'

W powyższym poleceniu abap-sdk-poc jest miejscem zastępczym dla projektu Google Cloud. Zastąp abap-sdk-poc identyfikatorem projektu.

  1. Aby sprawdzić, czy dodano rolę, otwórz stronę IAM. Utworzone konto usługi powinno być wymienione wraz z przypisaną do niego rolą.

6. Tworzenie modelu systemów uczących się BigQuery

W tym ćwiczeniu utworzymy model k-średnich, aby utworzyć klastry zbioru danych o wynajmowaniu rowerów w Londynie. Aby pogrupować dane w klastry, możesz zastosować algorytm k-średnich. W przeciwieństwie do nadzorowanego uczenia maszynowego, które polega na analizie predykcyjnej, uczenie nienadzorowane polega na analizie opisowej. Chodzi o to, aby zrozumieć swoje dane, aby móc podejmować decyzje na ich podstawie.

Tworzenie zbioru danych

Aby utworzyć zbiór danych BigQuery, w którym będzie przechowywany model ML, wykonaj te czynności:

  1. W konsoli Google Cloud otwórz stronę BigQuery. Otwórz stronę BigQuery
  2. W panelu Eksplorator kliknij nazwę projektu.
  3. Kliknij 5cf3b742649f1e2c.png Wyświetl działania > Utwórz zbiór danych.

3fbc072041bfa313.png

  1. Na stronie Utwórz zbiór danych wykonaj te czynności:
  • W polu Identyfikator zbioru danych wpisz bqml_tutorial.
  • Jako Typ lokalizacji wybierz Wiele regionów, a następnie UE (wiele regionów w Unii Europejskiej). Publiczny zbiór danych London Bicycle Hires jest przechowywany w regionie obejmującym wiele regionów w Unii Europejskiej. Zbiór danych musi znajdować się w tym samym miejscu.
  • Pozostaw pozostałe ustawienia domyślne bez zmian i kliknij Utwórz zbiór danych. Strona tworzenia zbioru danych.

Tworzenie modelu K-średnich

Po skonfigurowaniu zbioru danych następnym krokiem jest utworzenie modelu K-średnich na podstawie tych danych. Model k-średnich możesz utworzyć i trenować, używając instrukcji CREATE MODEL z opcją model_type=kmeans.

Aby wykonać zapytanie i utworzyć model k-średnich:

  1. Otwórz stronę BigQuery. Otwórz BigQuery
  2. W panelu edytora uruchom to polecenie 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. W panelu nawigacyjnym w sekcji Zasoby rozwiń nazwę projektu, kliknij bqml_tutorial, a następnie kliknij london_station_clusters.
  2. Kliknij kartę Schemat. Schemat modelu zawiera 3 atrybuty stacji, których BigQuery ML używał do przeprowadzania podziału na grupy. Schemat powinien wyglądać tak:

5f1feb313bd0f6a5.png

  1. Kliknij kartę Ocena. Ta karta zawiera wizualizacje klastrów zidentyfikowanych przez model k-średnich. W sekcji Funkcje liczbowe wykresy słupkowe pokazują do 10 najważniejszych wartości funkcji liczbowych dla każdego centroidu. W menu możesz wybrać, które funkcje mają być wizualizowane.

8f9b53971e33dc08.png

7. Uzyskiwanie prognoz BigQuery ML za pomocą ABAP SDK for Google Cloud

Po skonfigurowaniu wymagań wstępnych po stronie Google Cloud możesz wykonać czynności w systemie SAP, aby uzyskać prognozy z modelu ML za pomocą pakietu ABAP SDK dla Google Cloud.

Tworzenie konfiguracji klucza klienta

W przypadku konfiguracji związanej z uwierzytelnianiem i łącznością pakiet ABAP SDK for Google Cloud używa tabel /GOOG/CLIENT_KEY i /GOOG/SERVIC_MAP..

Aby zachować konfigurację w tabeli /GOOG/CLIENT_KEY, wykonaj te czynności:

  1. W interfejsie graficznym SAP wpisz kod transakcji SPRO.
  2. Kliknij SAP Reference IMG (Referencyjny obraz SAP).
  3. Kliknij ABAP SDK for Google Cloud > Ustawienia podstawowe > Skonfiguruj klucz klienta.

25871e639293b9ee.png

  1. Zachowaj podane niżej wartości w wymienionych polach, a pozostałe pozostaw puste:

Pole

Wartość

Nazwa klucza Google Cloud

BIGQUERY_ML

Nazwa konta usługi Google Cloud

abap-sdk-bigquery-jobuser@abap-sdk-poc.iam.gserviceaccount.com

Zakres Google Cloud

https://www.googleapis.com/auth/cloud-platform

Identyfikator projektu

abap-sdk-poc

Klasa autoryzacji

/GOOG/CL_AUTH_GOOGLE

Tworzenie raportu ABAP w celu uzyskiwania prognoz z modelu BigQuery ML

Aby utworzyć raport ABAP, wykonaj te czynności:

  1. W interfejsie graficznym SAP otwórz kod transakcji SE38 i utwórz program raportów o nazwie ZDEMO_BIGQUERY_ML_PREDICT..
  2. W wyskakującym okienku podaj szczegóły, jak pokazano na tym obrazie:

4cb32d50427df294.png

  1. W wyskakującym okienku wybierz Obiekt lokalny lub podaj nazwę pakietu.
  2. W edytorze ABAP dodaj ten kod:
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. Zapisz i aktywuj raport.
  2. Wykonaj raport (F8).

Po pomyślnym wykonaniu polecenia powinny się wyświetlić dane wyjściowe raportu, jak pokazano poniżej:

739e5685511fc9fc.png

6405542a597ed09f.png

8. Gratulacje

Gratulacje! Udało Ci się ukończyć ćwiczenie „Pozyskiwanie prognoz z modelu systemów uczących się BigQuery za pomocą pakietu ABAP SDK dla Google Cloud”.

Udało Ci się pobrać prognozy modelu systemów uczących się BigQuery bezpośrednio z systemu SAP. Udało Ci się osiągnąć nowy poziom integracji ABAP z usługami Google Cloud. Poszerz swoje horyzonty dzięki innym interesującym Codelab dotyczącym pakietu ABAP SDK for Google Cloud:

  • Korzystanie z interfejsu Translation API z pakietem ABAP SDK for Google Cloud
  • Przesyłanie dużego obiektu do zasobnika Cloud Storage za pomocą dzielenia na części
  • Pobieranie danych logowania i obiektów tajnych z usługi Secret Manager za pomocą pakietu ABAP SDK for Google Cloud
  • Wywoływanie usługi Vertex AI test-bison z ABAP

9. Czyszczenie danych

Jeśli nie chcesz kontynuować dodatkowych samouczków związanych z pakietem ABAP SDK dla Google Cloud, przejdź do czyszczenia.

Usuwanie projektu

  • Usuń projekt Google Cloud:
gcloud projects delete abap-sdk-poc

Usuwanie poszczególnych zasobów

  1. Usuń instancję obliczeniową:
gcloud compute instances delete abap-trial-docker
  1. Usuń reguły zapory sieciowej:
gcloud compute firewall-rules delete sapmachine
  1. Usuń konto usługi:
gcloud iam service-accounts delete \
    abap-sdk-bigquery-jobuser@abap-sdk-poc.iam.gserviceaccount.com