Bắt đầu sử dụng Spanner Data Boost và BigQuery

1. Giới thiệu

Trong lớp học lập trình này, bạn sẽ tìm hiểu cách sử dụng Spanner Data Boost để truy vấn dữ liệu Spanner từ BigQuery bằng các truy vấn liên kết zero-ETL mà không ảnh hưởng đến cơ sở dữ liệu Spanner.

f1de68f762a86cc7.png

Spanner Data Boost là một dịch vụ không máy chủ, được quản lý toàn diện, cung cấp các tài nguyên điện toán độc lập cho khối lượng công việc được hỗ trợ của Spanner. Tính năng Cải tiến dữ liệu cho phép bạn thực thi các truy vấn phân tích và hoạt động xuất dữ liệu mà gần như không gây ảnh hưởng đến tải công việc hiện có trên phiên bản Spanner đã được cấp phép bằng cách sử dụng mô hình sử dụng theo yêu cầu không máy chủ.

Khi được kết hợp với các kết nối bên ngoài của BigQuery, tính năng Cải tiến dữ liệu cho phép bạn dễ dàng truy vấn dữ liệu từ Spanner vào nền tảng phân tích dữ liệu mà không cần di chuyển dữ liệu ETL phức tạp.

Điều kiện tiên quyết

  • Hiểu biết cơ bản về Google Cloud, Console
  • Kỹ năng cơ bản về giao diện dòng lệnh và shell của Google

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

  • Cách triển khai một thực thể Spanner
  • Cách tải dữ liệu để tạo cơ sở dữ liệu Spanner
  • Cách truy cập vào dữ liệu Spanner từ BigQuery mà không cần tính năng Tăng cường dữ liệu
  • Cách truy cập vào dữ liệu Spanner từ BigQuery bằng tính năng Data Boost

Bạn cần có

  • Một tài khoản Google Cloud và một dự án trên Google Cloud
  • Một trình duyệt web như Chrome

2. Thiết lập và yêu cầu

Thiết lập môi trường theo tiến độ riêng

  1. Đăng nhập vào Google Cloud Console rồi tạo dự án mới hoặc sử dụng lại dự án hiện có. Nếu chưa có tài khoản Gmail hoặc Google Workspace, bạn phải tạo một tài khoản.

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png.

  • Tên dự án là tên hiển thị của những người tham gia dự án này. Đây là một chuỗi ký tự không được API của Google sử dụng. Bạn luôn có thể cập nhật ứng dụng.
  • Mã dự án là duy nhất trong tất cả các dự án Google Cloud và không thể thay đổi (không thể thay đổi sau khi đã đặt). Cloud Console sẽ tự động tạo một chuỗi duy nhất; thường bạn không quan tâm đến sản phẩm đó là gì. Trong hầu hết các lớp học lập trình, bạn sẽ cần tham khảo Mã dự án của mình (thường được xác định là PROJECT_ID). Nếu không thích mã đã tạo, bạn có thể tạo một mã nhận dạng ngẫu nhiên khác. Ngoài ra, bạn có thể thử cách riêng của mình để xem có thể sử dụng hay không. Bạn không thể thay đổi mã này sau bước này và mã vẫn giữ nguyên trong thời gian dự án.
  • Đối với thông tin của bạn, có giá trị thứ ba, Project Number (Số dự án), mà một số API sử dụng. Tìm hiểu thêm về cả ba giá trị này trong tài liệu này.
  1. Tiếp theo, bạn sẽ phải bật tính năng thanh toán trong Cloud Console để sử dụng API/tài nguyên trên đám mây. Việc chạy qua lớp học lập trình này sẽ không tốn nhiều chi phí. Để tắt các tài nguyên nhằm tránh phát sinh việc thanh toán ngoài hướng dẫn này, bạn có thể xoá các tài nguyên bạn đã tạo hoặc xoá dự án. Người dùng mới của Google Cloud đủ điều kiện tham gia chương trình Dùng thử miễn phí 300 USD.

