1. Giới thiệu
Chào mừng bạn đến với giai đoạn cuối của cuộc điều tra về Hàng hoá thất lạc! Sau khi theo dõi chiếc thùng container chứa các bức tượng nhỏ Android bị đánh cắp từ London đến tận Sydney, chúng tôi đã mất dấu vết. Bằng cách vô hiệu hoá bộ phát đáp, hòm bảo mật thông minh của thùng container đã kích hoạt chế độ khoá khẩn cấp tự động.
Để khôi phục hàng hoá có giá trị cao trước khi bị khoá vĩnh viễn, nhiệm vụ của bạn là tìm vị trí cuối cùng của thùng chứa và truy xuất mật mã ghi đè thủ công để mở khoá hầm bằng cách thủ công.

Để tìm thấy thùng hàng bị thất lạc và đảm bảo an toàn cho hàng hoá, bạn sẽ tạo một Biểu đồ tài sản BigQuery để theo dõi hành trình vận chuyển. Sau đó, bạn sẽ truy vấn mạng này bằng ngôn ngữ tự nhiên thông qua Phân tích dựa trên cuộc trò chuyện và hoàn tất bằng cách thực hiện một tìm kiếm ngữ nghĩa trên siêu dữ liệu của dữ liệu bằng Danh mục kiến thức để xác định mã ghi đè.
💡 Bỏ lỡ Phòng thí nghiệm 1 hoặc Phòng thí nghiệm 2? Đừng lo lắng! Phòng thí nghiệm này hoàn toàn độc lập. Các bước thiết lập môi trường sẽ cung cấp mọi thứ bạn cần để có thể bắt đầu ngay và hoàn thành một cách độc lập.
Bạn sẽ thực hiện
- Sao chép kho lưu trữ và chạy tập lệnh thiết lập trong Google Cloud Shell.
- Tạo biểu đồ thuộc tính trong BigQuery để liên kết dữ liệu về công ty, tàu và bản kê khai.
- Sử dụng Conversational Analytics để truy vấn biểu đồ bằng ngôn ngữ tự nhiên, theo dõi hành trình của hàng hoá để xác định người vận hành chịu trách nhiệm.
- Xác định vị trí bảng chứa mã ghi đè cuối cùng bằng Danh mục kiến thức.
- Sử dụng tính năng kiểm soát quyền truy cập ở cấp cột của BigQuery để hiển thị mã cuối cùng.
Bạn cần có
- Một trình duyệt web như Chrome
- Một dự án trên Google Cloud đã bật tính năng thanh toán
- Quyền truy cập vào Google Cloud Shell
Lớp học lập trình này dành cho những người thực hành dữ liệu ở mọi cấp độ.
Các tài nguyên được tạo trong lớp học lập trình này sẽ có chi phí dưới 5 USD.
Thời lượng ước tính: Bạn sẽ mất khoảng 45 phút để hoàn thành lớp học lập trình này.
2. Trước khi bắt đầu
Tạo một dự án trên Google Cloud
- 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.
- Đảm bảo bạn đã bật tính năng thanh toán cho dự án trên Cloud.
Khởi động Cloud Shell
Bạn sẽ sử dụng Google Cloud Shell để tải mã xuống, chạy tập lệnh thiết lập và triển khai ứng dụng.
- Trong một thẻ trình duyệt mới, hãy mở Cloud Shell:

