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
- W konsoli Google Cloud na stronie selektora projektu wybierz lub utwórz projekt Google Cloud (na przykład
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 konta w ramach 90-dniowego okresu próbnego.
- Użyjesz Cloud Shell, czyli środowiska wiersza poleceń działającego w Google Cloud.
- W Cloud Console w prawym górnym rogu kliknij Aktywuj Cloud Shell:
- 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 strefyus-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
- W Cloud Console w prawym górnym rogu 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 powinien wyświetlić się komunikat podobny do tego
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ń BigQuery i Wyś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:
- 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 miejscem zastępczym dla projektu Google Cloud. Zastąp abap-sdk-poc
identyfikatorem projektu.
- 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:
- 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 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.
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:
- Otwórz stronę BigQuery. Otwórz BigQuery
- 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
- W panelu nawigacyjnym w sekcji Zasoby rozwiń nazwę projektu, kliknij bqml_tutorial, a następnie kliknij london_station_clusters.
- 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:
- 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.
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:
- W interfejsie graficznym SAP wpisz kod transakcji SPRO.
- Kliknij SAP Reference IMG (Referencyjny obraz SAP).
- Kliknij ABAP SDK for Google Cloud > Ustawienia podstawowe > Skonfiguruj klucz klienta.
- 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:
- W interfejsie graficznym SAP otwórz kod transakcji
SE38
i utwórz program raportów o nazwieZDEMO_BIGQUERY_ML_PREDICT.
. - W wyskakującym okienku podaj szczegóły, jak pokazano na tym obrazie:
- W wyskakującym okienku wybierz 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 polecenia powinny się wyświetlić dane wyjściowe raportu, jak pokazano poniżej:
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
- 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