1. Введение
В этой лаборатории кода вы создадите модель машинного обучения (ML) в BigQuery и получите прогнозы на основе этой модели с помощью ABAP SDK для Google Cloud .
Вы будете использовать следующие сервисы Google Cloud:
- Большой запрос
- Облачная оболочка
Что ты построишь
Вы создадите следующее:
- Модель машинного обучения (ML) BigQuery.
- Сервисный аккаунт с ролью пользователя задания BigQuery для вызова API BigQuery.
- Программа ABAP для вызова BigQuery API и получения прогнозов из модели ML.
2. Требования
- Браузер, например Chrome или Firefox .
- Проект Google Cloud с включенной оплатой или создайте 90-дневную бесплатную пробную учетную запись для Google Cloud Platform.
- SAP GUI (Windows или Java), установленный в вашей системе. Если графический интерфейс SAP уже установлен на вашем ноутбуке, подключитесь к SAP, используя внешний IP-адрес виртуальной машины в качестве IP-адреса сервера приложений. Если вы используете Mac, вы также можете установить графический интерфейс SAP для Java, доступный по этой ссылке.
3. Прежде чем начать
- В Google Cloud Console на странице выбора проекта выберите или создайте проект Google Cloud (например:
abap-sdk-poc
). - Убедитесь, что для вашего облачного проекта включена оплата. Узнайте, как проверить, включена ли оплата в проекте . Пропустите этот шаг, если вы используете 90-дневную бесплатную пробную учетную запись .
- Вы будете использовать Cloud Shell , среду командной строки, работающую в Google Cloud.
- В Cloud Console нажмите «Активировать Cloud Shell» в правом верхнем углу:
- Выполните следующие команды в Cloud Shell, чтобы пройти аутентификацию для своей учетной записи, и установите проект по умолчанию
abap-sdk-poc
. В качестве примера используется зонаus-west4-b
. При необходимости измените проект и зону с помощью следующих команд в соответствии с вашими предпочтениями.
gcloud auth login
gcloud config set project abap-sdk-poc
gcloud config set compute/zone us-west4-b
- У вас должен быть доступ к системе SAP с установленным ABAP SDK для Google Cloud.
- Прежде чем приступить к этой лаборатории кода, необходимо выполнить лабораторную работу 1 ( Установить пробную версию платформы ABAP 1909 на Google Cloud Platform и установить ABAP SDK для Google Cloud) и лабораторную работу 2 ( Настроить аутентификацию ABAP SDK с использованием токенов для SAP, размещенного на виртуальной машине Compute Engine ).
- Если вы завершили Codelab 1 и Codelab 2, это предоставит вам пробную систему ABAP Platform 1909 в Google Cloud, а также необходимые настройки для аутентификации и подключения.
- Если вы не завершили Лабораторию кода 1 и Лабораторию кода 2, у вас не будет всей необходимой инфраструктуры и возможностей подключения для выполнения шагов, описанных в этой лаборатории кода. Таким образом, вы должны завершить кодовую таблицу 1 и кодовую таблицу 2, прежде чем приступать к этой кодовой таблице.
4. Включите BigQuery API V2 в своем проекте Google Cloud.
- В Cloud Console нажмите «Активировать Cloud Shell» в правом верхнем углу:
- Выполните следующие команды в Cloud Shell, чтобы включить BigQuery API:
gcloud services enable bigquery.googleapis.com
При успешном выполнении вы должны увидеть сообщение, как показано ниже.
Теперь в вашем проекте Google Cloud должен быть включен BigQuery API.
5. Создайте сервисную учетную запись для безопасного доступа к BigQuery.
Чтобы безопасно получать прогнозы ML из модели BigQuery ML, вам необходимо создать учетную запись службы с ролями пользователя задания BigQuery и средства просмотра данных BigQuery , что позволит вашей программе выполнять запросы (как задания) внутри проекта и считывать данные из таблиц. Эта роль предоставляет только необходимые разрешения на создание заданий и чтение данных, что сводит к минимуму риски безопасности.
Создать учетную запись службы
Чтобы создать сервисную учетную запись с необходимой ролью, выполните следующие действия:
- Выполните следующую команду в терминале Cloud Shell:
gcloud iam service-accounts create abap-sdk-bigquery-jobuser --display-name="Service Account for BigQuery Job user"
- Теперь добавьте необходимые роли в сервисную учетную запись, созданную на предыдущем шаге:
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'
Приведенная выше команда использует abap-sdk-poc
в качестве заполнителя для проекта Google Cloud. Замените abap-sdk-poc
на идентификатор вашего проекта.
- Чтобы убедиться, что роль добавлена, перейдите на страницу IAM . Созданная вами учетная запись службы должна быть указана вместе с назначенной ей ролью.
6. Создание модели машинного обучения BigQuery.
В этой кодовой лаборатории мы создадим модель k-средних для кластеризации набора данных о прокате велосипедов в Лондоне. Вы можете применить алгоритм k-средних для группировки данных в кластеры. В отличие от машинного обучения с учителем, которое связано с прогнозной аналитикой, обучение без учителя связано с описательной аналитикой. Речь идет о понимании ваших данных, чтобы вы могли принимать решения на основе данных.
Создайте свой набор данных
Чтобы создать набор данных BigQuery для хранения модели машинного обучения, выполните следующие действия:
- В консоли Google Cloud перейдите на страницу BigQuery. Перейти на страницу BigQuery
- На панели «Проводник» щелкните имя проекта.
- Нажмите
Просмотр действий > Создать набор данных .
- На странице Создать набор данных выполните следующие действия:
- В качестве идентификатора набора данных введите
bqml_tutorial
. - В поле «Тип местоположения » выберите «Мультирегион» , а затем выберите «ЕС» (несколько регионов в Европейском Союзе) . Публичный набор данных London Bicycle Hires хранится в нескольких регионах ЕС. Ваш набор данных должен находиться в том же месте.
- Остальные настройки по умолчанию оставьте без изменений и нажмите «Создать набор данных» .
Создайте модель k-средних
Теперь, когда ваш набор данных настроен, следующим шагом будет создание модели k-средних с использованием данных. Вы можете создать и обучить модель k-средних, используя оператор CREATE MODEL с опцией model_type=kmeans
.
Чтобы запустить запрос и создать модель k-средних, выполните следующие шаги:
- Перейдите на страницу BigQuery . Перейти в BigQuery
- На панели редактора выполните следующий оператор 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
- На панели навигации в разделе « Ресурсы » разверните имя проекта, щелкните bqml_tutorial , а затем щелкните london_station_clusters .
- Откройте вкладку «Схема» . В схеме модели перечислены три атрибута станции, которые BigQuery ML использовал для выполнения кластеризации. Схема должна выглядеть следующим образом:
- Откройте вкладку «Оценка» . На этой вкладке отображаются визуализации кластеров, идентифицированных моделью k-средних. В разделе «Числовые функции » гистограммы отображают до 10 наиболее важных числовых значений функций для каждого центроида. Вы можете выбрать, какие функции визуализировать, из раскрывающегося меню.
7. Получайте прогнозы BigQuery ML с помощью ABAP SDK для Google Cloud.
Теперь, когда вы настроили предварительные условия на стороне Google Cloud, вы готовы выполнить шаги в своей системе SAP, чтобы получить прогнозы из модели ML с помощью ABAP SDK для Google Cloud.
Создание конфигурации ключа клиента
Для конфигурации, связанной с аутентификацией и подключением, ABAP SDK для Google Cloud использует таблицы /GOOG/CLIENT_KEY
и /GOOG/SERVIC_MAP.
Чтобы сохранить конфигурацию в таблице /GOOG/CLIENT_KEY
, выполните следующие действия:
- В графическом интерфейсе SAP введите код транзакции SPRO .
- Щелкните Справочное IMG SAP .
- Нажмите ABAP SDK для Google Cloud > Основные настройки > Настроить ключ клиента.
- Сохраните следующие значения в перечисленных полях, все остальные поля оставьте пустыми:
Поле | Ценить |
Имя облачного ключа Google | BIGQUERY_ML |
Имя учетной записи облачной службы Google | abap-sdk-bigquery-jobuser@abap-sdk-poc.iam.gserviceaccount.com |
Облачная область Google | https://www.googleapis.com/auth/cloud-platform |
Идентификатор проекта | abap-sdk-poc |
Класс авторизации | /GOOG/CL_AUTH_GOOGLE |
Создайте отчет ABAP, чтобы получать прогнозы на основе модели BigQuery ML.
Чтобы построить отчет ABAP, выполните следующие действия:
- В графическом интерфейсе SAP перейдите к коду транзакции
SE38
и создайте программу отчетов с именемZDEMO_BIGQUERY_ML_PREDICT.
- В открывшемся всплывающем окне укажите детали, как показано на следующем изображении:
- В следующем всплывающем окне выберите «Локальный объект» или укажите имя пакета, если это необходимо.
- В редакторе ABAP добавьте следующий код:
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.
- Сохраните и активируйте отчет.
- Выполнить отчет (F8).
В случае успешного выполнения вы должны увидеть вывод отчета, как показано ниже:
8. Поздравления
Отличная работа по завершению кодовой лаборатории «Получение прогнозов из модели машинного обучения (ML) BigQuery с использованием ABAP SDK для Google Cloud»!
Вы успешно получили прогнозы модели машинного обучения BigQuery прямо из своей системы SAP! Вы открыли новый уровень интеграции между ABAP и облачными службами Google. Расширьте свой кругозор с помощью других интересных лабораторий кода ABAP SDK для Google Cloud:
- Использование API перевода с ABAP SDK для Google Cloud
- Загрузите большой объект в корзину Cloud Storage, используя фрагментирование.
- Получение учетных данных/секретов из Secret Manager с помощью ABAP SDK для Google Cloud
- Вызов Vertex AI test-bison из ABAP
9. Очистка
Если вы не хотите продолжать работу с дополнительными лабораториями кода, связанными с ABAP SDK для Google Cloud, продолжите очистку.
Удалить проект
- Удалите проект Google Cloud:
gcloud projects delete abap-sdk-poc
Удаление отдельных ресурсов
- Удалите вычислительный экземпляр:
gcloud compute instances delete abap-trial-docker
- Удалите правила брандмауэра:
gcloud compute firewall-rules delete sapmachine
- Удалить сервисный аккаунт:
gcloud iam service-accounts delete \
abap-sdk-bigquery-jobuser@abap-sdk-poc.iam.gserviceaccount.com