BigQuery ML-Vorhersagen mit dem ABAP SDK for Google Cloud in SAP lesen

BigQuery ML-Vorhersagen in SAP mit dem ABAP SDK for Google Cloud lesen

Informationen zu diesem Codelab

subjectZuletzt aktualisiert: Juli 30, 2025
account_circleVerfasst von Ajith Urimajalu

1. Einführung

In diesem Codelab erstellen Sie ein Modell für maschinelles Lernen (ML) in BigQuery und rufen Vorhersagen aus diesem Modell mit dem ABAP SDK for Google Cloud ab.

Sie nutzen die folgenden Google Cloud-Dienste:

  • BigQuery
  • Cloud Shell

Sie erstellen Folgendes:

  • Ein BigQuery Machine Learning-Modell (ML).
  • Ein Dienstkonto mit der Rolle „BigQuery-Jobnutzer“ 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, z. B. Chrome oder Firefox.
  • Ein Google Cloud-Projekt mit aktivierter Abrechnung oder ein kostenloses 90‑Tage-Testkonto für die Google Cloud Platform.
  • SAP GUI (Windows oder Java) ist auf Ihrem System installiert. Wenn SAP GUI bereits auf Ihrem Laptop installiert ist, stellen Sie eine Verbindung zu SAP her und verwenden Sie dabei die externe IP-Adresse der VM als IP-Adresse des Anwendungsservers. Wenn Sie einen Mac verwenden, können Sie auch die SAP GUI für Java installieren, die über diesen Link verfügbar ist.

3. Hinweis

6757b2fb50ddcc2d.png

  • Führen Sie die folgenden Befehle in Cloud Shell aus, um sich für Ihr Konto zu authentifizieren und das Standardprojekt auf abap-sdk-poc festzulegen. Als Beispiel wird die Zone us-west4-b verwendet. Ändern Sie bei Bedarf das Projekt und die Zone in den folgenden Befehlen entsprechend Ihren Anforderungen.
gcloud auth login
gcloud config
set project abap-sdk-poc
gcloud config
set compute/zone us-west4-b
  • Sie benötigen Zugriff auf ein SAP-System, in dem das ABAP SDK for Google Cloud installiert ist.
  • Sie müssen Codelab 1 (ABAP Platform Trial 1909 in Google Cloud Platform installieren und ABAP SDK for Google Cloud installieren) und Codelab 2 (ABAP SDK-Authentifizierung mit Tokens für SAP, das auf einer Compute Engine-VM gehostet wird, konfigurieren) durchlaufen, bevor Sie mit diesem Codelab fortfahren.
  • Wenn Sie Codelab 1 und Codelab 2 abgeschlossen haben, wurde für Sie ein ABAP Platform Trial 1909-System in Google Cloud bereitgestellt, zusammen mit der erforderlichen Einrichtung für Authentifizierung und Konnektivität.
  • Wenn Sie Codelab 1 und Codelab 2 nicht abgeschlossen haben, verfügen Sie nicht über die erforderliche Infrastruktur und Konnektivität, um die in diesem Codelab beschriebenen Schritte auszuführen. Sie müssen also Codelab 1 und Codelab 2 durcharbeiten, bevor Sie mit diesem Codelab fortfahren.

4. BigQuery API V2 in Ihrem Google Cloud-Projekt aktivieren

  1. Klicken Sie in der Cloud Console rechts oben auf Cloud Shell aktivieren:

6757b2fb50ddcc2d.png

  1. Führen Sie die folgenden Befehle in Cloud Shell aus, um die BigQuery API zu aktivieren:
gcloud services enable bigquery.googleapis.com

Bei erfolgreicher Ausführung sollte eine Meldung wie unten angezeigt werden.

b5f52859df2c2f56.png

Die BigQuery API sollte jetzt in Ihrem Google Cloud-Projekt aktiviert sein.

5. Dienstkonto für sicheren BigQuery-Zugriff erstellen

Um ML-Vorhersagen sicher aus einem BigQuery ML-Modell abzurufen, müssen Sie ein Dienstkonto mit den Rollen BigQuery-Jobnutzer und BigQuery-Datenbetrachter erstellen. Dadurch kann Ihr Programm Abfragen (als Jobs) im Projekt ausführen und Daten aus Tabellen lesen. Diese Rolle gewährt nur die erforderlichen Berechtigungen zum Erstellen von Jobs und zum Lesen von Daten, wodurch Sicherheitsrisiken minimiert werden.

Dienstkonto erstellen

So erstellen Sie ein Dienstkonto mit der erforderlichen Rolle:

  1. 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"
  1. Fügen Sie 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.

  1. 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 ihm zugewiesenen Rolle aufgeführt sein.

6. BigQuery ML-Modell erstellen

In diesem Codelab erstellen wir ein k-means-Modell, um das Dataset zum Fahrradverleih in London zu clustern. So können Sie den k-means-Algorithmus anwenden, um Daten in Clustern zu gruppieren. Anders als beim überwachten maschinellen Lernen, bei dem es um vorhersagende Analysen geht, beschäftigt sich das unüberwachte Lernen mit beschreibenden Analysen. Es dient also dazu, dass Sie Ihre Daten verstehen, um datengestützte Entscheidungen treffen zu können.

Dataset erstellen

