1. Giriş
Bu codelab'de BigQuery'de bir makine öğrenimi (ML) modeli oluşturacak ve Google Cloud için ABAP SDK'yı kullanarak bu modelden tahminler alacaksınız.
Aşağıdaki Google Cloud hizmetlerinden yararlanacaksınız:
- BigQuery
- Cloud Shell
Ne oluşturacaksınız?
Aşağıdakileri oluşturursunuz:
- BigQuery Machine Learning (ML) modeli.
- BigQuery API'yi çağırmak için BigQuery İş Kullanıcısı rolüne sahip bir hizmet hesabı.
- BigQuery API'yi çağırmak ve makine öğrenimi modelinden tahminler almak için bir ABAP programı.
2. Şartlar
- Chrome veya Firefox gibi bir tarayıcı
- Faturalandırmanın etkin olduğu bir Google Cloud projesi veya Google Cloud Platform için 90 günlük ücretsiz deneme hesabı oluşturun.
- Sisteminizde yüklü SAP GUI (Windows veya Java) SAP GUI dizüstü bilgisayarınıza zaten yüklüyse Uygulama Sunucusu IP'si olarak VM'nin harici IP adresini kullanarak SAP'ye bağlanın. Mac kullanıyorsanız bu bağlantıda bulunan Java için SAP GUI'yi de yükleyebilirsiniz.
3. Başlamadan önce
- Google Cloud Console'daki proje seçici sayfasında bir Google Cloud projesi seçin veya oluşturun (örneğin:
abap-sdk-poc
). - Cloud projeniz için faturalandırmanın etkinleştirildiğinden emin olun. Faturalandırmanın bir projede etkin olup olmadığını kontrol etmeyi öğrenin. 90 günlük ücretsiz deneme hesabı kullanıyorsanız bu adımı atlayın.
- Google Cloud'da çalışan bir komut satırı ortamı olan Cloud Shell'i kullanacaksınız.
- Cloud Console'da sağ üst köşedeki Cloud Shell'i Etkinleştir'i tıklayın:
- Hesabınızın kimliğini doğrulamak ve varsayılan projeyi
abap-sdk-poc
olarak ayarlamak için Cloud Shell'de aşağıdaki komutları çalıştırın. Örnek olarakus-west4-b
bölgesi kullanılmıştır. Gerekirse lütfen aşağıdaki komutlarda projeyi ve bölgeyi tercihinize göre değiştirin.
gcloud auth login
gcloud config set project abap-sdk-poc
gcloud config set compute/zone us-west4-b
- Google Cloud için ABAP SDK'nın yüklü olduğu bir SAP sistemine erişiminiz olmalıdır.
- Bu uygulamalı laboratuvara devam etmeden önce 1. uygulamalı laboratuvarı (Install ABAP Platform Trial 1909 on Google Cloud Platform and Install ABAP SDK for Google Cloud) ve 2. uygulamalı laboratuvarı (Configure ABAP SDK Authentication using tokens for SAP Hosted on Compute Engine VM) tamamlamanız gerekir.
- 1. ve 2. codelab'i tamamladıysanız Google Cloud'da bir ABAP Platform Trial 1909 Sistemi'nin yanı sıra kimlik doğrulama ve bağlantı için gerekli kurulum sağlanmış olmalıdır.
- 1. ve 2. codelab'i tamamlamadıysanız bu codelab'de verilen adımları uygulamak için gereken tüm altyapı ve bağlantıya sahip olmazsınız. Bu nedenle, bu codelab'e devam etmeden önce 1. ve 2. codelab'i tamamlamanız gerekir.
4. Google Cloud projenizde BigQuery API V2'yi etkinleştirin
- Cloud Console'da sağ üst köşedeki Cloud Shell'i Etkinleştir'i tıklayın:
- BigQuery API'yi etkinleştirmek için Cloud Shell'de aşağıdaki komutları çalıştırın:
gcloud services enable bigquery.googleapis.com
Başarılı bir yürütmenin ardından aşağıdaki gibi bir mesaj görürsünüz.
Artık Google Cloud projenizde BigQuery API'yi etkinleştirmiş olmanız gerekir.
5. Güvenli BigQuery erişimi için hizmet hesabı oluşturma
BigQuery ML modelinden güvenli bir şekilde makine öğrenimi tahminleri almak için BigQuery İş Kullanıcısı ve BigQuery Veri Görüntüleyici rollerine sahip bir hizmet hesabı oluşturmanız gerekir. Bu roller, programınızın proje içinde sorgu (iş olarak) çalıştırmasına ve tablolardan veri okumasına olanak tanır. Bu rol, yalnızca iş oluşturmak ve verileri okumak için gerekli izni verir. Böylece güvenlik riskleri en aza indirilir.
Hizmet hesabı oluşturma
Gerekli role sahip bir hizmet hesabı oluşturmak için aşağıdaki adımları uygulayın:
- Cloud Shell terminalinde aşağıdaki komutu çalıştırın:
gcloud iam service-accounts create abap-sdk-bigquery-jobuser --display-name="Service Account for BigQuery Job user"
- Şimdi önceki adımda oluşturulan hizmet hesabına gerekli rolleri ekleyin:
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'
Yukarıdaki komutta, Google Cloud projesi için yer tutucu olarak abap-sdk-poc
kullanılır. abap-sdk-poc
yerine proje kimliğinizi yazın.
- Rolün eklendiğini doğrulamak için IAM sayfasına gidin. Oluşturduğunuz hizmet hesabı, kendisine atanmış rolle birlikte listelenmelidir.
6. BigQuery makine öğrenimi modeli oluşturma
Bu codelab'de, Londra'da bisiklet kiralama veri kümesini kümelemek için bir k-ortalama modeli oluşturacağız. Verilerinizi kümeler halinde gruplandırmak için k-means algoritmasını uygulayabilirsiniz. Tahmini analizle ilgili olan gözetimli makine öğreniminin aksine, gözetimsiz öğrenme tanımlayıcı analizle ilgilidir. Veriye dayalı kararlar verebilmek için verilerinizi anlamanız gerekir.
Veri kümenizi oluşturma
ML modelinizi depolamak için bir BigQuery veri kümesi oluşturmak üzere aşağıdaki adımları uygulayın:
- Google Cloud Console'da BigQuery sayfasına gidin. BigQuery sayfasına gidin
- Gezgin bölmesinde proje adınızı tıklayın.
İşlemleri görüntüle > Veri kümesi oluştur'u tıklayın.
- Veri kümesi oluştur sayfasında aşağıdakileri yapın:
- Veri Kümesi Kimliği için
bqml_tutorial
değişkenini girin. - Konum türü olarak Çoklu bölge'yi, ardından AB (Avrupa Birliği'nde birden fazla bölge) seçeneğini belirleyin. London Bicycle Hires herkese açık veri kümesi, AB çoklu bölgesinde saklanır. Veri kümeniz aynı konumda olmalıdır.
- Kalan varsayılan ayarları olduğu gibi bırakıp Veri kümesi oluştur'u tıklayın.
K-ortalama modeli oluşturma
Veri kümeniz ayarlandığına göre bir sonraki adım, verileri kullanarak k-means modeli oluşturmaktır. model_type=kmeans
seçeneğiyle CREATE MODEL ifadesini kullanarak k-ortalama modeli oluşturup eğitebilirsiniz.
Sorguyu çalıştırmak ve k-ortalama modeli oluşturmak için aşağıdaki adımları uygulayın:
- BigQuery sayfasına gidin. BigQuery'ye gitme
- Düzenleyici bölmesinde aşağıdaki SQL ifadesini çalıştırın:
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
- Gezinme panelindeki Kaynaklar bölümünde proje adınızı genişletin, bqml_tutorial'ı ve ardından london_station_clusters'ı tıklayın.
- Şema sekmesini tıklayın. Model şeması, BigQuery ML'nin kümeleme gerçekleştirmek için kullandığı üç istasyon özelliğini listeler. Şema aşağıdaki gibi görünmelidir:
- Değerlendirme sekmesini tıklayın. Bu sekmede, k-ortalama modeli tarafından tanımlanan kümelerin görselleştirmeleri gösterilir. Sayısal özellikler bölümünde, çubuk grafikler her bir merkez için en önemli 10 sayısal özellik değerini gösterir. Açılır menüden hangi özelliklerin görselleştirileceğini seçebilirsiniz.
7. Google Cloud için ABAP SDK'yı kullanarak BigQuery ML tahminleri alma
Google Cloud tarafında ön koşulları ayarladığınıza göre, Google Cloud için ABAP SDK'yı kullanarak makine öğrenimi modelinden tahminler almak üzere SAP sisteminizdeki adımları tamamlamaya hazırsınız.
İstemci anahtarı yapılandırması oluşturma
Google Cloud için ABAP SDK, kimlik doğrulama ve bağlantıyla ilgili yapılandırma için /GOOG/CLIENT_KEY
ve /GOOG/SERVIC_MAP.
tablolarını kullanır.
/GOOG/CLIENT_KEY
tablosundaki yapılandırmayı korumak için aşağıdaki adımları uygulayın:
- SAP GUI'de SPRO işlem kodunu girin.
- SAP Reference IMG'yi (SAP Referans IMG) tıklayın.
- ABAP SDK for Google Cloud > Basic Settings > Configure Client Key'i (Google Cloud için ABAP SDK'sı > Temel Ayarlar > İstemci Anahtarını Yapılandır) tıklayın.
- Listelenen alanlara göre aşağıdaki değerleri koruyun, diğer tüm alanları boş bırakın:
Alan | Değer |
Google Cloud Anahtar Adı | BIGQUERY_ML |
Google Cloud hizmet hesabı adı | abap-sdk-bigquery-jobuser@abap-sdk-poc.iam.gserviceaccount.com |
Google Cloud Kapsamı | https://www.googleapis.com/auth/cloud-platform |
Proje kimliği | abap-sdk-poc |
Yetkilendirme sınıfı | /GOOG/CL_AUTH_GOOGLE |
BigQuery ML modelinden tahmin almak için ABAP raporu oluşturma
ABAP raporu oluşturmak için aşağıdaki adımları uygulayın:
- SAP GUI'nizde
SE38
işlem koduna gidin veZDEMO_BIGQUERY_ML_PREDICT.
adında bir Rapor Programı oluşturun. - Açılan pop-up pencerede, aşağıdaki resimde gösterildiği gibi ayrıntıları girin:
- Sonraki pop-up pencerede Yerel Nesne'yi seçin veya uygun bir paket adı girin.
- ABAP düzenleyicide aşağıdaki kodu ekleyin:
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.
- Raporu kaydedip etkinleştirin.
- Raporu çalıştırın (F8).
Başarılı bir yürütme işleminden sonra aşağıdaki gibi bir rapor çıktısı görmeniz gerekir:
8. Tebrikler
"Google Cloud için ABAP SDK'sını kullanarak BigQuery Machine Learning (ML) modelinden tahmin alma" adlı codelab'i tamamladığınız için tebrikler.
BigQuery Machine Learning modelinin tahminlerini doğrudan SAP sisteminizden başarıyla aldınız. ABAP ile Google Cloud Hizmetleri arasında yeni bir entegrasyon düzeyine ulaştınız. Diğer heyecan verici Google Cloud için ABAP SDK codelab'leriyle ufkunuzu genişletin:
- Google Cloud için ABAP SDK ile Translation API'yi kullanma
- Parçalama kullanarak Cloud Storage paketine büyük bir nesne yükleme
- Google Cloud için ABAP SDK ile Secret Manager'dan kimlik bilgileri/gizli anahtarlar alma
- ABAP'tan Vertex AI test-bison'u çağırma
9. Temizleme
Google Cloud için ABAP SDK ile ilgili ek codelab'lere devam etmek istemiyorsanız lütfen temizleme işlemine geçin.
Projeyi silme
- Google Cloud projesini silin:
gcloud projects delete abap-sdk-poc
Belirli kaynakları silme
- Compute örneğini silin:
gcloud compute instances delete abap-trial-docker
- Güvenlik duvarı kurallarını silin:
gcloud compute firewall-rules delete sapmachine
- Hizmet hesabını silin:
gcloud iam service-accounts delete \
abap-sdk-bigquery-jobuser@abap-sdk-poc.iam.gserviceaccount.com