1. Einführung
In diesem Codelab erstellen Sie ein Modell für maschinelles Lernen (ML) in BigQuery und rufen mithilfe des ABAP SDK for Google Cloud Vorhersagen aus diesem Modell ab.
Sie nutzen die folgenden Google Cloud-Dienste:
- BigQuery
- Cloud Shell
Aufgaben
Sie erstellen Folgendes:
- Ein BigQuery-Modell für maschinelles Lernen (ML).
- Ein Dienstkonto mit der Rolle „BigQuery Job User“ zum Aufrufen der BigQuery API.
- Ein ABAP-Programm zum Aufrufen der BigQuery API und zum Abrufen von Vorhersagen aus dem ML-Modell.
2. Voraussetzungen
- Ein Browser wie Chrome oder Firefox
- Ein Google Cloud-Projekt mit aktivierter Abrechnung oder erstellen Sie ein kostenloses 90-tägiges Testkonto für die Google Cloud Platform.
- Auf Ihrem System installiertes SAP GUI (Windows oder Java). Wenn SAP GUI bereits auf Ihrem Laptop installiert ist, stellen Sie eine Verbindung zu SAP her. Verwenden Sie dazu die externe IP-Adresse der VM als IP-Adresse des Anwendungsservers. Wenn Sie einen Mac verwenden, können Sie auch das SAP GUI für Java installieren.
3. Hinweis
- Wählen Sie in der Google Cloud Console auf der Seite für die Projektauswahl ein Google Cloud-Projekt aus oder erstellen Sie eines, z. B.
abap-sdk-poc
. - Die Abrechnung für das Cloud-Projekt muss aktiviert sein. Hier erfahren Sie, wie Sie prüfen, ob die Abrechnung für ein Projekt aktiviert ist. Überspringen Sie diesen Schritt, wenn Sie das 90-tägige kostenlose Testkonto verwenden.
- Sie verwenden Cloud Shell, eine Befehlszeilenumgebung, die in Google Cloud ausgeführt wird.
- Klicken Sie in der Cloud Console rechts oben auf Cloud Shell aktivieren:
- Führen Sie in Cloud Shell die folgenden Befehle aus, um sich bei Ihrem Konto zu authentifizieren und das Standardprojekt auf
abap-sdk-poc
festzulegen. Als Beispiel dient Zoneus-west4-b
. Ändern Sie bei Bedarf das Projekt und die Zone in den folgenden Befehlen nach Bedarf.
gcloud auth login
gcloud config set project abap-sdk-poc
gcloud config set compute/zone us-west4-b
- Sie müssen Zugriff auf ein SAP-System haben, auf dem das ABAP SDK for Google Cloud installiert ist.
- Sie müssen Codelab 1 (ABAP Platform Trial 1909 auf der Google Cloud Platform installieren und ABAP SDK for Google Cloud installieren) und Codelab 2 (ABAP SDK-Authentifizierung mit Tokens für SAP Hosted on Compute Engine VM konfigurieren) absolvieren, bevor Sie mit diesem Codelab fortfahren.
- Wenn Sie Codelab 1 und Codelab 2 abgeschlossen haben, hätten Sie dadurch ein ABAP Platform Trial 1909-System in Google Cloud sowie die erforderliche Einrichtung für Authentifizierung und Konnektivität erhalten.
- Wenn Sie Codelab 1 und Codelab 2 nicht abgeschlossen haben, haben Sie nicht die erforderliche Infrastruktur und Konnektivität, um die Schritte in diesem Codelab auszuführen. Daher musst du Codelab 1 und Codelab 2 abschließen, bevor du mit diesem Codelab fortfahren kannst.
4. BigQuery API V2 in Ihrem Google Cloud-Projekt aktivieren
- Klicken Sie in der Cloud Console rechts oben auf Cloud Shell aktivieren:
- Führen Sie in Cloud Shell die folgenden Befehle aus, um die BigQuery API zu aktivieren:
gcloud services enable bigquery.googleapis.com
Nach erfolgreicher Ausführung sollte die folgende Meldung angezeigt werden:
Die BigQuery API sollte jetzt in Ihrem Google Cloud-Projekt aktiviert sein.
5. Dienstkonto für sicheren BigQuery-Zugriff erstellen
Wenn Sie sicher ML-Vorhersagen aus einem BigQuery ML-Modell abrufen möchten, müssen Sie ein Dienstkonto mit den Rollen BigQuery Job User und BigQuery Data Viewer erstellen, damit Ihr Programm Abfragen (als Jobs) im Projekt ausführen und Daten aus Tabellen lesen kann. Diese Rolle gewährt nur die erforderliche Berechtigung zum Erstellen von Jobs und Lesen von Daten, um Sicherheitsrisiken zu minimieren.
Dienstkonto erstellen
Führen Sie die folgenden Schritte aus, um ein Dienstkonto mit der erforderlichen Rolle zu erstellen:
- Führen Sie im Cloud Shell-Terminal den folgenden Befehl aus:
gcloud iam service-accounts create abap-sdk-bigquery-jobuser --display-name="Service Account for BigQuery Job user"
- Fügen Sie nun dem im vorherigen Schritt erstellten Dienstkonto die erforderlichen Rollen hinzu:
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'
Im obigen Befehl wird abap-sdk-poc
als Platzhalter für das Google Cloud-Projekt verwendet. Ersetzen Sie abap-sdk-poc
durch Ihre Projekt-ID.
- Rufen Sie die Seite IAM auf, um zu prüfen, ob die Rolle hinzugefügt wurde. Das von Ihnen erstellte Dienstkonto sollte zusammen mit der zugewiesenen Rolle aufgeführt werden.
6. BigQuery Machine Learning-Modell erstellen
In diesem Codelab erstellen wir ein k-Means-Modell, um ein Dataset für den Londoner Fahrradverleih zu gruppieren. Sie können den k-Means-Algorithmus anwenden, um Ihre Daten in Clustern zu gruppieren. Im Gegensatz zum überwachten maschinellen Lernen, bei dem es um prädiktive Analysen geht, geht es beim unüberwachten Lernen um deskriptive Analysen. Es geht darum, Daten zu verstehen, damit Sie datengestützte Entscheidungen treffen können.
Dataset erstellen
Führen Sie die folgenden Schritte aus, um ein BigQuery-Dataset zum Speichern Ihres ML-Modells zu erstellen:
- Rufen Sie in der Google Cloud Console die Seite „BigQuery“ auf. Zur Seite „BigQuery“
- Klicken Sie im Bereich Explorer auf den Namen Ihres Projekts.
- Klicken Sie auf
. Aktionen ansehen > Dataset erstellen
- Führen Sie auf der Seite Dataset erstellen die folgenden Schritte aus:
- Geben Sie unter Dataset-ID
bqml_tutorial
ein. - Wählen Sie als Standorttyp die Option Mehrere Regionen und dann EU (mehrere Regionen in der Europäischen Union) aus. Das öffentliche Dataset zum Fahrradverleih in London wird am multiregionalen EU-Standort gespeichert. Ihr Dataset muss sich am selben Standort befinden.
- Lassen Sie die verbleibenden Standardeinstellungen unverändert und klicken Sie auf Dataset erstellen.
k-Means-Modell erstellen
Ihr Dataset ist nun eingerichtet. Im nächsten Schritt erstellen Sie mit den Daten ein k-Means-Modell. Sie können ein k-Means-Modell mithilfe der CREATE MODEL-Anweisung mit der Option model_type=kmeans
erstellen und trainieren.
Führen Sie die folgenden Schritte aus, um die Abfrage auszuführen und ein k-Means-Modell zu erstellen:
- Rufen Sie die Seite BigQuery auf. Zu BigQuery
- Führen Sie im Editorbereich die folgende SQL-Anweisung aus:
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
- Maximieren Sie im Navigationsbereich im Abschnitt Ressourcen den Projektnamen, klicken Sie auf bqml_tutorial und dann auf london_station_clusters.
- Klicken Sie auf den Tab Schema. Das Modellschema listet die drei Stationsattribute auf, die BigQuery ML zum Clustering verwendet hat. Das Schema sollte so aussehen:
- Klicken Sie auf den Tab Bewertung. Auf diesem Tab werden Visualisierungen der vom k-Means-Modell identifizierten Cluster angezeigt. Unter Numerische Merkmale werden in Balkendiagrammen bis zu 10 der wichtigsten numerischen Featurewerte für jeden Schwerpunkt angezeigt. Im Drop-down-Menü können Sie auswählen, welche Features visualisiert werden sollen.
7. BigQuery ML-Vorhersagen mit dem ABAP SDK for Google Cloud abrufen
Nachdem Sie nun die Voraussetzungen auf der Google Cloud-Seite eingerichtet haben, können Sie die Schritte in Ihrem SAP-System ausführen, um Vorhersagen aus dem ML-Modell mit dem ABAP SDK for Google Cloud zu erhalten.
Clientschlüsselkonfiguration erstellen
Für die Konfiguration mit Authentifizierung und Konnektivität verwendet das ABAP SDK for Google Cloud die Tabellen /GOOG/CLIENT_KEY
und /GOOG/SERVIC_MAP.
Führen Sie die folgenden Schritte aus, um die Konfiguration in der Tabelle /GOOG/CLIENT_KEY
beizubehalten:
- Geben Sie auf der SAP-GUI den Transaktionscode SPRO ein.
- Klicken Sie auf SAP-Referenz-IMG.
- Klicken Sie auf ABAP SDK for Google Cloud > Grundlegende Einstellungen > Clientschlüssel konfigurieren
- Behalten Sie die folgenden Werte für die aufgeführten Felder bei und lassen Sie alle anderen Felder leer:
Feld | Wert |
Google Cloud-Schlüsselname | BIGQUERY_ML |
Name des Google Cloud-Dienstkontos | abap-sdk-bigquery-jobuser@abap-sdk-poc.iam.gserviceaccount.com |
Google Cloud-Bereich | https://www.googleapis.com/auth/cloud-platform |
Projekt-ID | abap-sdk-poc |
Autorisierungsklasse | /GOOG/CL_AUTH_GOOGLE |
ABAP-Bericht erstellen, um Vorhersagen aus dem BigQuery ML-Modell zu erhalten
So erstellen Sie einen ABAP-Bericht:
- Rufen Sie in Ihrer SAP-GUI den Transaktionscode
SE38
auf und erstellen Sie ein Berichtsprogramm mit dem NamenZDEMO_BIGQUERY_ML_PREDICT.
. - Geben Sie in dem Pop-up-Fenster, das geöffnet wird, Details wie in der folgenden Abbildung gezeigt ein:
- Wählen Sie im nächsten Pop-up-Fenster entweder Lokales Objekt aus oder geben Sie einen Paketnamen an.
- Fügen Sie im ABAP-Editor den folgenden Code hinzu:
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.
- Speichern und aktivieren Sie den Bericht.
- Führen Sie den Bericht aus (F8).
Nach erfolgreicher Ausführung sollten Sie die folgende Berichtsausgabe sehen:
8. Glückwunsch
Exzellente Arbeit bei „Vorhersagen aus einem BigQuery Machine Learning (ML)-Modell mit dem ABAP SDK for Google Cloud abrufen“ codelab!
Sie haben nun Vorhersagen eines BigQuery-Modells für maschinelles Lernen direkt aus Ihrem SAP-System abgerufen. Sie haben eine neue Stufe der Integration zwischen ABAP und Google Cloud-Diensten freigeschaltet. Erweitern Sie Ihren Horizont mit anderen interessanten Codelabs vom ABAP SDK for Google Cloud:
- Translation API mit dem ABAP SDK for Google Cloud verwenden
- Großes Objekt mithilfe von Aufteilung in einen Cloud Storage-Bucket hochladen
- Anmeldedaten/Secrets von Secret Manager mit dem ABAP SDK for Google Cloud abrufen
- Vertex AI test-bison über ABAP aufrufen
9. Bereinigen
Wenn Sie nicht mit den zusätzlichen Codelabs im Zusammenhang mit dem ABAP SDK for Google Cloud fortfahren möchten, fahren Sie bitte mit der Bereinigung fort.
Projekt löschen
- Löschen Sie das Google Cloud-Projekt:
gcloud projects delete abap-sdk-poc
Einzelne Ressourcen löschen
- Löschen Sie die Compute-Instanz:
gcloud compute instances delete abap-trial-docker
- Löschen Sie die Firewallregeln:
gcloud compute firewall-rules delete sapmachine
- Löschen Sie das Dienstkonto:
gcloud iam service-accounts delete \
abap-sdk-bigquery-jobuser@abap-sdk-poc.iam.gserviceaccount.com