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

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

6757b2fb50ddcc2d.png.

  • 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ực us-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

  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 hiển thị như sau

b5f52859df2c2f56.png

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

  1. 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"
  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ụ đã 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.

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

  1. 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
  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 hành động > 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 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 trang 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:

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

5f1fc313bd0f6a5.pngS

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

8f9b53971e33dc08.pngS

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

  1. Trong GUI SAP, hãy nhập mã giao dịch SPRO.
  2. Nhấp vào Ảnh đối chiếu của SAP.
  3. Nhấp vào ABAP SDK for 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 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:

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

4cb32d50427df294.pngs

  1. 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.
  2. 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.
  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 kết quả báo cáo như sau:

739e5685511fc9fc.png.

6405542a597ed09f.png.

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

  1. Xoá phiên bản điện toán:
gcloud compute instances delete abap-trial-docker
  1. Xoá quy tắc 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