Khởi động Cloud Shell

Mặc dù bạn có thể vận hành Google Cloud từ xa trên máy tính xách tay, nhưng trong lớp học lập trình này, bạn sẽ sử dụng Google Cloud Shell, một môi trường dòng lệnh chạy trong Đám mây.

Trong Google Cloud Console, hãy nhấp vào biểu tượng Cloud Shell ở thanh công cụ trên cùng bên phải:

55efc1aaa7a4d3ad.pngS

Sẽ chỉ mất một chút thời gian để cấp phép và kết nối với môi trường. Sau khi hoàn tất, bạn sẽ thấy như sau:

7ffe5cbb04455448.pngS

Máy ảo này chứa tất cả các công cụ phát triển mà bạn cần. Phiên bản này cung cấp thư mục gốc có dung lượng ổn định 5 GB và chạy trên Google Cloud, giúp nâng cao đáng kể hiệu suất và khả năng xác thực của mạng. Bạn có thể thực hiện mọi công việc trong lớp học lập trình này trong trình duyệt. Bạn không cần cài đặt gì cả.

3. Tạo một thực thể và cơ sở dữ liệu Spanner

Bật Spanner API

Bên trong Cloud Shell, hãy đảm bảo bạn đã thiết lập mã dự án:

gcloud config set project [YOUR-PROJECT-ID]
PROJECT_ID=$(gcloud config get-value project)

Định cấu hình khu vực mặc định của bạn thành us-central1. Vui lòng thay đổi chế độ cài đặt này thành một khu vực khác được cấu hình theo khu vực của Spanner hỗ trợ.

gcloud config set compute/region us-central1

Bật Spanner API:

gcloud services enable spanner.googleapis.com

Tạo thực thể Spanner

Ở bước này, chúng ta đã thiết lập thực thể Spanner cho lớp học lập trình. Để thực hiện việc này, hãy mở Cloud Shell và chạy lệnh sau:

export SPANNER_INSTANCE_ID=codelab-demo
export SPANNER_REGION=regional-us-central1
gcloud spanner instances create $SPANNER_INSTANCE_ID \
--config=$SPANNER_REGION \
--description="Spanner Codelab instance" \
--nodes=1

Kết quả của lệnh:

$ gcloud spanner instances create $SPANNER_INSTANCE_ID \
--config=$SPANNER_REGION \
--description="Spanner Codelab instance" \
--nodes=1
Creating instance...done.  

Tạo cơ sở dữ liệu

Khi thực thể của bạn đang chạy, bạn có thể tạo cơ sở dữ liệu. Spanner cho phép nhiều cơ sở dữ liệu trên một thực thể.

Cơ sở dữ liệu là nơi bạn xác định giản đồ của mình. Bạn cũng có thể kiểm soát ai có quyền truy cập vào cơ sở dữ liệu, thiết lập mã hoá tuỳ chỉnh, định cấu hình trình tối ưu hoá và đặt khoảng thời gian lưu giữ.

Để tạo cơ sở dữ liệu, hãy sử dụng lại công cụ dòng lệnh gcloud:

export SPANNER_DATABASE=codelab-db
gcloud spanner databases create $SPANNER_DATABASE \
 --instance=$SPANNER_INSTANCE_ID

Kết quả của lệnh:

$ gcloud spanner databases create $SPANNER_DATABASE \
 --instance=$SPANNER_INSTANCE_ID
Creating database...done.

4. Tải dữ liệu

Trước khi có thể sử dụng tính năng Cải tiến dữ liệu, bạn cần có một số dữ liệu trong cơ sở dữ liệu. Để thực hiện việc này, bạn sẽ tạo một bộ chứa Cloud Storage, tải dữ liệu nhập avro lên bộ chứa đó và bắt đầu công việc nhập Dataflow để tải dữ liệu Avro vào Spanner.

