Liên kết dữ liệu ETL bằng 0 từ BigQuery đến AlloyDB

1. Tổng quan

Trong Phần 1, chúng tôi đã chuyển đổi thành công các tệp PDF hỗn loạn, không có cấu trúc thành các bảng sạch, thông minh và có cấu trúc trong BigQuery bằng Knowledge Catalog và DataScan. Giờ đây, chúng ta đã có một kho dữ liệu mạnh mẽ.

Nếu cần nhớ lại nhanh, trong phần 1 của lớp học thực hành, chúng ta đã lấy trường hợp sử dụng của một chuỗi cửa hàng Sữa chua đông lạnh hư cấu và chuyển đổi 400 tệp PDF không có cấu trúc (bao gồm văn bản, bảng và hình ảnh) thành các bảng BigQuery có cấu trúc rõ ràng với các mối quan hệ được suy luận tự động giữa chúng bằng cách sử dụng Danh mục kiến thức BigQuery và Dataplex.

Sản phẩm bạn sẽ tạo ra

Trong phiên này, chúng ta sẽ thiết lập AlloyDB cho PostgreSQL và làm một việc kỳ diệu: liên kết dữ liệu BigQuery trực tiếp vào AlloyDB. Điều này có nghĩa là ứng dụng giao dịch của chúng tôi có thể truy vấn dữ liệu kho hàng theo thời gian thực mà không cần sao chép hoặc sao y bất kỳ dữ liệu nào.

Là nhà phát triển, bạn phải đặt câu hỏi này ở giai đoạn này:

"Nếu dữ liệu đã có trong BigQuery, tại sao lại cần đến AlloyDB? Tại sao ứng dụng không chạy câu lệnh SELECT trực tiếp trên BigQuery?"

Sau đây là lý do:

Với Liên kết Lakehouse, bạn có thể sử dụng công cụ truy vấn của AlloyDB để hỗ trợ khối lượng công việc giao dịch và phân tích của ứng dụng trong cùng một giao diện. Bạn cũng có thể hiện thực hoá hoặc nhập dữ liệu này trên AlloyDB để truy cập nhanh hơn khi sử dụng trong các ứng dụng của mình. Nhờ đó, bạn có thể sử dụng AI của AlloyDBcông cụ dạng cột.

Bạn có thể sử dụng AlloyDB làm cơ sở dữ liệu giao dịch và cũng có thể có một lượng lớn dữ liệu nằm trong BigQuery hoặc BigLake. Các ứng dụng của bạn thường tích hợp độc lập với cả hai hệ thống này để truy cập vào dữ liệu trên các dịch vụ khác nhau này của Google Cloud. Liên kết Lakehouse cho AlloyDB cho phép bạn sử dụng tính năng hỗ trợ truy vấn liên kết của AlloyDB được triển khai dưới dạng trình bao bọc dữ liệu bên ngoài để truy cập vào dữ liệu BigQuery và AlloyDB bằng giao diện SQL trong AlloyDB.

Thay vì xây dựng một quy trình ETL dễ bị lỗi để truy vấn dữ liệu BigQuery từ AlloyDB, chúng ta sẽ sử dụng các truy vấn liên kết. AlloyDB sẽ đóng vai trò là một điểm cuối hợp nhất, dễ dàng truy cập vào BigQuery khi cần.

Hãy bắt đầu xây dựng!

1a3f48f6d70b16ad.png

Kiến thức bạn sẽ học được

  • Cách thiết lập Cụm, Thực thể và Mạng AlloyDB chỉ bằng một nút nhấn
  • Cách thiết lập tiện ích để chuẩn bị cho việc liên kết
  • Cách thiết lập liên kết từ BigQuery đến AlloyDB
  • Kiểm thử

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.
  • Có kiến thức cơ bản về SQL.

2. Trước khi bắt đầu

Tạo dự án

  1. 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.
  2. Đảm bảo rằng 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.
  1. Bạn sẽ sử dụng Cloud Shell, một môi trường dòng lệnh chạy trong Google Cloud. Nhấp vào Kích hoạt Cloud Shell ở đầu bảng điều khiển Cloud.

Hình ảnh nút Kích hoạt Cloud Shell

  1. Sau khi kết nối với Cloud Shell, bạn có thể kiểm tra để đảm bảo rằng bạn đã được xác thực và dự án được đặt thành mã dự án của bạn bằng lệnh sau:
gcloud auth list
  1. Chạy lệnh sau trong Cloud Shell để xác nhận rằng lệnh gcloud biết về dự án của bạn.
gcloud config list project
  1. Nếu bạn muốn xác thực
gcloud auth login
  1. Nếu bạn chưa đặt dự án, hãy dùng lệnh sau để đặt:
export PROJECT_ID=<YOUR_PROJECT_ID>
gcloud config set project <YOUR_PROJECT_ID>
  1. Bật các API bắt buộc: Chạy lệnh này để bật tất cả các API bắt buộc:
gcloud services enable alloydb.googleapis.com

Các lỗi thường gặp và cách khắc phục sự cố

Hội chứng "Dự án ma"

Bạn đã chạy gcloud config set project, nhưng thực ra bạn đang xem một dự án khác trong giao diện người dùng Console. Kiểm tra mã dự án trong trình đơn thả xuống ở trên cùng bên trái!

Rào chắn thanh toán

Bạn đã bật dự án nhưng quên tài khoản thanh toán. AlloyDB là một công cụ hiệu suất cao; công cụ này sẽ không khởi động nếu "bình xăng" (thanh toán) trống.

Độ trễ API Propagation

Bạn đã nhấp vào "Bật API", nhưng dòng lệnh vẫn hiển thị Service Not Enabled. Chờ 60 giây. Đám mây cần chút thời gian để kích hoạt các nơ-ron.

Quota Quags

Nếu đang sử dụng tài khoản dùng thử hoàn toàn mới, bạn có thể đạt đến hạn mức theo vùng cho các thực thể AlloyDB. Nếu us-central1 không thành công, hãy thử us-east1.

3. Tóm tắt nhanh dữ liệu từ Phần 1

Trong phần này, bạn cần đảm bảo rằng dữ liệu có cấu trúc mà chúng tôi trích xuất từ các tệp PDF không có cấu trúc có trong BigQuery. Nếu bạn bỏ lỡ phần 1 hoặc không có Tài khoản thanh toán, bạn vẫn có thể hoàn tất các bước sau để bắt đầu:

Truy cập vào Google Cloud Console bằng tài khoản Gmail cá nhân rồi nhấp vào nút Kích hoạt Cloud Shell ở góc trên bên phải của bảng điều khiển:

91567e2f55467574.png

Sau đó, hãy làm theo các bước trong phần không có tài khoản thanh toán bên dưới:

Giờ đây, khi đã có dữ liệu trong BigQuery, hãy chuyển sang các bước tiếp theo.

4. Thiết lập Cụm, phiên bản và mạng AlloyDB

Có một ứng dụng bắt đầu nhanh dựa trên web giúp bạn thiết lập Cụm AlloyDB, Thực thể và các phần phụ thuộc khác. Bạn có thể làm theo các bước 2–4 trong lớp học này để thiết lập chỉ bằng một nút nhấp:

https://codelabs.developers.google.com/quick-alloydb-setup

Sau khi bạn tạo cụm, hãy chuyển đến trang Tổng quan về cụm và sao chép thông tin tài khoản dịch vụ từ đó.

7cd9d04e06c826d8.png

5. Thiết lập quyền

Cấp quyền BigQuery cho Tài khoản dịch vụ này

  1. Chuyển đến IAM & Admin > IAM.
  2. Nhấp vào Cấp quyền truy cập.
  3. Dán địa chỉ Tài khoản dịch vụ AlloyDB vào trường Bên giao đại lý mới.
  4. Chỉ định các vai trò sau:
  • Người xem dữ liệu BigQuery (roles/bigquery.dataViewer): Cho phép đọc dữ liệu.
  • Người dùng BigQuery (roles/bigquery.user): Cho phép chạy các truy vấn.
  • (Không bắt buộc nhưng nên dùng) Người dùng phiên đọc BigQuery (roles/bigquery.readSessionUser): Tối ưu hoá việc đọc các tập dữ liệu lớn thông qua Storage Read API.

6. Kết nối với AlloyDB và bật tiện ích BigQuery

Bây giờ, chúng ta sẽ kết nối với phiên bản AlloyDB mới để định cấu hình tiện ích liên kết. Chúng ta sẽ sử dụng AlloyDB Studio cho việc này.

  1. Trên trang Tổng quan về cụm (bảng điều khiển AlloyDB), hãy nhấp vào AlloyDB Studio.

1dd78902dc2b4f39.png

  1. Kết nối với cơ sở dữ liệu, tên người dùng và mật khẩu mà bạn đã định cấu hình tại thời điểm thực hiện bước Thiết lập nhanh AlloyDB.
  2. Sau khi kết nối, trên thẻ Trình chỉnh sửa truy vấn ở bên phải, hãy nhập các câu lệnh sau và CHẠY từng câu lệnh một:
CREATE EXTENSION IF NOT EXISTS  bigquery_fdw;

CREATE SERVER bigquery_server FOREIGN DATA WRAPPER bigquery_fdw;