So erstellen Sie ein BigQuery-Dataset zum Speichern Ihres ML-Modells:

  1. Rufen Sie in der Google Cloud Console die Seite „BigQuery“ auf. Zur Seite „BigQuery“
  2. Klicken Sie im Bereich Explorer auf den Namen Ihres Projekts.
  3. Klicken Sie auf 5cf3b742649f1e2c.png Aktionen ansehen > Dataset erstellen.

3fbc072041bfa313.png

  1. 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 Multiregional und dann EU (mehrere Regionen in der Europäischen Union) aus. Das öffentliche Dataset zum Fahrradverleih in London wird in der Multiregion EU gespeichert. Ihr Dataset muss sich am selben Standort befinden.
  • Übernehmen Sie die verbleibenden Standardeinstellungen unverändert und klicken Sie auf Dataset erstellen. Seite "Dataset erstellen"

k-Means-Modell erstellen

Nachdem Sie Ihr Dataset eingerichtet haben, besteht der nächste Schritt darin, mit den Daten ein k-Means-Modell zu erstellen. Sie können ein k-Means-Modell mit der CREATE MODEL-Anweisung und der Option model_type=kmeans erstellen und trainieren.

So führen Sie die Abfrage aus und erstellen ein k-Means-Modell:

  1. Rufen Sie die Seite BigQuery auf. Zu BigQuery
  2. 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
  1. Maximieren Sie im Navigationsbereich im Abschnitt Ressourcen den Namen Ihres Projekts, klicken Sie auf bqml_tutorial und dann auf london_station_clusters.
  2. Klicken Sie auf den Tab Schema. Das Modellschema führt die drei Radstationsattribute auf, die BigQuery ML zum Clustern verwendet hat. Das Schema sollte so aussehen:

5f1feb313bd0f6a5.png

  1. Klicken Sie auf den Tab Bewertung. In diesem Tab werden Visualisierungen der durch das k-Means-Modell identifizierten Cluster angezeigt. Unter Numerische Features werden in Balkendiagrammen bis zu zehn der wichtigsten numerischen Featurewerte für jeden Schwerpunkt (Centroid) angezeigt. Im Drop-down-Menü können Sie auswählen, welche Features angezeigt werden sollen.

8f9b53971e33dc08.png

7. BigQuery ML-Vorhersagen mit dem ABAP SDK for Google Cloud abrufen

Nachdem Sie die Voraussetzungen in Google Cloud eingerichtet haben, können Sie die Schritte in Ihrem SAP-System ausführen, um Vorhersagen vom ML-Modell mit dem ABAP SDK for Google Cloud zu erhalten.

Clientschlüsselkonfiguration erstellen

Zur Authentifizierung und für die Konfiguration von Verbindungen 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 zu verwalten:

  1. Geben Sie in der SAP-GUI den Transaktionscode SPRO ein.
  2. Klicken Sie auf SAP-Referenz-IMG.
  3. Klicken Sie auf ABAP SDK for Google Cloud > Grundlegende Einstellungen > Clientschlüssel konfigurieren.

25871e639293b9ee.png

  1. Geben Sie für die aufgeführten Felder die folgenden Werte an 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 abzurufen

So erstellen Sie einen ABAP-Bericht:

  1. Rufen Sie in der SAP-GUI den Transaktionscode SE38 auf und erstellen Sie ein Berichtsprogramm mit dem Namen ZDEMO_BIGQUERY_ML_PREDICT..
  2. Geben Sie im Pop-up-Fenster, das sich öffnet, die Details wie im folgenden Bild gezeigt ein:

4cb32d50427df294.png

  1. Wählen Sie im nächsten Pop-up-Fenster entweder Lokales Objekt aus oder geben Sie einen Paketnamen an.
  2. 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.
  1. Speichern und aktivieren Sie den Bericht.
  2. Führen Sie den Bericht aus (F8).

Bei erfolgreicher Ausführung sollte eine Berichtsausgabe wie unten zu sehen sein:

739e5685511fc9fc.png

6405542a597ed09f.png

8. Glückwunsch

Sie haben das Codelab „Vorhersagen aus einem BigQuery Machine Learning-Modell (ML) mit dem ABAP SDK für Google Cloud abrufen“ erfolgreich abgeschlossen.

Sie haben erfolgreich Vorhersagen eines BigQuery Machine Learning-Modells direkt aus Ihrem SAP-System abgerufen. Sie haben eine neue Integrationsstufe zwischen ABAP und Google Cloud-Diensten erreicht. Weitere interessante Codelabs zum ABAP SDK for Google Cloud:

  • Translation API mit dem ABAP SDK for Google Cloud verwenden
  • Großes Objekt mithilfe von Chunking in einen Cloud Storage-Bucket hochladen
  • Anmeldedaten/Secrets aus 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 zum ABAP SDK for Google Cloud fortfahren möchten, fahren Sie mit dem Bereinigen fort.

Projekt löschen

  • Google Cloud-Projekt löschen:
gcloud projects delete abap-sdk-poc

Einzelne Ressourcen löschen

  1. Löschen Sie die Compute-Instanz:
gcloud compute instances delete abap-trial-docker
  1. Löschen Sie die Firewallregeln:
gcloud compute firewall-rules delete sapmachine
  1. Löschen Sie das Dienstkonto:
gcloud iam service-accounts delete \
    abap-sdk-bigquery-jobuser@abap-sdk-poc.iam.gserviceaccount.com