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 thông tin dự đoán từ mô hình này bằng SDK ABAP cho Google Cloud.
Bạn sẽ sử 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 như sau:
- Mô hình học máy (ML) của BigQuery.
- Tài khoản dịch vụ có vai trò Người dùng BigQuery Job để gọi BigQuery API.
- Chương trình ABAP để gọi BigQuery API và nhận thông tin dự đoán từ mô hình ML.
2. Yêu cầu
- Một trình duyệt, chẳng hạn như Chrome hoặc Firefox.
- Một dự án trê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.
- GUI SAP (Windows hoặc Java) được cài đặt trong hệ thống của bạn. Nếu bạn đã cài đặt GUI SAP 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 dùng máy Mac, bạn cũng có thể cài đặt GUI SAP cho Java qua đường liên kết này.
3. Trước khi bắt đầu
- Trong Google Cloud Console, trên trang bộ 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 rằng bạn đã bật tính năng thanh toán cho dự án trên Google 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 tài khoản của bạn và đặt dự án mặc định thành
abap-sdk-poc
. Khu vựcus-west4-b
được dùng làm ví dụ. Nếu cần, vui lòng thay đổi dự án và vùng 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 SDK ABAP dành cho Google Cloud.
- Bạn phải hoàn tất lớp học lập trình 1 (Cài đặt Bản dùng thử ABAP Platform 1909 trên Google Cloud Platform và Cài đặt SDK ABAP cho Google Cloud) và lớp học lập trình 2 (Định cấu hình Xác thực SDK ABAP bằng mã thông báo cho SAP được lưu trữ trên máy ảo Compute Engine) trước khi tiếp tục tham gia lớp học lập trình này.
- Nếu bạn đã hoàn thành lớp học lập trình 1 và lớp học lập trình 2, thì chúng tôi đã cung cấp cho bạn Hệ thống dùng thử ABAP Platform 1909 trên Google Cloud, cùng với các bước thiết lập cần thiết cho việ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 trong lớp học lập trình này. Do đó, bạn phải hoàn thành 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 lớp học lập trình này.
4. Bật BigQuery API V2 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 hiển thị như sau
Bây giờ, bạn đã bật BigQuery API trong dự án Google Cloud của mình.
5. Tạo tài khoản dịch vụ để truy cập an toàn vào BigQuery
Để nhận thông tin dự đoán của một mô hình học máy BigQuery một cách an toàn, 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. Điều 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ô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 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 thiết bị đầu cuối 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ụ đã 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 thế abap-sdk-poc
bằng mã dự án.
- Để xác minh, vai trò đã được thêm, hãy truy cập vào trang IAM. Danh sách tài khoản dịch vụ 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 thuê xe đạp ở London. Bạn có thể áp dụng thuật toán k-means để nhóm dữ liệu thành nhiều cụm. Không giống như công nghệ học máy có giám sát (dành cho số liệu phân tích dự đoán), còn mô hình học không giám sát tập trung vào số liệu phân tích mô tả. Đó là về việc hiểu dữ liệu của bạn để bạn có thể đưa ra quyết định dựa trên dữ liệu.
Tạo tập dữ liệu
Để tạo tập dữ liệu BigQuery nhằm lưu trữ mô hình học máy, hãy làm theo các bước sau:
- Trong bảng điều khiển Google Cloud, hãy truy cập vào trang BigQuery. Truy cập vào 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 hành động > 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 mục 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 London lựa chọn thuê xe đạp được lưu trữ trong nhiều vùng của Liên minh Châu Âu. Tập dữ liệu của bạn phải ở cùng một vị trí.
- Giữ nguyên các chế độ cài đặt mặc định còn lại, rồi nhấp vào Tạo tập dữ liệu.
Tạo mô hình k-means
Bây giờ, tập dữ liệu của bạn đã được thiết lập, bước tiếp theo là tạo mô hình k-means bằng dữ liệu này. Bạn có thể tạo và huấn luyện mô hình k-means bằng cách sử dụng câu lệnh TẠO MÔ HÌNH với tuỳ 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
- Trên bảng điều hướng, ở phần Tài nguyên, hãy mở rộng tên dự án, nhấp vào bqml_ hướng dẫn rồi nhấp vào london_station_clusters.
- Nhấp vào thẻ Giản đồ. Giản đồ mô hình liệt kê 3 thuộc tính của trạm mà công nghệ học máy BigQuery dùng để phân cụm. Giản đồ sẽ có dạng như sau:
- Nhấp vào thẻ Đánh giá. Thẻ này trình bày hình ảnh trực quan của các cụm được xác định bằng mô hình k-means. Trong Đối tượng số, biểu đồ thanh hiển thị tối đa 10 giá trị đối tượng số quan trọng nhất cho mỗi trọng tâm. Bạn có thể chọn các đối tượng để minh hoạ trong trình đơn thả xuống.
7. Nhận thông tin dự đoán của công nghệ học máy BigQuery bằng cách sử dụng ABAP SDK cho Google Cloud
Giờ đây, sau khi thiết lập các điều kiện tiên quyết về phía Google Cloud, bạn đã sẵn sàng hoàn tất các bước trong hệ thống SAP của mình để nhận thông tin dự đoán từ mô hình học máy bằ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 việc xác thực và kết nối, SDK ABAP của 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 thực hiện các bước sau:
- Trong GUI SAP, hãy nhập mã giao dịch SPRO.
- Nhấp vào Ảnh đối chiếu của SAP.
- Nhấp vào ABAP SDK for Google Cloud > Cài đặt cơ bản > Định cấu hình khoá ứng dụng
- Duy trì các giá trị sau so 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 của 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 máy học BigQuery
Để tạo Báo cáo ABAP, hãy làm theo các bước sau:
- Trong GUI SAP, hãy chuyển đến mã giao dịch
SE38
rồi 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ới mở ra, hãy cung cấp các 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 (Đối tượng cục bộ) hoặc cung cấp tên gói cho phù hợp.
- Trong Trình chỉnh sửa ABAP, hãy thêm 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 kết quả báo cáo như sau:
8. Xin chúc mừng
Đã xuất sắc hoàn thành khoá học "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" codelab!
Bạn đã truy xuất thành công thông tin dự đoán của một mô hình Học máy BigQuery, ngay trong hệ thống SAP của bạn! Bạn hiện đã đạt được khả năng tích hợp mới giữa ABAP và các dịch vụ của Google Cloud. Mở rộng chân trời bằng ABAP SDK thú vị khác cho các lớp học lập trình 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 tính năng phân đoạn
- Truy xuất thông tin xác thực/thông tin bí mật từ Trình quản lý bí mật 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 các lớp học lập trình khác liên quan đến ABAP SDK dành 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á quy tắc 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