Đọc thông tin dự đoán của BigQuery ML trong SAP bằng SDK ABAP cho Google Cloud

Đọc các dự đoán của BigQuery ML trong SAP bằng ABAP SDK cho Google Cloud

Thông tin về lớp học lập trình này

subjectLần cập nhật gần đây nhất: thg 7 30, 2025
account_circleTác giả: Ajith Urimajalu

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

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

6757b2fb50ddcc2d.png

  • 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ùng us-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

  1. 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:

6757b2fb50ddcc2d.png

  1. 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

b5f52859df2c2f56.png

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 BigQueryNgườ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:

  1. 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"
  1. 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.

  1. Để 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:

  1. Trong bảng điều khiển Google Cloud, hãy chuyển đến trang BigQuery. Chuyển đến trang BigQuery
  2. Trong ngăn Explorer (Trình khám phá), hãy nhấp vào tên dự án của bạn.
  3. Nhấp vào 5cf3b742649f1e2c.png Xem các thao tác > Tạo tập dữ liệu.

3fbc072041bfa313.png

  1. 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 trang 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:

  1. Chuyển đến trang BigQuery. Chuyển đến BigQuery
  2. 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
  1. 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.
  2. 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:

5f1feb313bd0f6a5.png

  1. 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.

8f9b53971e33dc08.png

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/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:

  1. Trong SAP GUI, hãy nhập mã giao dịch SPRO.
  2. Nhấp vào SAP Reference IMG.
  3. 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)

25871e639293b9ee.png

  1. 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:

  1. 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.
  2. 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:

4cb32d50427df294.png

  1. 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.
  2. 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.
  1. Lưu và kích hoạt báo cáo.
  2. 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:

739e5685511fc9fc.png

6405542a597ed09f.png

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

  1. Xoá phiên bản điện toán:
gcloud compute instances delete abap-trial-docker
  1. Xoá các quy tắc về tường lửa:
gcloud compute firewall-rules delete sapmachine
  1. Xoá tài khoản dịch vụ:
gcloud iam service-accounts delete \
    abap-sdk-bigquery-jobuser@abap-sdk-poc.iam.gserviceaccount.com