1. Giriş
Bu codelab'de, BigQuery'de bir makine öğrenimi (ML) modeli oluşturacak ve Google Cloud için ABAP SDK'sını kullanarak bu modelden tahminler alacaksınız.
Aşağıdaki Google Cloud hizmetlerinden yararlanırsınız:
- BigQuery
- Cloud Shell
Ne oluşturacaksınız?
Aşağıdakileri oluşturursunuz:
- BigQuery makine öğrenimi (ML) modeli.
- BigQuery API'yi çağıracak BigQuery İş Kullanıcısı rolüne sahip bir hizmet hesabı.
- BigQuery API'yi çağıran ve ML modelinden tahminler alan 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 SAP GUI (Windows veya Java) yüklü olmalıdır. SAP GUI dizüstü bilgisayarınızda zaten yüklüyse uygulama sunucusu IP'si olarak sanal makinenin harici IP adresini kullanarak SAP'e 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 projenizde faturalandırmanın etkinleştirildiğinden emin olun. Projede faturalandırmanın etkin olup olmadığını nasıl kontrol edeceğinizi öğ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 için kimlik doğrulama yapmak ve varsayılan projeyi
abap-sdk-poc
olarak ayarlamak üzere 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 komutlardaki 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'sının yüklü olduğu bir SAP sistemine erişiminiz olmalıdır.
- Bu codelab'e devam etmeden önce 1. codelab'i (Google Cloud Platform'a ABAP Platform Trial 1909'u ve Google Cloud için ABAP SDK'sını yükleme) ve 2. codelab'i (Compute Engine sanal makinesinde barındırılan SAP için jetonları kullanarak ABAP SDK kimlik doğrulamasını yapılandırma) tamamlamanız gerekir.
- 1. ve 2. codelab'i tamamladıysanız kimlik doğrulama ve bağlantı için gerekli kurulumla birlikte Google Cloud'da bir ABAP Platform Trial 1909 sistemi sağlanmış olur.
- 1. ve 2. codelab'i tamamlamadıysanız bu codelab'de verilen adımları gerçekleştirmek için gerekli tüm altyapıya 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ştirme
- 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 şekilde yürütüldüğünde 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
Bir BigQuery ML modelinden ML tahminlerini güvenli bir şekilde almak için BigQuery İş Kullanıcısı ve BigQuery Veri Görüntüleyen rollerine sahip bir hizmet hesabı oluşturmanız gerekir. Bu hizmet hesabı, programınızın proje içinde sorguları (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 atanan rolle birlikte listelenir.
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ümelere gruplandırmak için k-ortalama algoritmasını uygulayabilirsiniz. Tahmini analizlerle ilgili olan gözetimli makine öğreniminin aksine, gözetimsiz öğrenme açıklayıcı analizlerle ilgilidir. Amaç, veriye dayalı kararlar alabilmek için verilerinizi anlamaktır.
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 projenizin adını 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ğerini girin. - Konum türü için Çoklu bölge'yi, ardından AB (Avrupa Birliği'ndeki birden fazla bölge)'yi seçin. London Bicycle Hires herkese açık veri kümesi, AB çoklu bölgesinde depolanır. Veri kümeniz aynı konumda olmalıdır.
- Kalan varsayılan ayarları olduğu gibi bırakın ve Veri kümesi oluştur'u tıklayın.
K-ortalama modeli oluşturma
Veri kümeniz oluşturulduğuna göre sonraki adımda verileri kullanarak bir k-ortalama modeli oluşturmanız gerekir. model_type=kmeans
seçeneğiyle CREATE MODEL ifadesini kullanarak k-ortalama modeli oluşturabilir ve 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.
- Schema (Şema) sekmesini tıklayın. Model şemasında, BigQuery ML'nin küme oluşturmak için kullandığı üç istasyon özelliği listelenir. Ş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ündeki çubuk grafikler, her merkez noktası 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'sını kullanarak BigQuery ML tahminleri alma
Google Cloud tarafında ön koşulları ayarladığınıza göre, Google Cloud için ABAP SDK'sını kullanarak ML modelinden tahmin almak için SAP sisteminizde adımları tamamlamaya hazırsınız.
İstemci Anahtarı Yapılandırması Oluşturma
Google Cloud için ABAP SDK'sı, 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'ye SPRO işlem kodunu girin.
- SAP Reference IMG'yi (SAP Referans IMG'si) tıklayın.
- Google Cloud için ABAP SDK'sı > Temel Ayarlar > İstemci Anahtarını Yapılandır'ı tıklayın.
- Listelenen alanlar için 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.
adlı bir Rapor Programı oluşturun - Açılan pop-up'ta aşağıdaki resimde gösterildiği gibi ayrıntıları girin:
- Sonraki pop-up'ta Yerel Nesne'yi seçin veya uygun bir paket adı girin.
- ABAP Düzenleyici'ye 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şleminde, aşağıdaki gibi bir rapor çıkışı görürsünüz:
8. Tebrikler
"Google Cloud için ABAP SDK'sını kullanarak BigQuery makine öğrenimi (ML) modelinden tahmin alma" kod laboratuvarını tamamladığınız için tebrikler.
Bir BigQuery makine öğrenimi 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. Google Cloud için ABAP SDK'sıyla ilgili diğer heyecan verici Codelab'lerle ufkunuzu genişletin:
- Google Cloud için ABAP SDK'sı ile Translation API'yi kullanma
- Parçalara ayırma özelliğini kullanarak büyük bir nesneyi Cloud Storage paketine yükleme
- Google Cloud için ABAP SDK'sı ile Secret Manager'dan Kimlik Bilgileri/Gizli Anahtarlar Alma
- ABAP'den Vertex AI test-bison'u çağırma
9. Temizleme
Google Cloud için ABAP SDK'sıyla ilgili ek kod laboratuvarlarına devam etmek istemiyorsanız lütfen temizleme işlemine devam edin.
Projeyi silme
- Google Cloud projesini silin:
gcloud projects delete abap-sdk-poc
Kaynakları tek tek silme
- Bilgisayar ö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