- Sau khi kết nối, hãy đặt mã dự án và xác nhận môi trường của bạn:
gcloud config set project <<YOUR_PROJECT_ID>>
export PROJECT_ID=$(gcloud config get-value project)
export REGION=us-central1
Bạn sẽ thấy một thông báo tương tự như sau:
Your active configuration is: [cloudshell-####] Updated property [core/project]
Bật các API bắt buộc
Chạy lệnh sau trong Cloud Shell để bật các API bắt buộc:
gcloud services enable \
bigquery.googleapis.com \
aiplatform.googleapis.com \
datacatalog.googleapis.com \
geminidataanalytics.googleapis.com \
cloudaicompanion.googleapis.com
Khi thực thi thành công, bạn sẽ thấy một thông báo tương tự như sau:
Operation "operations/..." finished successfully.
3. Thiết lập môi trường
Trong các phòng thí nghiệm trước đây của loạt bài này, chúng ta đã đặt nền móng cho cuộc điều tra của mình.
1. Sao chép kho lưu trữ
Sao chép kho lưu trữ lớp học lập trình vào môi trường Cloud Shell:
cd ~/
git clone --filter=blob:none --no-checkout https://github.com/GoogleCloudPlatform/devrel-demos.git
cd ~/devrel-demos
git sparse-checkout init --cone
git sparse-checkout set codelabs/bigquery-graph-analytics
git checkout main
cd codelabs/bigquery-graph-analytics/
2. Thiết lập bảng cơ sở và thẻ chính sách
Chạy tập lệnh thiết lập để điền sẵn tập dữ liệu BigQuery và áp dụng thẻ bảo mật cấp cột để hạn chế dữ liệu nhạy cảm:
bash setup_lab.sh
Xác nhận rằng đầu ra trong thiết bị đầu cuối cho thấy quá trình khởi chạy thành công:
🚀 Provisioning foundational tables and deploying Policy Tag security bindings... 🎯 Active Project: your-project-id ... 🎉 Success! Foundational tables initialized and Column-Level Policy Tags fully mapped out of the box!
Sau khi thiết lập thành công môi trường và điền dữ liệu hậu cần vào BigQuery, giờ đây, bạn có thể tạo một Biểu đồ tài sản để kết nối các bảng và theo dõi hành trình của hàng hoá!
4. Kết nối dữ liệu bằng BigQuery Graph
Để phân tích dữ liệu chuỗi cung ứng, chúng ta sẽ xác định mối quan hệ giữa các công ty, tàu và bản kê khai. Việc tạo một đồ thị thuộc tính giúp chúng ta dễ dàng truy vấn các mối kết nối này.
1. Cách mô hình đồ thị thuộc tính thể hiện mối quan hệ

Biểu đồ tài sản BigQuery mô hình hoá các mạng bằng cách sử dụng:
- Nút: Các thực thể trong mạng. Trong phòng thí nghiệm này, các nút đại diện cho Công ty (nơi lưu trữ trực tiếp thông tin liên hệ), Tờ khai và Tàu.
- Cạnh: Mối quan hệ liên kết các nút với nhau. Ví dụ:
- Một cạnh kết nối một Manifest với một Vessel (thông qua các mối quan hệ trong bảng
manifests). - Một cạnh kết nối một Vessel (Tàu) với một Company (Công ty) (thông qua các mối quan hệ trong bảng
vessels).
- Một cạnh kết nối một Manifest với một Vessel (thông qua các mối quan hệ trong bảng
- Thuộc tính: Siêu dữ liệu được lưu trữ trên các nút hoặc cạnh. Ví dụ: nút Company có các cột như
company_namevàphone_number, còn nút Manifest cóseal_integrity_statusvà toạ độ (last_ping_lat,last_ping_long). - Nhãn: Tên thẻ được chỉ định cho các nút (ví dụ:
Company,Vessel,Manifest) và các cạnh (ví dụ:CARRIED_BY,OPERATED_BY) để các công cụ truy vấn có thể nhận dạng các loại nút và mối quan hệ.
2. Triển khai Biểu đồ thuộc tính trong BigQuery
Tệp setup_graph.sql chứa SQL DDL để xác định và tạo biểu đồ tài sản, nhưng hiện chưa hoàn chỉnh. Bạn cần xác định nhãn cạnh (mối quan hệ) trong tệp giản đồ này trước khi biên dịch và triển khai:
- Mở Cloud Shell Editor.

- Mở tệp
setup_graph.sqltrong Trình chỉnh sửa Cloud Shell.

- Xác định vị trí của phần giữ chỗ cho nhãn cạnh:
- Dòng 22: Thay thế
`EDGE_TABLE_PLACEHOLDER`bằng một thẻ có ý nghĩa thể hiện mối quan hệ giữa tệp kê khai và tàu (ví dụ:CARRIED_BY). - Dòng 27: Thay thế
`EDGE_TABLE_PLACEHOLDER`bằng thẻ thể hiện mối quan hệ giữa tàu và công ty (ví dụ:OPERATED_BY).
- Dòng 22: Thay thế
- Lưu tệp.
Bây giờ, hãy quay lại cửa sổ dòng lệnh Cloud Shell và triển khai biểu đồ tài sản đã cập nhật bằng tập lệnh đã hoàn tất:
bq query --use_legacy_sql=false < setup_graph.sql
Bạn sẽ thấy kết quả cho biết công việc đã hoàn tất:
Waiting on bqjob_r... ... (0s) Current status: DONE
Bạn có thể xem thông tin chi tiết về Biểu đồ tài sản trong Bảng điều khiển BigQuery:
Tìm lost_cargo_dataset rồi chọn Graphs (Biểu đồ):

Sau khi biên dịch thành công biểu đồ tài sản, hãy chuyển sang BigQuery Studio để truy vấn và trực quan hoá các mối kết nối!
5. Truy vấn Biểu đồ của bạn
Bạn có thể truy vấn và khám phá đồ thị một cách trực quan bằng cách sử dụng Ngôn ngữ truy vấn đồ thị (GQL) gốc ngay trong BigQuery Studio.
1. Truy vấn chuỗi vùng chứa -> tàu -> công ty
Hãy khám phá các truy vấn GQL bằng cách tìm người vận hành các tàu chở hàng. Để tìm được người vận hành, bạn cần phải đi qua 3 nút thực thể riêng biệt trong mạng lưới hậu cần của chúng tôi:

- Bắt đầu từ nút vùng chứa
Manifest. - Theo dõi cạnh mối quan hệ
CARRIED_BYđể tìmVesselmang theo. - Theo cạnh mối quan hệ
OPERATED_BYtừ tàu đó đếnCompanychịu trách nhiệm và truy xuất mã nhận dạng của tàu.
Trước tiên, hãy chạy một truy vấn để trực quan hoá toàn bộ mạng (không có bộ lọc nào) để xem toàn bộ biểu đồ.
- Mở một thẻ mới trong trình chỉnh sửa SQL của BigQuery Studio, dán truy vấn GQL sau đây rồi nhấp vào Chạy:
SELECT * FROM GRAPH_TABLE( `lost_cargo_dataset.logistics_network` MATCH p = (m:Manifest)-[:CARRIED_BY]->(v:Vessel)-[:OPERATED_BY]->(comp:Company) RETURN TO_JSON(p) AS path ); - Khi truy vấn hoàn tất, trong ngăn Query results (Kết quả truy vấn) ở dưới cùng, hãy nhấp vào thẻ Graph (Biểu đồ) (nằm bên cạnh thẻ Results table (Bảng kết quả)).

- BigQuery hiển thị kết quả dưới dạng biểu đồ trực quan có tính tương tác! Phóng to để xem toàn bộ mạng lưới các thùng chứa, tàu và đơn vị vận hành được kết nối.
Phân tích thành phần của truy vấn GQL
Hãy phân tích truy vấn GQL mà chúng ta vừa chạy:
GRAPH_TABLE: Chỉ thị cho BigQuery thực thi một truy vấn biểu đồ thuộc tính đối với biểu đồlogistics_network.MATCH: Khai báo mẫu truyền tải nhiều chặng. Chúng ta bắt đầu ởManifest(m), so khớp mối quan hệ cạnh:CARRIED_BYtrỏ đếnVessel(v), sau đó so khớp mối quan hệ cạnh:OPERATED_BYtrỏ đếnCompany(comp).- GQL thay thế logic kết hợp phức tạp bằng các mũi tên mối quan hệ trực quan, dễ đọc dưới dạng hình vẽ ASCII
()->[]->(), giúp bạn viết và tối ưu hoá các truy vấn nhiều bước một cách cực kỳ đơn giản. RETURN: Trả về các thuộc tính hoặc đường dẫn JSON từ các phần tử trùng khớp.
2. Lọc kết quả truy vấn GQL
Bây giờ, hãy lọc truy vấn để chỉ xem đường dẫn cho vùng chứa mục tiêu bị xâm nhập MV-CAPYBARA-003.
- Dán truy vấn sau vào trình chỉnh sửa SQL rồi nhấp vào Chạy:
SELECT * FROM GRAPH_TABLE( `lost_cargo_dataset.logistics_network` MATCH p = (m:Manifest {shipment_id: 'MV-CAPYBARA-003'})-[:CARRIED_BY]->(v:Vessel)-[:OPERATED_BY]->(comp:Company) RETURN TO_JSON(p) AS path ); - Nhấp vào thẻ Biểu đồ trong phần kết quả.

- Giờ đây, trình xem chỉ hiển thị tuyến đường di chuyển đang hoạt động cho
MV-CAPYBARA-003. Phóng to để xem các nút và mối kết nối:- Nhấp đúp vào nút
Companyđể mở bảng điều khiển thuộc tính. Trong mục Properties (Thuộc tính), bạn sẽ thấy toán tửcompany_id:103(Davy Jones Shipping). Ghi lại mã nhận dạng công ty này – sau này bạn sẽ cần mã này để truy xuất mật khẩu xoá dữ liệu khỏi sổ đăng ký bảo mật! - Nhấp đúp vào nút
Vesselđể xác minh rằng đó làFlying Dutchman.
- Nhấp đúp vào nút
6. Trò chuyện với biểu đồ bằng tính năng Phân tích đàm thoại
Giờ đây, sau khi bạn truy vấn biểu đồ theo cách thủ công để tìm mã nhận dạng công ty, hãy sử dụng tính năng Phân tích dựa trên cuộc trò chuyện để trò chuyện trực tiếp với biểu đồ của chúng ta và xác định chính xác nơi mà vùng chứa của chúng ta đang hướng đến.
1. Bắt đầu một phiên Phân tích cuộc trò chuyện
- Trong Google Cloud Console, hãy chuyển đến Bảng điều khiển BigQuery rồi mở rộng bảng điều khiển tài nguyên để tìm tập dữ liệu của bạn (
lost_cargo_dataset). - Nhấp vào tài nguyên Biểu đồ tài sản của bạn:
logistics_network. - Trong thanh công cụ của bảng chi tiết ở trên cùng, hãy nhấp vào nút Trò chuyện. Thao tác này sẽ mở một phiên Phân tích đàm thoại được tải sẵn ngữ cảnh của biểu đồ.

2. Xác định chính xác cổng neo đậu gần nhất cho chiếc tàu chở hàng bị cướp
Máy bay tuần tra trên biển vừa phát hiện một tàu phù hợp với nội dung mô tả về tàu chở hàng của chúng ta đang đi ra ngoài phạm vi phủ sóng (với bộ phát đáp đã tắt) tại toạ độ POINT(-122.48 37.55). Để chặn được hàng hoá, chúng ta cần tìm cổng neo đậu gần nhất nơi mà tập đoàn ngầm Davy Jones Shipping hoạt động.
Thay vì tìm kiếm tất cả các cảng trên toàn cầu theo cách thủ công, chúng tôi sẽ truy vấn mạng lưới đồ thị của mình để kéo các cảng được kết nối với đội tàu đang hoạt động của tập đoàn và đo lường cảng nào gần nhất với vị trí nhìn thấy!
- Trong hộp trò chuyện của Conversational Analytics, hãy nhập câu lệnh sau:
Find all ports associated with Davy Jones Shipping vessels. Which port is closest to coordinate POINT(-122.48 37.55), show the distance in km, and display it on a map.

- Xem kỹ câu trả lời. Tác nhân này sẽ duyệt qua biểu đồ và trả về cơ sở neo đậu gần nhất cùng khoảng cách của cơ sở đó:
- Cổng kết nối:
Mountain View Terminal - Khoảng cách:
39.42 kilometers
- Cổng kết nối:
- Vì Conversational Analytics được hỗ trợ bởi Gemini và tích hợp không gian địa lý (GIS) gốc, nên công cụ này có thể diễn giải các điểm toạ độ địa lý và tận dụng kiến thức về thế giới để xác minh vị trí:"Con tàu cách Nhà ga Mountain View, California khoảng 39,42 km, cho thấy tàu đang hướng đến đó để cập bến."
Điều này xác nhận rằng hàng hoá của chúng tôi đang được vận chuyển thẳng đến Mountain View!
Đằng sau hậu trường: Ngôn ngữ truy vấn đồ thị (GQL) và GIS không gian địa lý
Ở chế độ nền, tác nhân Phân tích đàm thoại đã biên dịch và thực thi một cách linh hoạt một truy vấn kết hợp tính năng so khớp đường dẫn trên biểu đồ với tính năng tính toán khoảng cách không gian địa lý. Điều này đạt được bằng cách sử dụng mệnh đề GQL COLUMNS gốc, tính toán khoảng cách trắc địa một cách tự nhiên bên trong kết quả so khớp của quá trình duyệt qua biểu đồ:
SELECT port_id, port_name, country, latitude, longitude, distance_km
FROM GRAPH_TABLE(
`lost_cargo_dataset.logistics_network`
MATCH (c:Company)<-[]-(v:Vessel)-[]->(p:Port)
WHERE LOWER(c.company_name) = 'davy jones shipping'
COLUMNS (
p.port_id,
p.port_name,
p.country,
p.latitude,
p.longitude,
ROUND(ST_DISTANCE(ST_GEOGPOINT(p.longitude, p.latitude), ST_GEOGPOINT(-122.48, 37.55)) / 1000, 2) AS distance_km
)
)
ORDER BY distance_km ASC;
Bằng cách kết hợp các hàm Không gian địa lý (GIS) gốc (ST_DISTANCE, ST_GEOGPOINT) với mẫu biểu đồ thuộc tính GQL, BigQuery sẽ tự động phân giải phạm vi hoạt động của tập đoàn và tính toán khoảng cách thực tế trong thế giới thực chỉ bằng một truy vấn!
7. Tìm dữ liệu bị thiếu bằng Knowledge Catalog
Biểu đồ thuộc tính cho thấy các mối quan hệ, nhưng không chứa bảng lưu trữ mã ghi đè thực tế.
Trong một môi trường doanh nghiệp thực tế với hàng trăm tập dữ liệu và bảng, việc tìm kiếm thông tin này có thể gặp khó khăn. Chúng ta sẽ sử dụng Danh mục kiến thức để thực hiện tìm kiếm ngữ nghĩa và xác định vị trí của bảng chính xác.
1. Tìm kiếm theo ngữ nghĩa trong Knowledge Catalog
- Trong Bảng điều khiển Google Cloud, hãy tìm kiếm và chuyển đến Danh mục kiến thức ➔ Tìm kiếm.
- Trong cột bộ lọc tìm kiếm bên dưới mục Hệ thống, hãy đánh dấu vào BigQuery để thu hẹp kết quả.
- Trong hộp tìm kiếm, hãy nhập cụm từ tìm kiếm sau:
container override codes

- Nhấp vào tài nguyên bảng
maritime_security_registryxuất hiện trong kết quả tìm kiếm:
Sau khi kiểm tra giản đồ siêu dữ liệu, bạn sẽ thấy bảng này chứa các cột cho dữ liệu bảo mật của vùng chứa, chẳng hạn như công ty điều phối co_id, mã thông báo người giám hộ cust_tok và quan trọng nhất là cột mật mã ghi đè vùng chứa bảo mật: clc_ovr_cd.
Chúng tôi đã xác định được cả bảng và cột bảo mật chính xác mà chúng tôi cần để lấy lại hàng hoá!
🔓 Hoạt động quản trị trong thế giới thực: Trong môi trường doanh nghiệp thực tế, các nhóm bảo mật và quản trị cũng tận dụng:
- Khía cạnh và Mẫu thẻ: Để đính kèm siêu dữ liệu doanh nghiệp (chẳng hạn như Chủ sở hữu dữ liệu, Thời gian lưu giữ hoặc Phân loại thông tin nhận dạng cá nhân) vào lược đồ bảng.
- Dòng dữ liệu: Tự động tạo biểu đồ quy trình trực quan thể hiện cách các bảng như
maritime_security_registryđược hệ thống hạ nguồn truy vấn và sử dụng.
2. Kiểm tra tính năng bảo mật cột trong BigQuery
- Chuyển về Bảng điều khiển BigQuery.
- Trong thẻ Trình khám phá, hãy chọn
lost_cargo_datasetrồi nhấp vào bảngmaritime_security_registry. - Nhấp vào thẻ Lược đồ.

- Lưu ý rằng cột
clc_ovr_cdđược bảo mật bằng một thẻ chính sách có tên làMaskShippingDetails(có trong cột Thẻ chính sách). - Mở một thẻ Trình chỉnh sửa SQL mới trong BigQuery và thử xem mã ghi đè sổ đăng ký bằng cách chạy truy vấn sau:
SELECT * FROM `lost_cargo_dataset.maritime_security_registry` WHERE co_id = 103; - Vì tài khoản của bạn chưa có quyền đọc các cột được gắn thẻ bằng
MaskShippingDetails, nên truy vấn sẽ thất bại ngay lập tức với lỗi bảo mật cơ sở dữ liệu Truy cập bị từ chối:

8. Bẻ khoá bảo mật cột để truy xuất mật mã
Để đọc mã ghi đè cuối cùng ở dạng văn bản thuần tuý, chúng ta cần cấp cho tài khoản người dùng quyền đọc các cột được gắn thẻ bằng MaskShippingDetails.
1. Cấp quyền cho thẻ Chính sách
- Trong ngăn điều hướng bên trái của bảng điều khiển BigQuery, hãy chuyển đến Thẻ chính sách.
- Chọn hệ thống phân loại có tên
LostCargoSecurity_. - Trong danh sách thẻ, hãy nhấp vào biểu tượng
MaskShippingDetails. - Trong bảng Thông tin ở bên phải màn hình, hãy nhấp vào Thêm người đại diện. (Nếu bảng điều khiển bị ẩn, hãy nhấp vào Hiện bảng thông tin ở trên cùng bên phải).
- Trong trường New principals (Chủ thể mới), hãy nhập email người dùng Google Cloud đang hoạt động của bạn.
- Trong trình đơn thả xuống Chọn vai trò, hãy tìm và chọn Người đọc chi tiết, rồi nhấp vào Lưu.

2. Truy vấn Mã ghi đè
Quay lại trình chỉnh sửa không gian làm việc BigQuery. Vì giờ đây bạn có quyền truy cập ở mức độ chi tiết cho người đọc, nên chúng ta có thể chạy lại truy vấn và xem được dữ liệu chưa được che giấu:
SELECT * FROM `lost_cargo_dataset.maritime_security_registry`
WHERE co_id = 103;
🔓 Kết quả
Truy vấn trả về mã ghi đè chưa che:
SHIVER-ME-TIMBERS-888

9. Dọn dẹp
Để tránh bị tính phí, hãy dọn dẹp các tài nguyên hộp cát đã tạo trong bài thực hành này.
Quay lại Thiết bị đầu cuối Cloud Shell rồi xoá tập dữ liệu BigQuery chứa các bảng hậu cần:
bq rm -r -f -d lost_cargo_dataset
Xoá các tệp kho lưu trữ được sao chép:
cd ..
rm -rf data-cloud-roadshow-26
10. Xin chúc mừng
Bạn đã giải quyết thành công quy trình điều tra và truy xuất được mã ghi đè thông quan!
Kiến thức bạn học được
- Cách tạo đồ thị thuộc tính trong BigQuery để biểu thị các thực thể và mối quan hệ phức tạp.
- Cách định cấu hình Nút, Cạnh, Thuộc tính và Nhãn để ghi lại các mối kết nối dữ liệu.
- Cách truy vấn biểu đồ tài sản bằng ngôn ngữ tự nhiên thông qua tính năng Phân tích đàm thoại của BigQuery.
- Cách cấu trúc các biểu thức Ngôn ngữ truy vấn đồ thị (GQL) để duyệt qua các đường dẫn quan hệ.
- Cách khám phá các tài sản được bảo mật bằng Danh mục kiến thức và truy cập vào dữ liệu bị hạn chế ở cấp cột bằng thẻ chính sách.