Bật API

Để làm việc đó, hãy mở lời nhắc Cloud Shell nếu bạn đã đóng lời nhắc trước đó.

Hãy nhớ bật các API Điện toán, Cloud Storage và Dataflow.

gcloud services enable compute.googleapis.com storage.googleapis.com dataflow.googleapis.com

Kết quả dự kiến trên bảng điều khiển:

$ gcloud services enable compute.googleapis.com storage.googleapis.com dataflow.googleapis.com
Operation "operations/acat.*snip*" finished successfully.

Tệp nhập theo giai đoạn trên Cloud Storage

Bây giờ, hãy tạo bộ chứa để lưu trữ các tệp avro:

export GCS_BUCKET=spanner-codelab-import_$(date '+%Y-%m-%d_%H_%M_%S')
gcloud storage buckets create gs://$GCS_BUCKET

Kết quả dự kiến trên bảng điều khiển:

$ gcloud storage buckets create gs://$GCS_BUCKET
Creating gs://spanner-codelab-import/...

Tiếp theo, hãy tải tệp tar xuống từ github và giải nén tệp đó.

wget https://github.com/dtest/spanner-databoost-tutorial/releases/download/v0.1/spanner-chat-db.tar.gz
tar -xzvf spanner-chat-db.tar.gz 

Kết quả dự kiến trên bảng điều khiển:

$ wget https://github.com/dtest/spanner-databoost-tutorial/releases/download/v0.1/spanner-chat-db.tar.gz
*snip*
*snip*(123 MB/s) - spanner-chat-db.tar.gz' saved [46941709/46941709]
$
$ tar -xzvf spanner-chat-db.tar.gz 
spanner-chat-db/
spanner-chat-db/users.avro-00000-of-00002
spanner-chat-db/user_notifications-manifest.json
spanner-chat-db/interests-manifest.json
spanner-chat-db/users-manifest.json
spanner-chat-db/users.avro-00001-of-00002
spanner-chat-db/topics-manifest.json
spanner-chat-db/topics.avro-00000-of-00002
spanner-chat-db/topics.avro-00001-of-00002
spanner-chat-db/user_interests-manifest.json
spanner-chat-db/spanner-export.json
spanner-chat-db/interests.avro-00000-of-00001
spanner-chat-db/user_notifications.avro-00000-of-00001
spanner-chat-db/user_interests.avro-00000-of-00001

Và bây giờ, hãy tải tệp lên bộ chứa bạn đã tạo.

gcloud storage cp spanner-chat-db gs://$GCS_BUCKET --recursive

Kết quả dự kiến trên bảng điều khiển:

$ gcloud storage cp spanner-chat-db gs://$GCS_BUCKET --recursive
Copying file://spanner-chat-db/users.avro-00000-of-00002 to gs://spanner-codelab-import/spanner-chat-db/users.avro-00000-of-00002
Copying file://spanner-chat-db/user_notifications-manifest.json to gs://spanner-codelab-import/spanner-chat-db/user_notifications-manifest.json
Copying file://spanner-chat-db/interests-manifest.json to gs://spanner-codelab-import/spanner-chat-db/interests-manifest.json           
Copying file://spanner-chat-db/users-manifest.json to gs://spanner-codelab-import/spanner-chat-db/users-manifest.json
Copying file://spanner-chat-db/users.avro-00001-of-00002 to gs://spanner-codelab-import/spanner-chat-db/users.avro-00001-of-00002
Copying file://spanner-chat-db/topics-manifest.json to gs://spanner-codelab-import/spanner-chat-db/topics-manifest.json
Copying file://spanner-chat-db/topics.avro-00000-of-00002 to gs://spanner-codelab-import/spanner-chat-db/topics.avro-00000-of-00002
Copying file://spanner-chat-db/topics.avro-00001-of-00002 to gs://spanner-codelab-import/spanner-chat-db/topics.avro-00001-of-00002
Copying file://spanner-chat-db/user_interests-manifest.json to gs://spanner-codelab-import/spanner-chat-db/user_interests-manifest.json
Copying file://spanner-chat-db/spanner-export.json to gs://spanner-codelab-import/spanner-chat-db/spanner-export.json
Copying file://spanner-chat-db/interests.avro-00000-of-00001 to gs://spanner-codelab-import/spanner-chat-db/interests.avro-00000-of-00001
Copying file://spanner-chat-db/user_notifications.avro-00000-of-00001 to gs://spanner-codelab-import/spanner-chat-db/user_notifications.avro-00000-of-00001
Copying file://spanner-chat-db/user_interests.avro-00000-of-00001 to gs://spanner-codelab-import/spanner-chat-db/user_interests.avro-00000-of-00001
  Completed files 13/13 | 54.6MiB/54.6MiB                                                                                               

