1. Wprowadzenie
W tym ćwiczeniu w Codelabs utworzysz model uczenia maszynowego w BigQuery i uzyskasz z niego prognozy za pomocą pakietu ABAP SDK do Google Cloud.
Będziesz korzystać z tych usług Google Cloud:
- BigQuery
- Cloud Shell
Co utworzysz
Utworzysz:
- Model uczenia maszynowego BigQuery (ML).
- 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ć interfejs SAP GUI dla Javy, który jest dostępny pod tym linkiem.
3. Zanim zaczniesz
- W konsoli Google Cloud na stronie selektora projektów 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 włączone są 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 prawym górnym rogu Cloud Console kliknij Aktywuj Cloud Shell:
- 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 modułu, musisz ukończyć moduł 1 (Install ABAP Platform Trial 1909 on Google Cloud Platform and Install ABAP SDK for Google Cloud) i moduł 2 (Configure ABAP SDK Authentication using tokens for SAP Hosted on Compute Engine VM).
- Jeśli masz już za sobą ćwiczenia 1 i 2, na Google Cloud powinien być już dostępny 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 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 prawym górnym rogu Cloud Console kliknij Aktywuj Cloud Shell:
- 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 systemów uczących się 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 uprawnienia niezbędne 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ę IAM. 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 jego podstawie 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 to zapytanie 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 nawigacyjnym 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. Uzyskiwanie prognoz BigQuery ML za pomocą ABAP SDK for Google Cloud
Po skonfigurowaniu wymagań wstępnych w Google Cloud możesz wykonać czynności w systemie SAP, aby uzyskiwać prognozy z modelu ML za pomocą 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
SE38
i utwórz program raportu o nazwieZDEMO_BIGQUERY_ML_PREDICT.
. - W wyskakującym okienku podaj szczegóły zgodnie z tym, co widać na poniższym 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! Ukończono ćwiczenie „Uzyskiwanie prognoz z modelu uczenia maszynowego 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. Osiągnięto nowy poziom integracji między ABAP a usługami Google Cloud. Poszerz swoje horyzonty dzięki innym ciekawym ćwiczeniom z 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 przy użyciu dzielenia na części
- Pobieranie danych logowania/obiektów tajnych z usługi Secret Manager za pomocą pakietu ABAP SDK for Google Cloud
- Wywoływanie funkcji test-bison w Vertex AI z ABAP
9. Czyszczenie danych
Jeśli nie chcesz kontynuować pracy z dodatkowymi ćwiczeniami dotyczącymi pakietu ABAP SDK do 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