1. Introduzione
In questo codelab, creerai un modello di machine learning (ML) in BigQuery e otterrai previsioni da questo modello utilizzando l'SDK ABAP per Google Cloud.
Utilizzerai i seguenti servizi Google Cloud:
- BigQuery
- Cloud Shell
Cosa creerai
Dovrai creare quanto segue:
- Un modello BigQuery Machine Learning (ML).
- Un account di servizio con il ruolo Utente job BigQuery per chiamare l'API BigQuery.
- Un programma ABAP per chiamare l'API BigQuery e ottenere previsioni dal modello ML.
2. Requisiti
- Un browser, ad esempio Chrome o Firefox.
- Un progetto Google Cloud con fatturazione abilitata o crea un account di prova senza costi di 90 giorni per Google Cloud Platform.
- GUI SAP (Windows o Java) installata nel sistema. Se la GUI SAP è già installata sul tuo laptop, connettiti utilizzando l'indirizzo IP esterno della VM come IP server delle applicazioni. Se usi Mac, puoi anche installare la GUI SAP per Java disponibile in questo link.
3. Prima di iniziare
- Nella pagina del selettore dei progetti della console Google Cloud, seleziona o crea un progetto Google Cloud (ad esempio
abap-sdk-poc
). - Verifica che la fatturazione sia attivata per il tuo progetto Cloud. Scopri come controllare se la fatturazione è abilitata per un progetto. Salta questo passaggio se utilizzi l'account di prova senza costi di 90 giorni.
- Utilizzerai Cloud Shell, un ambiente a riga di comando in esecuzione in Google Cloud.
- Dalla console Cloud, fai clic su Attiva Cloud Shell nell'angolo in alto a destra:
- Esegui questi comandi in Cloud Shell per eseguire l'autenticazione per il tuo account e imposta il progetto predefinito su
abap-sdk-poc
. La zonaus-west4-b
viene utilizzata come esempio. Se necessario, modifica il progetto e la zona nei comandi seguenti in base alle tue preferenze.
gcloud auth login
gcloud config set project abap-sdk-poc
gcloud config set compute/zone us-west4-b
- Devi avere accesso a un sistema SAP in cui è installato l'SDK ABAP per Google Cloud.
- Devi completare il codelab 1 (Installare la prova della piattaforma ABAP 1909 sulla piattaforma Google Cloud e installare l'SDK ABAP per Google Cloud) e il codelab 2 (Configurare l'autenticazione dell'SDK ABAP mediante token per SAP ospitato sulla VM di Compute Engine) prima di procedere con questo codelab.
- Se hai completato il codelab 1 e il codelab 2, avrai eseguito il provisioning di un sistema 1909 di prova della piattaforma ABAP su Google Cloud, insieme alla configurazione richiesta per l'autenticazione e la connettività.
- Se non hai completato il codelab 1 e il codelab 2, non avrai a disposizione l'infrastruttura e la connettività necessarie per eseguire i passaggi indicati in questo codelab. Pertanto, devi completare il codelab 1 e il codelab 2 prima di procedere con questo codelab.
4. Abilita l'API BigQuery V2 nel tuo progetto Google Cloud
- Dalla console Cloud, fai clic su Attiva Cloud Shell nell'angolo in alto a destra:
- Esegui questi comandi in Cloud Shell per abilitare l'API BigQuery:
gcloud services enable bigquery.googleapis.com
Una volta completata l'esecuzione, dovresti vedere un messaggio come mostrato di seguito
A questo punto dovresti avere abilitato l'API BigQuery nel tuo progetto Google Cloud.
5. Creare un account di servizio per l'accesso sicuro a BigQuery
Per ottenere in modo sicuro le previsioni ML da un modello BigQuery ML, devi creare un account di servizio con i ruoli Utente job BigQuery e Visualizzatore dati BigQuery, che consentirà al tuo programma di eseguire query (come job) all'interno del progetto e leggere i dati dalle tabelle. Questo ruolo concede solo l'autorizzazione necessaria per creare job e leggere dati, riducendo al minimo i rischi per la sicurezza.
Creare un account di servizio
Per creare un account di servizio con il ruolo richiesto, segui questi passaggi:
- Esegui questo comando nel terminale Cloud Shell:
gcloud iam service-accounts create abap-sdk-bigquery-jobuser --display-name="Service Account for BigQuery Job user"
- Ora aggiungi i ruoli richiesti all'account di servizio creato nel passaggio precedente:
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'
Il comando precedente utilizza abap-sdk-poc
come segnaposto per il progetto Google Cloud. Sostituisci abap-sdk-poc
con l'ID del tuo progetto.
- Per verificare che il ruolo sia stato aggiunto, vai alla pagina IAM. L'account di servizio che hai creato dovrebbe essere elencato insieme al ruolo che gli è stato assegnato.
6. Creazione di un modello di BigQuery Machine Learning
In questo codelab, creeremo un modello K-means per raggruppare il set di dati sui noleggi di biciclette di Londra. Puoi applicare l'algoritmo k-means per raggruppare i dati in cluster. A differenza del machine learning supervisionato, che riguarda l'analisi predittiva, l'apprendimento non supervisionato riguarda l'analisi descrittiva. Si tratta di comprendere i dati in modo da poter prendere decisioni basate sui dati.
Crea il tuo set di dati
Per creare un set di dati BigQuery per archiviare il tuo modello ML, segui questi passaggi:
- Nella console Google Cloud, vai alla pagina BigQuery. Vai alla pagina di BigQuery
- Nel riquadro Explorer, fai clic sul nome del tuo progetto.
- Fai clic su
Visualizza azioni > Crea il set di dati.
- Nella pagina Crea set di dati, segui questi passaggi:
- In ID set di dati, inserisci
bqml_tutorial
. - In Tipo di località, seleziona Più regioni, quindi seleziona UE (più regioni nell'Unione Europea). Il set di dati pubblico di London Noleggio biciclette è archiviato nell'UE multiregionale. Il set di dati deve trovarsi nella stessa località.
- Lascia invariate le restanti impostazioni predefinite e fai clic su Crea set di dati.
Creare un modello K-means
Ora che il set di dati è configurato, il passaggio successivo è creare un modello K-means utilizzando i dati. Puoi creare e addestrare un modello K-means utilizzando l'istruzione CREATE MODEL con l'opzione model_type=kmeans
.
Per eseguire la query e creare un modello K-means, segui questi passaggi:
- Vai alla pagina BigQuery. Vai a BigQuery
- Nel riquadro dell'editor, esegui la seguente istruzione 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
- Nel pannello di navigazione, nella sezione Risorse, espandi il nome del progetto, fai clic su bqml_tutorial e quindi su london_station_clusters.
- Fai clic sulla scheda Schema. Lo schema del modello elenca i tre attributi delle stazioni che BigQuery ML ha utilizzato per eseguire il clustering. Lo schema dovrebbe essere simile al seguente:
- Fai clic sulla scheda Valutazione. Questa scheda mostra le visualizzazioni dei cluster identificati dal modello K-means. In Caratteristiche numeriche, i grafici a barre mostrano fino a 10 dei valori delle caratteristiche numeriche più importanti per ciascun centroide. Puoi selezionare le funzionalità da visualizzare dal menu a discesa.
7. Ottieni previsioni BigQuery ML utilizzando l'SDK ABAP per Google Cloud
Ora che hai configurato i prerequisiti per Google Cloud, puoi completare i passaggi nel tuo sistema SAP per ottenere previsioni dal modello ML utilizzando l'SDK ABAP per Google Cloud.
Crea configurazione chiave client
Per la configurazione relativa all'autenticazione e alla connettività, l'SDK ABAP per Google Cloud utilizza le tabelle /GOOG/CLIENT_KEY
e /GOOG/SERVIC_MAP.
Per mantenere la configurazione nella tabella /GOOG/CLIENT_KEY
:
- Nella GUI di SAP, inserisci il codice della transazione SPRO.
- Fai clic su IMG di riferimento SAP.
- Fai clic su SDK ABAP per Google Cloud > Impostazioni di base > Configura chiave client
- Mantieni i seguenti valori rispetto ai campi elencati e lascia vuoti tutti gli altri campi:
Campo | Valore |
Nome chiave Google Cloud | BIGQUERY_ML |
Nome dell'account di servizio Google Cloud | abap-sdk-bigquery-jobuser@abap-sdk-poc.iam.gserviceaccount.com |
Ambito Google Cloud | https://www.googleapis.com/auth/cloud-platform |
ID progetto | abap-sdk-poc |
Classe di autorizzazione | /GOOG/CL_AUTH_GOOGLE |
Creazione di un report ABAP per ottenere previsioni dal modello BigQuery ML
Per creare un report ABAP, segui questi passaggi:
- Nella GUI di SAP, vai al codice transazione
SE38
e crea un programma di report con il nomeZDEMO_BIGQUERY_ML_PREDICT.
- Nella finestra popup che si apre, fornisci i dettagli come illustrato nell'immagine seguente:
- Nel popup successivo, seleziona Oggetto locale o fornisci un nome di pacchetto a seconda dei casi.
- Nell'editor ABAP, aggiungi il seguente codice:
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.
- Salva e attiva il report.
- Esegui il report (F8).
Una volta eseguita correttamente, dovresti vedere un output del report come mostrato di seguito:
8. Complimenti
Ottimo lavoro per aver completato il corso "Ottieni previsioni da un modello BigQuery Machine Learning (ML) utilizzando l'SDK ABAP per Google Cloud" codelab!
Hai recuperato le previsioni di un modello BigQuery Machine Learning, direttamente dal tuo sistema SAP. Hai sbloccato un nuovo livello di integrazione tra ABAP e i servizi Google Cloud. Espandi i tuoi orizzonti con altri interessanti SDK ABAP per i codelab di Google Cloud:
- Utilizzo dell'API Translation con l'SDK ABAP per Google Cloud
- carica un oggetto di grandi dimensioni in un bucket Cloud Storage utilizzando il chunking
- Recupero di credenziali/secret da Secret Manager con l'SDK ABAP per Google Cloud
- Chiama Vertex AI Test-bison da ABAP
9. Esegui la pulizia
Se non vuoi continuare con i codelab aggiuntivi relativi all'SDK ABAP per Google Cloud, procedi con la pulizia.
Elimina il progetto
- Elimina il progetto Google Cloud:
gcloud projects delete abap-sdk-poc
Eliminare singole risorse
- Elimina l'istanza Compute:
gcloud compute instances delete abap-trial-docker
- Elimina le regole firewall:
gcloud compute firewall-rules delete sapmachine
- Elimina l'account di servizio:
gcloud iam service-accounts delete \
abap-sdk-bigquery-jobuser@abap-sdk-poc.iam.gserviceaccount.com