Average throughput: 46.4MiB/s

Nhập dữ liệu

Với các tệp trong Cloud Storage, bạn có thể bắt đầu công việc nhập luồng dữ liệu để tải dữ liệu vào Spanner.

gcloud dataflow jobs run import_chatdb \
    --gcs-location gs://dataflow-templates-us-central1/latest/GCS_Avro_to_Cloud_Spanner \
    --region us-central1 \
    --staging-location gs://$GCS_BUCKET/tmp \
    --parameters \
instanceId=$SPANNER_INSTANCE_ID,\
databaseId=$SPANNER_DATABASE,\
inputDir=gs://$GCS_BUCKET/spanner-chat-db

Kết quả dự kiến trên bảng điều khiển:

$ gcloud dataflow jobs run import_chatdb \
>     --gcs-location gs://dataflow-templates-us-central1/latest/GCS_Avro_to_Cloud_Spanner \
>     --region us-central1 \
>     --staging-location gs://$GCS_BUCKET/tmp \
>     --parameters \
> instanceId=$SPANNER_INSTANCE_ID,\
> databaseId=$SPANNER_DATABASE,\
> inputDir=gs://$GCS_BUCKET/spanner-chat-db
createTime: '*snip*'
currentStateTime: '*snip*'
id: *snip*
location: us-central1
name: import_chatdb
projectId: *snip*
startTime: '*snip*'
type: JOB_TYPE_BATCH

Bạn có thể kiểm tra trạng thái của công việc nhập bằng lệnh này.

gcloud dataflow jobs list --filter="name=import_chatdb" --region us-central1

Kết quả dự kiến trên bảng điều khiển:

$ gcloud dataflow jobs list --filter="name=import_chatdb"
`--region` not set; getting jobs from all available regions. Some jobs may be missing in the event of an outage. https://cloud.google.com/dataflow/docs/concepts/regional-endpoints
JOB_ID                                   NAME           TYPE   CREATION_TIME        STATE    REGION
*snip*                                  import_chatdb  Batch  2024-04-*snip*  Done  us-central1

Xác minh dữ liệu trong Spanner

Bây giờ, hãy chuyển đến Spanner Studio và đảm bảo dữ liệu có ở đó. Trước tiên, hãy mở rộng bảng chủ đề để xem các cột.

cd1cf38efd2b974a.png

Bây giờ, hãy chạy truy vấn sau để đảm bảo có dữ liệu:

SELECT COUNT(*) FROM topics;

Kết quả đầu ra dự kiến:

89e5d92fbe71c022.pngS

5. Đọc dữ liệu từ BigQuery

Bây giờ, bạn đã có dữ liệu trong Spanner, đã đến lúc truy cập vào dữ liệu đó từ trong BigQuery. Để thực hiện việc này, bạn cần thiết lập kết nối bên ngoài với Spanner trong BigQuery.

Giả sử bạn có các quyền phù hợp, hãy tạo một kết nối bên ngoài tới Spanner theo các bước sau.

