1. Pengantar
Dalam codelab ini, Anda akan membuat model machine learning (ML) di BigQuery dan mendapatkan prediksi dari model ini menggunakan ABAP SDK untuk Google Cloud.
Anda akan memanfaatkan layanan Google Cloud berikut:
- BigQuery
- Cloud Shell
Yang akan Anda build
Anda akan membuat hal berikut:
- Model BigQuery Machine Learning (ML).
- Akun layanan dengan peran BigQuery Job User untuk memanggil BigQuery API.
- Program ABAP untuk memanggil BigQuery API dan mendapatkan prediksi dari model ML.
2. Persyaratan
- Browser, seperti Chrome atau Firefox.
- Project Google Cloud dengan penagihan diaktifkan atau Buat akun Uji Coba Gratis 90 Hari untuk Google Cloud Platform.
- SAP GUI (Windows atau Java) yang diinstal di sistem Anda. Jika SAP GUI sudah diinstal di laptop, hubungkan ke SAP menggunakan alamat IP eksternal VM sebagai IP Server Aplikasi. Jika menggunakan Mac, Anda juga dapat menginstal SAP GUI untuk Java yang tersedia di link ini.
3. Sebelum memulai
- Di Konsol Google Cloud, di halaman pemilih project, pilih atau buat project Google Cloud (Misalnya:
abap-sdk-poc
). - Pastikan penagihan diaktifkan untuk project Cloud Anda. Pelajari cara memeriksa apakah penagihan telah diaktifkan pada suatu project. Lewati langkah ini jika Anda menggunakan Akun Uji Coba Gratis 90 Hari.
- Anda akan menggunakan Cloud Shell, lingkungan command line yang berjalan di Google Cloud.
- Dari Cloud Console, klik Activate Cloud Shell di pojok kanan atas:
- Jalankan perintah berikut di Cloud Shell untuk mengautentikasi akun Anda dan menetapkan project default ke
abap-sdk-poc
. Zonaus-west4-b
digunakan sebagai contoh. Jika diperlukan, ubah project dan zona dalam perintah berikut berdasarkan preferensi Anda.
gcloud auth login
gcloud config set project abap-sdk-poc
gcloud config set compute/zone us-west4-b
- Anda harus memiliki akses ke sistem SAP yang telah menginstal ABAP SDK untuk Google Cloud.
- Anda harus menyelesaikan codelab 1 (Menginstal Uji Coba Platform ABAP 1909 di Google Cloud Platform dan Menginstal ABAP SDK untuk Google Cloud) dan codelab 2 (Mengonfigurasi Autentikasi ABAP SDK menggunakan token untuk SAP yang Dihosting di VM Compute Engine) sebelum melanjutkan dengan codelab ini.
- Jika Anda telah menyelesaikan codelab 1 dan codelab 2, Anda akan mendapatkan Sistem Uji Coba Platform ABAP 1909 di Google Cloud, beserta penyiapan yang diperlukan untuk autentikasi dan konektivitas.
- Jika belum menyelesaikan codelab 1 dan codelab 2, Anda tidak akan memiliki semua infrastruktur dan konektivitas yang diperlukan untuk melakukan langkah-langkah yang diberikan dalam codelab ini. Oleh karena itu, Anda harus menyelesaikan codelab 1 dan codelab 2 sebelum melanjutkan codelab ini.
4. Mengaktifkan BigQuery API V2 di Project Google Cloud Anda
- Dari Cloud Console, klik Activate Cloud Shell di pojok kanan atas:
- Jalankan perintah berikut di Cloud Shell untuk mengaktifkan BigQuery API:
gcloud services enable bigquery.googleapis.com
Setelah eksekusi berhasil, Anda akan melihat pesan yang ditampilkan seperti yang ditunjukkan di bawah ini
Sekarang Anda seharusnya telah mengaktifkan BigQuery API di Project Google Cloud.
5. Membuat Akun Layanan untuk Akses BigQuery yang Aman
Untuk mendapatkan prediksi ML dengan aman dari model BigQuery ML, Anda perlu membuat akun layanan dengan peran BigQuery Job User dan BigQuery Data Viewer, yang akan memungkinkan program Anda menjalankan kueri (sebagai tugas) dalam project dan membaca data dari tabel. Peran ini hanya memberikan izin yang diperlukan untuk membuat tugas dan membaca data, sehingga meminimalkan risiko keamanan.
Membuat akun layanan
Untuk membuat akun layanan dengan peran yang diperlukan, lakukan langkah-langkah berikut:
- Jalankan perintah berikut di terminal Cloud Shell:
gcloud iam service-accounts create abap-sdk-bigquery-jobuser --display-name="Service Account for BigQuery Job user"
- Sekarang, tambahkan peran yang diperlukan ke akun layanan yang dibuat pada langkah sebelumnya:
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'
Perintah di atas menggunakan abap-sdk-poc
sebagai placeholder untuk Project Google Cloud. Ganti abap-sdk-poc
dengan project ID Anda.
- Untuk memverifikasi bahwa peran telah ditambahkan, buka halaman IAM. Akun layanan yang Anda buat akan tercantum beserta peran yang telah ditetapkan untuknya.
6. Membuat model BigQuery Machine Learning
Dalam codelab ini, kita akan membuat model k-means untuk mengelompokkan set data penyewaan sepeda di London. Anda dapat menerapkan algoritma k-means untuk mengelompokkan data ke dalam cluster. Tidak seperti supervised machine learning, yang berfokus pada analisis prediktif, unsupervised learning adalah analisis deskriptif. Fokusnya adalah memahami data sehingga Anda dapat membuat keputusan berbasis data.
Membuat set data
Untuk membuat set data BigQuery guna menyimpan model ML Anda, lakukan langkah-langkah berikut:
- Di konsol Google Cloud, buka halaman BigQuery. Buka halaman BigQuery
- Di panel Explorer, klik nama project Anda.
- Klik
View actions > Create dataset.
- Di halaman Create dataset, lakukan hal berikut:
- Untuk Dataset ID, masukkan
bqml_tutorial
. - Untuk Jenis lokasi, pilih Multi-region, lalu pilih EU (beberapa region di Uni Eropa). Set data publik London Bicycle Hires disimpan di multi-region Uni Eropa. Set data Anda harus berada di lokasi yang sama.
- Jangan ubah setelan default lainnya, lalu klik Create dataset.
Membuat model k-means
Setelah set data disiapkan, langkah berikutnya adalah membuat model k-means menggunakan data tersebut. Anda dapat membuat dan melatih model k-means menggunakan pernyataan CREATE MODEL dengan opsi model_type=kmeans
.
Untuk menjalankan kueri dan membuat model k-means, lakukan langkah-langkah berikut:
- Buka halaman BigQuery. Buka BigQuery
- Di panel editor, jalankan pernyataan SQL berikut:
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
- Di panel navigasi, di bagian Resource, luaskan nama project Anda, klik bqml_tutorial, lalu klik london_station_clusters.
- Klik tab Schema. Skema model mencantumkan tiga atribut stasiun yang digunakan BigQuery ML untuk melakukan pengelompokan. Skema akan terlihat seperti berikut:
- Klik tab Evaluasi. Tab ini menampilkan visualisasi cluster yang diidentifikasi oleh model k-means. Di bagian Fitur numerik, grafik batang menampilkan hingga 10 nilai fitur numerik terpenting untuk setiap sentroid. Anda dapat memilih fitur yang akan divisualisasikan dari menu drop-down.
7. Mendapatkan prediksi BigQuery ML menggunakan ABAP SDK untuk Google Cloud
Setelah menyiapkan prasyarat di sisi Google Cloud, Anda siap menyelesaikan langkah-langkah di sistem SAP untuk mendapatkan prediksi dari model ML menggunakan ABAP SDK untuk Google Cloud.
Membuat Konfigurasi Kunci Klien
Untuk konfigurasi terkait autentikasi dan konektivitas, ABAP SDK untuk Google Cloud menggunakan tabel /GOOG/CLIENT_KEY
dan /GOOG/SERVIC_MAP.
Untuk mempertahankan konfigurasi di tabel /GOOG/CLIENT_KEY
, lakukan langkah-langkah berikut:
- Di SAP GUI, masukkan kode transaksi SPRO.
- Klik IMG Referensi SAP.
- Klik ABAP SDK for Google Cloud > Basic Settings > Configure Client Key
- Pertahankan nilai berikut terhadap kolom yang tercantum, biarkan semua kolom lain kosong:
Kolom | Nilai |
Google Cloud Key Name | BIGQUERY_ML |
Nama Akun Layanan Google Cloud | abap-sdk-bigquery-jobuser@abap-sdk-poc.iam.gserviceaccount.com |
Google Cloud Scope | https://www.googleapis.com/auth/cloud-platform |
ID Project | abap-sdk-poc |
Class Otorisasi | /GOOG/CL_AUTH_GOOGLE |
Membuat Laporan ABAP untuk mendapatkan prediksi dari model BigQuery ML
Untuk mem-build Laporan ABAP, lakukan langkah-langkah berikut:
- Di SAP GUI, buka kode transaksi
SE38
dan buat Program Laporan dengan namaZDEMO_BIGQUERY_ML_PREDICT.
- Di pop-up yang terbuka, berikan detail seperti yang ditunjukkan pada gambar berikut:
- Di pop-up berikutnya, pilih Local Object atau berikan nama paket yang sesuai.
- Di ABAP Editor, tambahkan kode berikut:
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.
- Simpan dan aktifkan laporan.
- Jalankan laporan (F8).
Jika berhasil dieksekusi, Anda akan melihat output laporan seperti yang ditunjukkan di bawah ini:
8. Selamat
Anda telah menyelesaikan codelab "Mendapatkan prediksi dari model Machine Learning (ML) BigQuery menggunakan ABAP SDK untuk Google Cloud" dengan sangat baik.
Anda telah berhasil mengambil prediksi model Machine Learning BigQuery, langsung dari dalam sistem SAP Anda. Anda telah membuka tingkat integrasi baru antara ABAP dan Layanan Google Cloud. Perluas pengetahuan Anda dengan codelab ABAP SDK untuk Google Cloud yang menarik lainnya:
- Menggunakan Translation API dengan ABAP SDK untuk Google Cloud
- Mengupload objek besar ke bucket Cloud Storage menggunakan chunking
- Mengambil Kredensial/Rahasia dari Secret Manager dengan ABAP SDK untuk Google Cloud
- Memanggil Vertex AI test-bison dari ABAP
9. Pembersihan
Jika Anda tidak ingin melanjutkan codelab tambahan yang terkait dengan ABAP SDK untuk Google Cloud, lanjutkan pembersihan.
Menghapus project
- Hapus project Google Cloud:
gcloud projects delete abap-sdk-poc
Menghapus resource satu per satu
- Hapus instance komputasi:
gcloud compute instances delete abap-trial-docker
- Hapus aturan firewall:
gcloud compute firewall-rules delete sapmachine
- Hapus akun layanan:
gcloud iam service-accounts delete \
abap-sdk-bigquery-jobuser@abap-sdk-poc.iam.gserviceaccount.com