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 không cần ETL và 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 các khối lượng công việc được hỗ trợ của Spanner. Data Boost cho phép bạn thực hiện các truy vấn phân tích và xuất dữ liệu mà gần như không ảnh hưởng đến các khối lượng công việc hiện có trên thực thể Spanner được cung cấ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 kết hợp với các mối kết nối bên ngoài của BigQuery, Data Boost giú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 phiên bản 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 Data Boost
  • Cách truy cập vào dữ liệu Spanner từ BigQuery bằng Data Boost

Bạn cần có

  • Tài khoản Google Cloud và 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 tốc độ của riêng bạn

  1. Đăng nhập vào Google Cloud Console rồi tạo một dự án mới hoặc sử dụng lại một 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ự mà các API của Google không sử dụng. Bạn luôn có thể cập nhật thông tin này.
  • Mã dự án là mã duy nhất trên tất cả các dự án trên Google Cloud và không thể thay đổi (bạn không thể thay đổi mã này sau khi đã đặt). Cloud Console sẽ tự động tạo một chuỗi duy nhất; thường thì bạn không cần quan tâm đến chuỗi này. Trong hầu hết các lớp học lập trình, bạn sẽ cần tham chiếu đến Mã dự án (thường được xác định là PROJECT_ID). Nếu không thích mã nhận dạng được tạo, bạn có thể tạo một mã nhận dạng ngẫu nhiên khác. Hoặc bạn có thể thử tên người dùng của riêng mình để xem tên đó có được chấp nhận hay không. Bạn không thể thay đổi tên này sau bước này và tên này sẽ tồn tại trong suốt thời gian của dự án.
  • Để bạn nắm được thông tin, có một giá trị thứ ba là Số dự án mà một số API sử dụng. Tìm hiểu thêm về cả 3 giá trị này trong tài liệu.
  1. Tiếp theo, bạn cần bật tính năng thanh toán trong Cloud Console để sử dụng các tài nguyên/API trên Cloud. Việc thực hiện lớp học lập trình này sẽ không tốn nhiều chi phí, nếu có. Để tắt các tài nguyên nhằm tránh bị tính phí ngoài phạm vi hướng dẫn này, bạn có thể xoá các tài nguyê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í trị giá 300 USD.

Khởi động Cloud Shell

Mặc dù 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 trên Cloud.

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

55efc1aaa7a4d3ad.png

Quá trình này chỉ mất vài phút để cung cấp và kết nối với môi trường. Khi quá trình này kết thúc, bạn sẽ thấy như sau:

7ffe5cbb04455448.png

Máy ảo này được trang bị tất cả các công cụ phát triển mà bạn cần. Nó cung cấp một thư mục chính có dung lượng 5 GB và chạy trên Google Cloud, giúp tăng cường đáng kể hiệu suất mạng và hoạt động xác thực. Bạn có thể thực hiện mọi thao tá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 bất cứ thứ gì.

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

Bật Spanner API

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 vùng mặc định thành us-central1. Bạn có thể thay đổi thành một vùng khác được Spanner hỗ trợ cấu hình theo khu vực.

gcloud config set compute/region us-central1

Bật Spanner API:

gcloud services enable spanner.googleapis.com

Tạo phiên bản Spanner

Trong bước này, chúng ta sẽ thiết lập phiên bản Spanner cho lớp học lập trình. Để thực hiện việc này, hãy mở Cloud Shell rồi 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

Đầu ra 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

Sau 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 có nhiều cơ sở dữ liệu trên một phiên bản duy nhất.

Cơ sở dữ liệu là nơi bạn xác định giản đồ. Bạn cũng có thể kiểm soát những người có quyền truy cập vào cơ sở dữ liệu, thiết lập chế độ 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

Đầu ra của lệnh:

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

4. Tải dữ liệu

Để sử dụng tính năng Tăng cường dữ liệu, bạn cần có một số dữ liệu trong cơ sở dữ liệu. Để làm việc này, bạn sẽ tạo một vùng chứa Cloud Storage, tải một tệp nhập avro vào vùng chứa đó và bắt đầu một tác vụ nhập Dataflow để tải dữ liệu Avro vào Spanner.

Bật API

Để làm việc đó, hãy mở một dấu nhắc Cloud Shell nếu dấu nhắc trước đó đã đóng.

Nhớ bật API Compute, Cloud Storage và Dataflow.

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

Kết quả đầu ra 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.

Nhập tệp tạm thời 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ả đầu ra 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 rồi 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ả đầu ra 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

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

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

Kết quả đầu ra 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 một công việc nhập dataflow để 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ả đầu ra 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 lệnh nhập bằng lệnh này.

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

Kết quả đầu ra 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.png

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

Giờ đây, khi đã có dữ liệu trong Spanner, bạn có thể truy cập vào dữ liệu đó từ BigQuery. Để làm việc này, bạn sẽ thiết lập một 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 đến Spanner theo các bước sau.

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

580a0d237f11a9c5.png

75968de398fabf7e.png

Giờ đây, bạn có thể chạy một truy vấn để đọc dữ liệu từ Spanner. Chạy truy vấn này trong bảng điều khiển BigQuery, nhớ thay thế giá trị cho ${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;

Ví dụ về đầu ra:

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 thẻ "Thông tin về công việc".

9ae40b0aa8c4891.png

Tiếp theo, bạn sẽ thêm một 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 Tăng cường dữ liệu

Để sử dụng Spanner Data Boost, bạn cần tạo một mối kết nối bên ngoài mới từ BigQuery đến 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 đến Spanner. Thay đổi "Mã nhận dạng kết nối" và đánh dấu vào ô "sử dụng tính năng tăng tốc dữ liệu".

8e2205255b56a279.png

Sau khi tạo kết nối Data Boost, bạn có thể chạy cùng một truy vấn nhưng có tên kết nối mới. Một lần nữa, hãy thay thế project_id trong 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 cùng một tập hợp kết quả như trước. Thời gian có thay đổi không?

7. Tìm hiểu về tính năng Tăng cường 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 của thực thể Spanner. Điều này chủ yếu làm giảm tác động của khối lượng công việc phân tích đối với khối lượng công việc vận hành.

Bạn có thể thấy điều này nếu chạy truy vấn mà không sử dụng tính năng Tăng tốc dữ liệu vài lần trong vòng 2 hoặc 3 phút. 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 rồi 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. 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 phần System Insights (Thông tin chi tiết về hệ thống)

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ó Data Boost đang sử dụng CPU cho các thao tác "executesql_select_withpartitiontoken". Mặc dù truy vấn giống nhau, nhưng quá trình thực thi Data Boost không xuất hiện trên mức sử dụng CPU của thực thể.

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 Data Boost. Tập dữ liệu trong hướng dẫn này có kích thước nhỏ và không có khối lượng công việc nào khác cạnh tranh tài nguyên. Do đó, hướng dẫn này không nhằm mục đích giới thiệu các điểm cải thiện về hiệu suất.

Bạn có thể thoải mái thử nghiệm các truy vấn và khối lượng công việc để xem cách Data Boost hoạt động. Sau khi 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ếu bạn muốn giữ lại dự án và dọn dẹp các thành phần riêng lẻ, hãy làm theo các bước sau.

Xoá các mối kết nối BigQuery

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

c9348832bcf202a9.png

Xoá bộ chứa Cloud Storage

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

Xoá phiên bản Spanner

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

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ày.

Nội dung đã đề cập

  • Cách triển khai một phiên bản 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 phiên bản Spanner của bạn đối với 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