1. Wprowadzenie
W tym ćwiczeniu utworzysz model uczenia maszynowego w BigQuery i uzyskasz z niego prognozy za pomocą pakietu ABAP SDK for Google Cloud.
Będziesz korzystać z tych usług Google Cloud:
- BigQuery
- Cloud Shell
Co utworzysz
Utworzysz:
- Model uczenia maszynowego w BigQuery.
- Konto usługi z rolą użytkownika 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ądarka, np. Chrome lub Firefox;
- Projekt Google Cloud z włączonym rozliczeniem lub utwórz 90-dniowe konto próbne w Google Cloud Platform.
- SAP GUI (Windows lub Java) zainstalowany w systemie. Jeśli 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 korzystasz z komputera Mac, możesz też zainstalować SAP GUI for Java, który jest dostępny pod tym linkiem.
3. Zanim zaczniesz
- W konsoli Google Cloud na stronie wyboru projektu wybierz lub utwórz projekt Google Cloud (np.
abap-sdk-poc). - Sprawdź, czy w projekcie Cloud włączone są płatności. Dowiedz się, jak sprawdzić, czy w projekcie są włączone płatności. Pomiń ten krok, jeśli korzystasz z 90-dniowego konta próbnego.
- Będziesz używać Cloud Shell, czyli środowiska wiersza poleceń działającego w Google Cloud.
- W konsoli Cloud kliknij Aktywuj Cloud Shell w prawym górnym rogu:

- Aby uwierzytelnić się na koncie i ustawić domyślny projekt na
abap-sdk-poc, uruchom w Cloud Shell te polecenia: Jako przykładu używamy strefyus-west4-b. W razie potrzeby zmień projekt i strefę w tych 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 wykonać ćwiczenie 1 (Instalowanie wersji próbnej platformy ABAP 1909 w Google Cloud Platform i pakietu ABAP SDK for Google Cloud) i ćwiczenie 2 (Konfigurowanie uwierzytelniania za pomocą pakietu ABAP SDK przy użyciu tokenów dla systemu SAP hostowanego w maszynie wirtualnej Compute Engine).
- Jeśli masz za sobą ćwiczenia 1 i 2, powinna być już dla Ciebie dostępna wersja próbna platformy ABAP 1909 w Google Cloud 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 i połączeń, aby wykonać czynności opisane w tym ćwiczeniu. Dlatego przed rozpoczęciem tego ćwiczenia musisz ukończyć ćwiczenie 1 i ćwiczenie 2.
4. Włączanie BigQuery API V2 w projekcie Google Cloud
- W konsoli Cloud kliknij Aktywuj Cloud Shell w prawym górnym rogu:

- Aby włączyć interfejs BigQuery API, uruchom w Cloud Shell te polecenia:
gcloud services enable bigquery.googleapis.com
Po pomyślnym wykonaniu polecenia powinien wyświetlić się komunikat podobny do tego poniżej.

Interfejs BigQuery API powinien być teraz włączony w projekcie Google Cloud.
5. Tworzenie konta usługi na potrzeby bezpiecznego dostępu do BigQuery
Aby bezpiecznie uzyskiwać prognozy uczenia maszynowego z modelu BigQuery ML, musisz utworzyć konto usługi z rolami Użytkownik zadań BigQuery i Wyświetlający dane BigQuery, które umożliwią programowi uruchamianie zapytań (jako zadań) w projekcie i odczytywanie danych z tabel. Ta rola przyznaje tylko niezbędne uprawnienia do tworzenia zadań i odczytywania danych, co minimalizuje ryzyko związane z bezpieczeństwem.
utworzyć konto usługi,
Aby utworzyć konto usługi z wymaganą rolą, wykonaj te czynności:
- Uruchom w terminalu Cloud Shell to polecenie:
gcloud iam service-accounts create abap-sdk-bigquery-jobuser --display-name="Service Account for BigQuery Job user"
- 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 symbolem zastępczym projektu Google Cloud. Zastąp abap-sdk-poc identyfikatorem projektu.
- Aby sprawdzić, czy rola została dodana, otwórz stronę Uprawnienia. Utworzone konto usługi powinno być widoczne wraz z przypisaną do niego rolą.
6. Tworzenie modelu uczenia maszynowego w BigQuery
W tym ćwiczeniu utworzymy model k-średnich do klastrowania zbioru danych dotyczących wypożyczeń rowerów w Londynie. Możesz zastosować algorytm k-średnich, aby pogrupować dane w klastry. W przeciwieństwie do nadzorowanego uczenia maszynowego, które służy do analizy predykcyjnej, uczenie nienadzorowane służy do analizy opisowej. Chodzi o zrozumienie danych, aby móc podejmować decyzje na ich podstawie.
Tworzenie zbioru danych
Aby utworzyć zbiór danych BigQuery do przechowywania modelu ML, wykonaj te czynności:
- W konsoli Google Cloud otwórz stronę BigQuery. Otwórz stronę BigQuery
- W panelu Eksplorator kliknij nazwę projektu.
- Kliknij
Wyświetl działania > Utwórz zbiór danych.