CREATE USER MAPPING FOR postgres SERVER bigquery_server;
  1. Sau khi hoàn tất, hãy chuyển đến ngăn trình khám phá ở bên trái rồi di chuyển xuống các bảng BigQuery:

efe4f8be930824aa.png

  1. Nhấp vào biểu tượng 3 dấu chấm rồi nhấp vào "Kết nối bảng BigQuery".
  2. Trong cửa sổ bật lên Kết nối bảng BigQuery, hãy chọn project_id và tên tập dữ liệu BigQuery (được tạo ở phần 1) mà bạn muốn truy vấn dữ liệu trong cơ sở dữ liệu AlloyDB.

1cc345197b0fbddf.png

  1. Chọn từng bảng một để kết nối tất cả dữ liệu của bạn với AlloyDB. Điều này là để chúng tôi xác thực các loại cột nhằm đảm bảo rằng chúng được hỗ trợ trong AlloyDB.

Nếu bạn muốn làm điều tương tự với SQL thay vì thông qua phương pháp trỏ và nhấp:

CREATE FOREIGN TABLE <<TABLE_NAME>> (
      "cas_number" VARCHAR, "ingredient_name" VARCHAR, "max_moisture_percentage" DOUBLE PRECISION, "ph_range" VARCHAR, "purity_percentage" DOUBLE PRECISION, "shelf_life_months" BIGINT, "specific_gravity_range" VARCHAR
    ) SERVER "bigquery_server" OPTIONS (
      project '<<PROJECT_ID>>',
      dataset 'froyo_data',
      table '<<BQ_TABLE_NAME>>'
    );

Thật kỳ diệu!!!

Chúng tôi vừa tạo "Bảng bên ngoài" trong AlloyDB. Các bảng này trông và hoạt động giống như các bảng PostgreSQL thông thường, nhưng không lưu trữ bất kỳ dữ liệu nào. Khi bạn truy vấn, AlloyDB sẽ chuyển ngay truy vấn đó đến BigQuery, tìm nạp kết quả và trả về cho bạn.

7. Kiểm thử liên kết trong AlloyDB

Hãy xác minh rằng chúng ta có thể truy vấn tập dữ liệu BigQuery phân tích khổng lồ trực tiếp từ cơ sở dữ liệu PostgreSQL giao dịch.

Vẫn trong AlloyDB Studio, hãy chạy một truy vấn để tìm hiểu xem "Midnight Swirl" có những chất gây dị ứng nào (cũng là câu hỏi mà chúng ta đã đặt ra trong Phần 1, nhưng lần này là hỏi từ AlloyDB!):

SELECT
    p.product_name,
    i.ingredient_name,
    a.allergen_name
FROM
    consistsof c
INNER JOIN product p
    ON c.product_id = p.product_id
INNER JOIN ingredient i
    ON c.ingredient_id = i.ingredient_name
LEFT OUTER JOIN containsallergen a
    ON i.ingredient_id = a.ingredient_id
WHERE
    UPPER(p.product_name) LIKE '%MIDNIGHT%SWIRL%'
    AND a.allergen_name IS NOT NULL;

Đây rồi. Bạn sẽ thấy kết quả giống hệt như trong BigQuery.

7d0be18295c5dfbd.png

8. Dọn dẹp

Sau khi hoàn tất bài thực hành này, đừng quên xoá cụm và phiên bản AlloyDB.

Thao tác này sẽ dọn dẹp cụm cùng với(các) phiên bản của cụm.

9. Chúc mừng bạn đã có Lớp dữ liệu hợp nhất

Hãy nghĩ về những gì chúng ta vừa đạt được:

  1. Ứng dụng giao dịch của chúng tôi (chạy trên AlloyDB) có thể xử lý các phiên hoạt động của người dùng diễn ra nhanh chóng và đồng thời.
  2. Khi cần dữ liệu phân tích chuyên sâu hoặc ngữ cảnh lịch sử (chẳng hạn như thông tin chi tiết về nhà cung cấp hoặc các mối liên kết phức tạp giữa các thành phần), tác nhân này sẽ truy vấn froyo_dataschema của BigQuery.
  3. Zero ETL. Không có quy trình xử lý dữ liệu nào bị gián đoạn. Không có cơ sở dữ liệu bị lệch. Chúng tôi lưu trữ một lần (trong BQ) và tính toán khi cần.

Giờ đây, khi nền tảng dữ liệu của chúng ta (cả phân tích và giao dịch) đã vững chắc và kết nối với nhau, chúng ta đã sẵn sàng cho phần thú vị.

Trong Phần 3, chúng ta sẽ xây dựng Ứng dụng nhiều tác nhân nằm trên cùng của cấu trúc này để chạy các hoạt động kinh doanh của Froyo!