Nhấp vào nút ‘Thêm' nút ở đầu bảng điều khiển BigQuery, rồi chọn "Kết nối với nguồn dữ liệu vĩnh viễn" .

580a0d237f11a9c5.pngS

75968de398fabf7e.png.

Bây giờ, bạn có thể chạy một truy vấn để đọc dữ liệu từ Spanner. Hãy chạy truy vấn này trong bảng điều khiển BigQuery, nhớ thay thế giá trị cho ${PROJECT_ID} của bạn:

SELECT *
FROM (
  SELECT * FROM EXTERNAL_QUERY("projects/${PROJECT_ID}/locations/us-central1/connections/codelab-demo-chat_no-databoost", "SELECT users.userUUID, SHA256(users.email) as hashed_email, COUNT(*) num_topics, m.last_posted from users HASH JOIN (select MAX(t.created) last_posted, t.userUUID FROM topics t GROUP BY 2) m USING (userUUID)HASH JOIN topics USING (userUUID) GROUP BY users.userUUID, users.email, m.last_posted") 
)
ORDER BY num_topics DESC;

Kết quả điểm dữ liệu:

e47265487c3e39bd.png

Bạn có thể xem thông tin về công việc, chẳng hạn như thời gian chạy và lượng dữ liệu đã được xử lý trong mục "Thông tin công việc" .

9ae40b0aa8c4891.pngS

Tiếp theo, bạn sẽ thêm kết nối Data Boost vào Spanner và so sánh kết quả.

6. Đọc dữ liệu bằng tính năng Cải tiến dữ liệu

Để sử dụng Spanner Data Boost, bạn cần tạo một kết nối bên ngoài mới từ BigQuery với Spanner. Nhấp vào "Thêm" trong bảng điều khiển BigQuery, rồi chọn "Connections from external data sources" một lần nữa.

Điền thông tin chi tiết bằng cùng một URI kết nối với Spanner. Thay đổi "Mã kết nối" và chọn mục "sử dụng tăng cường dữ liệu" .

8e2205255b56a279.pngS

Khi tạo kết nối Data Boost, bạn có thể chạy cùng một truy vấn nhưng với tên kết nối mới. Thay thế project_id một lần nữa vào truy vấn.

SELECT *
FROM (
  SELECT * FROM EXTERNAL_QUERY("projects/${PROJECT_ID}/locations/us-central1/connections/codelab-demo-chat_use-databoost", "SELECT users.userUUID, SHA256(users.email) as hashed_email, COUNT(*) num_topics, m.last_posted from users HASH JOIN (select MAX(t.created) last_posted, t.userUUID FROM topics t GROUP BY 2) m USING (userUUID)HASH JOIN topics USING (userUUID) GROUP BY users.userUUID, users.email, m.last_posted") 
)
ORDER BY num_topics DESC;

Bạn sẽ nhận được kết quả giống như trước. Thời gian có thay đổi không?

7. Tìm hiểu về cải tiến dữ liệu

Spanner Data Boost cho phép bạn sử dụng các tài nguyên không liên quan đến tài nguyên thực thể Spanner của bạn. Điều này chủ yếu làm giảm tác động của các khối lượng công việc phân tích đối với các khối lượng công việc vận hành.

Bạn có thể thấy điều này nếu bạn chạy truy vấn để không sử dụng tính năng Tăng cường dữ liệu vài lần trong hơn 2 hoặc 3 phút. Hãy nhớ thay thế ${PROJECT_ID}.

SELECT *
FROM (
  SELECT * FROM EXTERNAL_QUERY("projects/${PROJECT_ID}/locations/us-central1/connections/codelab-demo-chat_no-databoost", "SELECT users.userUUID, SHA256(users.email) as hashed_email, COUNT(*) num_topics, m.last_posted from users HASH JOIN (select MAX(t.created) last_posted, t.userUUID FROM topics t GROUP BY 2) m USING (userUUID)HASH JOIN topics USING (userUUID) GROUP BY users.userUUID, users.email, m.last_posted") 
)
ORDER BY num_topics DESC;

