Thông tin về lớp học lập trình này
1. Giới thiệu
Trong lớp học lập trình này, bạn sẽ tạo một mô hình học máy (ML) trong BigQuery và nhận kết quả dự đoán từ mô hình này bằng ABAP SDK cho Google Cloud.
Bạn sẽ tận dụng các dịch vụ sau đây của Google Cloud:
- BigQuery
- Cloud Shell
Sản phẩm bạn sẽ tạo ra
Bạn sẽ tạo các mục sau:
- Một mô hình BigQuery Machine Learning (ML).
- Một tài khoản dịch vụ có vai trò Người dùng BigQuery Job để gọi BigQuery API.
- Một chương trình ABAP để gọi BigQuery API và nhận thông tin dự đoán từ mô hình học máy.
2. Yêu cầu
- Một trình duyệt, chẳng hạn như Chrome hoặc Firefox.
- Một dự án Google Cloud đã bật tính năng thanh toán hoặc Tạo tài khoản dùng thử miễn phí 90 ngày cho Google Cloud Platform.
- SAP GUI (Windows hoặc Java) được cài đặt trong hệ thống của bạn. Nếu SAP GUI đã được cài đặt trên máy tính xách tay, hãy kết nối với SAP bằng địa chỉ IP bên ngoài của máy ảo làm IP của Máy chủ ứng dụng. Nếu đang dùng máy Mac, bạn cũng có thể cài đặt SAP GUI cho Java có trong đường liên kết này.
3. Trước khi bắt đầu
- Trong Google Cloud Console, trên trang chọn dự án, hãy chọn hoặc tạo một dự án trên Google Cloud (Ví dụ:
abap-sdk-poc
). - Đảm bảo bạn đã bật tính năng thanh toán cho dự án trên Cloud. Tìm hiểu cách kiểm tra xem tính năng thanh toán có được bật trên một dự án hay không. Bỏ qua bước này nếu bạn đang sử dụng Tài khoản dùng thử miễn phí 90 ngày.
- Bạn sẽ sử dụng Cloud Shell, một môi trường dòng lệnh chạy trong Google Cloud.
- Trong Cloud Console, hãy nhấp vào Kích hoạt Cloud Shell ở góc trên cùng bên phải:
- Chạy các lệnh sau trong Cloud Shell để xác thực cho tài khoản của bạn và đặt dự án mặc định thành
abap-sdk-poc
. Vùngus-west4-b
được dùng làm ví dụ. Nếu cần, vui lòng thay đổi dự án và khu vực trong các lệnh sau dựa trên lựa chọn ưu tiên của bạn.
gcloud auth login
gcloud config set project abap-sdk-poc
gcloud config set compute/zone us-west4-b
- Bạn phải có quyền truy cập vào một hệ thống SAP đã cài đặt ABAP SDK cho Google Cloud.
- Bạn phải hoàn thành codelab 1 (Cài đặt ABAP Platform Trial 1909 trên Nền tảng Google Cloud và Cài đặt ABAP SDK cho Google Cloud) và codelab 2 (Định cấu hình xác thực ABAP SDK bằng mã thông báo cho SAP được lưu trữ trên VM Compute Engine) trước khi tiếp tục với codelab này.
- Nếu bạn đã hoàn tất lớp học lập trình 1 và lớp học lập trình 2, thì bạn sẽ được cung cấp Hệ thống dùng thử nền tảng ABAP 1909 trên Google Cloud, cùng với chế độ thiết lập bắt buộc để xác thực và kết nối.
- Nếu chưa hoàn thành lớp học lập trình 1 và lớp học lập trình 2, bạn sẽ không có tất cả cơ sở hạ tầng và khả năng kết nối cần thiết để thực hiện các bước được cung cấp trong lớp học lập trình này. Do đó, bạn phải hoàn tất lớp học lập trình 1 và lớp học lập trình 2 trước khi tiếp tục với lớp học lập trình này.
4. Bật BigQuery API phiên bản 2 trong dự án trên Google Cloud
- Trong Cloud Console, hãy nhấp vào Kích hoạt Cloud Shell ở góc trên cùng bên phải:
- Chạy các lệnh sau trong Cloud Shell để bật BigQuery API:
gcloud services enable bigquery.googleapis.com
Khi thực thi thành công, bạn sẽ thấy một thông báo xuất hiện như minh hoạ bên dưới
Giờ đây, bạn đã bật BigQuery API trong Dự án trên Google Cloud.
5. Tạo tài khoản dịch vụ để truy cập BigQuery một cách an toàn
Để nhận được các dự đoán ML một cách an toàn từ một mô hình BigQuery ML, bạn cần tạo một tài khoản dịch vụ có vai trò Người dùng công việc BigQuery và Người xem dữ liệu BigQuery. Các vai trò này sẽ cho phép chương trình của bạn chạy các truy vấn (dưới dạng công việc) trong dự án và đọc dữ liệu từ các bảng. Vai trò này chỉ cấp quyền cần thiết để tạo các công việc và đọc dữ liệu, giúp giảm thiểu rủi ro bảo mật.
Tạo một tài khoản dịch vụ
Để tạo một tài khoản dịch vụ có vai trò bắt buộc, hãy thực hiện các bước sau:
- Chạy lệnh sau trong cửa sổ dòng lệnh Cloud Shell:
gcloud iam service-accounts create abap-sdk-bigquery-jobuser --display-name="Service Account for BigQuery Job user"
- Bây giờ, hãy thêm các vai trò bắt buộc vào tài khoản dịch vụ mà bạn đã tạo ở bước trước:
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'
Lệnh trên sử dụng abap-sdk-poc
làm phần giữ chỗ cho Dự án Google Cloud. Thay abap-sdk-poc
bằng mã dự án của bạn.
- Để xác minh rằng vai trò đã được thêm, hãy chuyển đến trang IAM. Tài khoản dịch vụ mà bạn đã tạo sẽ xuất hiện cùng với vai trò được chỉ định cho tài khoản đó.
6. Tạo mô hình học máy BigQuery
Trong lớp học lập trình này, chúng ta sẽ tạo một mô hình k-means để phân cụm tập dữ liệu về dịch vụ cho thuê xe đạp ở London. Bạn có thể áp dụng thuật toán k-means để nhóm dữ liệu thành các cụm. Không giống như công nghệ học máy có giám sát (phân tích dự đoán), học không giám sát là phân tích mô tả. Điều này có nghĩa là bạn cần hiểu rõ dữ liệu để có thể đưa ra quyết định dựa trên dữ liệu.
Tạo tập dữ liệu
Để tạo một tập dữ liệu BigQuery nhằm lưu trữ mô hình học máy, hãy thực hiện các bước sau:
- Trong bảng điều khiển Google Cloud, hãy chuyển đến trang BigQuery. Chuyển đến trang BigQuery
- Trong ngăn Explorer (Trình khám phá), hãy nhấp vào tên dự án của bạn.
- Nhấp vào
Xem các thao tác > Tạo tập dữ liệu.
- Trên trang Tạo tập dữ liệu, hãy làm như sau:
- Đối với Mã tập dữ liệu, hãy nhập
bqml_tutorial
. - Đối với Loại vị trí, hãy chọn Nhiều khu vực, rồi chọn Liên minh Châu Âu (nhiều khu vực ở Liên minh Châu Âu). Tập dữ liệu công khai về dịch vụ cho thuê xe đạp ở London được lưu trữ tại nhiều khu vực ở Liên minh Châu Âu. Tập dữ liệu của bạn phải ở cùng một vị trí.
- Để nguyên các chế độ cài đặt mặc định còn lại và nhấp vào Tạo tập dữ liệu.
Tạo mô hình k-means
Sau khi thiết lập tập dữ liệu, bước tiếp theo là tạo một mô hình k-means bằng dữ liệu. Bạn có thể tạo và huấn luyện một mô hình k-means bằng câu lệnh CREATE MODEL với lựa chọn model_type=kmeans
.
Để chạy truy vấn và tạo mô hình k-means, hãy thực hiện các bước sau:
- Chuyển đến trang BigQuery. Chuyển đến BigQuery
- Trong ngăn trình chỉnh sửa, hãy chạy câu lệnh SQL sau:
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
- Trong bảng điều hướng, trong phần Tài nguyên, hãy mở rộng tên dự án của bạn, nhấp vào bqml_tutorial, rồi nhấp vào london_station_clusters.
- Nhấp vào thẻ Lược đồ. Giản đồ mô hình liệt kê 3 thuộc tính của trạm mà BigQuery ML đã dùng để thực hiện việc phân cụm. Lược đồ sẽ có dạng như sau:
- Nhấp vào thẻ Đánh giá. Thẻ này hiển thị hình ảnh trực quan về các cụm do mô hình k-means xác định. Trong mục Tính năng bằng số, biểu đồ thanh hiển thị tối đa 10 giá trị tính năng bằng số quan trọng nhất cho mỗi tâm điểm. Bạn có thể chọn những đối tượng cần trực quan hoá trong trình đơn thả xuống.
7. Nhận kết quả dự đoán của BigQuery ML bằng ABAP SDK cho Google Cloud
Giờ đây, sau khi thiết lập các điều kiện tiên quyết trên Google Cloud, bạn đã sẵn sàng hoàn tất các bước trong hệ thống SAP để nhận thông tin dự đoán từ mô hình học máy bằng cách sử dụng ABAP SDK cho Google Cloud.
Tạo cấu hình khoá ứng dụng
Đối với cấu hình liên quan đến hoạt động xác thực và kết nối, ABAP SDK cho Google Cloud sẽ sử dụng các bảng /GOOG/CLIENT_KEY
và /GOOG/SERVIC_MAP.
Để duy trì cấu hình trong bảng /GOOG/CLIENT_KEY
, hãy làm theo các bước sau:
- Trong SAP GUI, hãy nhập mã giao dịch SPRO.
- Nhấp vào SAP Reference IMG.
- Nhấp vào ABAP SDK for Google Cloud > Basic Settings > Configure Client Key (ABAP SDK cho Google Cloud > Cài đặt cơ bản > Định cấu hình khoá ứng dụng)
- Duy trì các giá trị sau đối với các trường được liệt kê, để trống tất cả các trường khác:
Trường | Giá trị |
Tên khoá Google Cloud | BIGQUERY_ML |
Tên tài khoản dịch vụ Google Cloud | abap-sdk-bigquery-jobuser@abap-sdk-poc.iam.gserviceaccount.com |
Phạm vi Google Cloud | https://www.googleapis.com/auth/cloud-platform |
Mã dự án | abap-sdk-poc |
Lớp uỷ quyền | /GOOG/CL_AUTH_GOOGLE |
Tạo Báo cáo ABAP để nhận thông tin dự đoán từ mô hình BigQuery ML
Để tạo Báo cáo ABAP, hãy thực hiện các bước sau:
- Trong SAP GUI, hãy chuyển đến mã giao dịch
SE38
và tạo một Chương trình báo cáo có tên làZDEMO_BIGQUERY_ML_PREDICT.
- Trong cửa sổ bật lên mở ra, hãy cung cấp thông tin chi tiết như trong hình sau:
- Trong cửa sổ bật lên tiếp theo, hãy chọn Local Object hoặc cung cấp tên gói nếu thích hợp.
- Trong Trình chỉnh sửa ABAP, hãy thêm đoạn mã sau:
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.
- Lưu và kích hoạt báo cáo.
- Thực thi báo cáo (F8).
Khi thực thi thành công, bạn sẽ thấy một báo cáo đầu ra như minh hoạ dưới đây:
8. Xin chúc mừng
Bạn đã hoàn thành xuất sắc lớp học lập trình "Nhận thông tin dự đoán từ mô hình học máy (ML) của BigQuery bằng ABAP SDK cho Google Cloud"!
Bạn đã truy xuất thành công các dự đoán của một mô hình Học máy của BigQuery ngay trong hệ thống SAP! Bạn đã mở khoá một cấp độ tích hợp mới giữa ABAP và Google Cloud Services. Mở rộng kiến thức của bạn bằng các lớp học lập trình thú vị khác về ABAP SDK cho Google Cloud:
- Sử dụng Translation API với ABAP SDK cho Google Cloud
- Tải một đối tượng lớn lên bộ chứa Cloud Storage bằng cách phân đoạn
- Truy xuất thông tin đăng nhập/khoá bí mật từ Secret Manager bằng ABAP SDK cho Google Cloud
- Gọi Vertex AI test-bison từ ABAP
9. Dọn dẹp
Nếu bạn không muốn tiếp tục với các khoá học lập trình bổ sung liên quan đến ABAP SDK cho Google Cloud, vui lòng tiến hành dọn dẹp.
Xoá dự án
- Xoá dự án trên Google Cloud:
gcloud projects delete abap-sdk-poc
Xoá từng tài nguyên
- Xoá phiên bản điện toán:
gcloud compute instances delete abap-trial-docker
- Xoá các quy tắc về tường lửa:
gcloud compute firewall-rules delete sapmachine
- Xoá tài khoản dịch vụ:
gcloud iam service-accounts delete \
abap-sdk-bigquery-jobuser@abap-sdk-poc.iam.gserviceaccount.com