- 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 EU (wiele regionów w Unii Europejskiej). Publiczny zbiór danych London Bicycle Hires jest przechowywany w wielu regionach w UE. Zbiór danych musi znajdować się w tej samej lokalizacji.
- Pozostaw inne ustawienia domyślne bez zmian i kliknij Utwórz zbiór danych.

Tworzenie modelu k-średnich
Po skonfigurowaniu zbioru danych następnym krokiem jest utworzenie na podstawie tych danych modelu k-średnich. Model k-średnich możesz utworzyć i wytrenować za pomocą instrukcji CREATE MODEL z opcją model_type=kmeans.
Aby uruchomić zapytanie i utworzyć model k-średnich, wykonaj te czynności:
- Otwórz stronę BigQuery. Otwórz BigQuery
- W panelu edytora uruchom następującą instrukcję 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
- W panelu użytkownika w sekcji Zasoby rozwiń nazwę projektu, kliknij bqml_tutorial, a następnie london_station_clusters.
- Kliknij kartę Schemat. Schemat modelu zawiera listę 3 atrybutów stacji, których BigQuery ML użyło do przeprowadzenia klastrowania. Schemat powinien wyglądać tak:

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

7. Pobieranie prognoz BigQuery ML przy użyciu pakietu 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 uczenia maszynowego przy użyciu pakietu ABAP SDK for Google Cloud.
Tworzenie konfiguracji klucza klienta
W przypadku konfiguracji związanej z uwierzytelnianiem i łącznością pakiet ABAP SDK for Google Cloud korzysta z tabel /GOOG/CLIENT_KEY i /GOOG/SERVIC_MAP..
Aby zachować konfigurację w tabeli /GOOG/CLIENT_KEY, wykonaj te czynności:
- W SAP GUI wpisz kod transakcji SPRO.
- Kliknij SAP Reference IMG (SAP Reference IMG).
- Kliknij ABAP SDK for Google Cloud > Ustawienia podstawowe > Skonfiguruj klucz klienta.

- W przypadku wymienionych poniżej pól zachowaj podane wartości, a wszystkie pozostałe pola 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:
- W SAP GUI otwórz kod transakcji
SE38i utwórz program raportu o nazwieZDEMO_BIGQUERY_ML_PREDICT.. - W wyskakującym okienku podaj szczegóły zgodnie z informacjami na tym obrazie:

- W następnym wyskakującym okienku wybierz Local Object (Obiekt lokalny) lub podaj nazwę pakietu.
- 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.
- Zapisz i aktywuj raport.
- Wykonaj raport (F8).
Po pomyślnym wykonaniu powinien się wyświetlić raport podobny do tego:


8. Gratulacje
Świetna robota! Ćwiczenie „Uzyskiwanie prognoz z modelu uczenia maszynowego w BigQuery za pomocą pakietu ABAP SDK for Google Cloud” zostało ukończone.
Udało Ci się pobrać prognozy modelu uczenia maszynowego w BigQuery bezpośrednio z systemu SAP. Osiągnięto nowy poziom integracji między ABAP a usługami Google Cloud. Poszerz horyzonty dzięki innym ciekawym ćwiczeniom dotyczącym pakietu ABAP SDK for Google Cloud:
- Korzystanie z interfejsu Translation API za pomocą pakietu ABAP SDK for Google Cloud
- Przesyłanie dużego obiektu do zasobnika Cloud Storage z użyciem fragmentowania
- Pobieranie danych logowania i obiektów tajnych z usługi Secret Manager za pomocą pakietu ABAP SDK for Google Cloud
- Wywoływanie test-bison w Vertex AI z ABAP
9. Czyszczenie danych
Jeśli nie chcesz kontynuować pracy z dodatkowymi ćwiczeniami związanymi z pakietem ABAP SDK for Google Cloud, przejdź do sekcji czyszczenia.
Usuwanie projektu
- Usuń projekt Google Cloud:
gcloud projects delete abap-sdk-poc
Usuwanie poszczególnych zasobów
- Usuń instancję obliczeniową:
gcloud compute instances delete abap-trial-docker
- Usuń reguły zapory sieciowej:
gcloud compute firewall-rules delete sapmachine
- Usuń konto usługi:
gcloud iam service-accounts delete \
abap-sdk-bigquery-jobuser@abap-sdk-poc.iam.gserviceaccount.com