Sau đó, đợi thêm vài phút và chạy truy vấn để sử dụng tính năng Tăng cường dữ liệu thêm vài lần nữa. Hãy nhớ thay thế ${PROJECT_ID}.

SELECT *
FROM (
  SELECT * FROM EXTERNAL_QUERY("projects/${PROJECT_ID}/locations/us-central1/connections/codelab-demo-chat_use-databoost", "SELECT users.userUUID, SHA256(users.email) as hashed_email, COUNT(*) num_topics, m.last_posted from users HASH JOIN (select MAX(t.created) last_posted, t.userUUID FROM topics t GROUP BY 2) m USING (userUUID)HASH JOIN topics USING (userUUID) GROUP BY users.userUUID, users.email, m.last_posted") 
)
ORDER BY num_topics DESC;

Bây giờ, hãy quay lại Spanner studio trong Cloud Console rồi chuyển đến System Insights

c1dc67fcc7a2a71.png

Tại đây, bạn có thể xem các chỉ số về CPU. Các truy vấn chạy mà không có tính năng Cải tiến dữ liệu đang sử dụng CPU cho "executesql_select_withpartitiontoken" các toán tử. Mặc dù truy vấn giống nhau, nhưng quá trình thực thi Tăng cường dữ liệu không xuất hiện trong quá trình sử dụng CPU thực thể của bạn.

a86a7508b6738904.png

Trong nhiều trường hợp, hiệu suất của truy vấn phân tích sẽ cải thiện khi sử dụng tính năng Tăng cường dữ liệu. Tập dữ liệu trong hướng dẫn này nhỏ và không có tải công việc nào khác cạnh tranh về tài nguyên. Do đó, hướng dẫn này không kỳ vọng thể hiện những điểm cải thiện về hiệu suất.

Bạn có thể thử nghiệm các truy vấn và khối lượng công việc đó cũng như xem cách hoạt động của tính năng Cải tiến dữ liệu. Khi bạn hoàn tất, hãy chuyển sang phần tiếp theo để dọn dẹp môi trường.

8. Dọn dẹp môi trường

Nếu đã tạo dự án dành riêng cho lớp học lập trình này, bạn chỉ cần xoá dự án để dọn dẹp nó. Nếu bạn muốn giữ lại dự án và dọn dẹp từng thành phần, hãy tiếp tục thực hiện các bước sau.

Xoá các kết nối với BigQuery

Để xóa cả hai kết nối, hãy nhấp vào ba dấu chấm bên cạnh tên kết nối. Chọn "Xoá", rồi làm theo hướng dẫn để xoá kết nối đó.

c9348832bcf202a9.png

Xoá bộ chứa Cloud Storage

gcloud storage rm --recursive gs://$GCS_BUCKET

Xoá thực thể Spanner

Để dọn dẹp, bạn chỉ cần chuyển đến phần Cloud Spanner của Cloud Console rồi xoá "codelab-demo" thực thể mà chúng ta đã tạo trong lớp học lập trình này.

ab7c83ebdab74c04.png

9. Xin chúc mừng

Chúc mừng bạn đã hoàn thành lớp học lập trình.

Nội dung đã đề cập

  • Cách triển khai một thực thể Spanner
  • Cách tải dữ liệu vào Spanner bằng Dataflow
  • Cách truy cập vào dữ liệu Spanner từ BigQuery
  • Cách sử dụng Spanner Data Boost để tránh ảnh hưởng đến thực thể Spanner cho các truy vấn phân tích từ BigQuery

10. Khảo sát

Kết quả:

Bạn sẽ sử dụng hướng dẫn này như thế nào?

Chỉ đọc qua Đọc và hoàn thành bài tập