Bắt đầu sử dụng BigQuery Graph Measures

1. Tổng quan

Hầu hết các lỗi SQL tồn tại trong quá trình xem xét mã đều là lỗi tổng hợp. Một số liệu chính xác trong bảng mà số liệu đó nằm trong, một phép kết hợp sẽ sao chép số liệu đó và tổng số liệu sẽ sai một cách âm thầm.

BigQuery Graph cho phép bạn mô tả cách các bảng kết nối một lần dưới dạng biểu đồ thuộc tính, sau đó truy vấn các mối kết nối. Chỉ số biểu đồ bổ sung thêm một điều nữa vào nội dung mô tả đó: chính hoạt động tổng hợp. Bạn khai báo MEASURE(SUM(streams)) trên nút sở hữu số này và mọi truy vấn đọc biểu đồ đều nhận được tổng số chính xác ở mức độ chi tiết phù hợp — không có thủ thuật GROUP BY, không có CTE mà người dùng phải nhớ.

Trong lớp học lập trình này, bạn sẽ tạo một danh mục nhạc gồm 5 bảng, đặt một chỉ số lên đó và xem cùng một câu hỏi trả về hai câu trả lời khác nhau: 12,6 tỷ với SUM, 5,1 tỷ với AGG. Khoảng trống là hình dạng của danh mục — một bài hát nằm trong 4 danh sách phát sẽ trở thành 4 hàng sau khi biểu đồ được làm phẳng và SUM sẽ thêm cả 4 hàng đó. Sau đó, bạn sẽ tìm hiểu các quy tắc giúp câu thứ hai trở nên chính xác.

một hàng Bài hát được sao chép vào 4 hàng vị trí: SUM thêm các bản sao, AGG thu gọn trên song_id

Nơi bạn sẽ nhập nội dung

Phòng thí nghiệm này sử dụng chính xác 2 vị trí, theo thứ tự sau:

trong đó

những việc bạn làm ở đó

1

Cửa sổ dòng lệnh Cloud Shell

một số ít lệnh, chỉ trong bước Thiết lập

2

Bảng điều khiển BigQuery

mọi thao tác khác: dán truy vấn vào trình chỉnh sửa truy vấn, nhấp vào trình mô hình hoá biểu đồ, trò chuyện với một tác nhân

Mỗi chỉ thị đều được gắn thẻ để bạn luôn biết chỉ thị đó có nghĩa là gì:

  • 👉💻 Cloud Shell – nhập lệnh này vào thiết bị đầu cuối Cloud Shell.
  • 👉📋 Trình chỉnh sửa truy vấn – dán truy vấn này vào trình chỉnh sửa truy vấn BigQuery rồi nhấp vào Chạy.
  • 👉🌐 Bảng điều khiển – nhấp vào các phần trong bảng điều khiển BigQuery. Không cần nhập nội dung nào trừ phi bước đó yêu cầu.
  • 👀 – xem kết quả.

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

  • Cách khai báo chỉ số trên bảng nút – trong trình mô hình hoá biểu đồ trực quan hoặc trong SQL
  • Cách GRAPH_EXPAND làm phẳng một biểu đồ thành một bảng rộng
  • Tại sao AGG là hàm duy nhất có thể đọc một chỉ số và mọi nỗ lực khác đều trả về
  • 6 giá trị tổng hợp mà một chỉ số hỗ trợ và cách thực hiện phép tính số học trên các giá trị đó
  • Cách một chỉ số trả lời một câu hỏi được nhóm theo cách khác mà không có thay đổi
  • Không bắt buộc: cách GQL và thẻ Biểu đồ trả lời một câu hỏi mà tổng không thể trả lời, cũng như cách một tác nhân dữ liệu BigQuery sử dụng các chỉ số của bạn mà không cần được thông báo về các chỉ số đó

Bạn cần có

  • Một Tài khoản Google có thông tin thanh toán và một trình duyệt. Bạn không cần có dự án trên Google Cloud ngay từ đầu – Quá trình thiết lập sẽ tạo một dự án cho bạn.
  • Chỉ đối với bước trò chuyện không bắt buộc: Gemini Data Analytics API được bật và bạn có vai trò Gemini Data Analytics Data Agent Creator (Người tạo tác nhân dữ liệu Gemini Data Analytics).

Bạn không cần cài đặt gì trên máy. Mọi thứ đều chạy trong Cloud Shell và bảng điều khiển BigQuery.

Trạng thái và chi phí của sản phẩm

BigQuery Graph hiện đã được phát hành rộng rãi. Các chỉ số biểu đồ, trình mô hình hoá biểu đồ trực quan, hình ảnh trực quan về biểu đồ và việc sử dụng biểu đồ làm nguồn tri thức của tác nhân dữ liệu đều ở trạng thái Xem trước và chịu sự điều chỉnh của Điều khoản về các sản phẩm ở giai đoạn trước khi phát hành rộng rãi.

GRAPH_EXPAND và AGG chạy theo gói tính giá theo nhu cầu. Các truy vấn GQL (bước đường dẫn không bắt buộc) yêu cầu đặt trước bằng phiên bản Enterprise hoặc Enterprise Plus, theo tài liệu – đó là lý do bước này không bắt buộc.

Tập dữ liệu có kích thước vài kilobyte. Theo mức giá theo yêu cầu, mỗi truy vấn được tính phí tối thiểu là 10 MB, vì vậy, toàn bộ lớp học lập trình này chỉ tốn một phần nhỏ của một xu.

2. Thiết lập

Đây là bước duy nhất sử dụng Cloud Shell. Thao tác này sẽ tạo một dự án, đặt thông tin thanh toán cho dự án đó và tạo các bảng thô. Sau đó, bạn có thể chạy biểu đồ, chỉ số và mọi truy vấn trong bảng điều khiển BigQuery.

Có một điều mà phòng thí nghiệm này không thể cung cấp cho bạn: một dự án trên đám mây của Google Cloud có tính năng thanh toán. Bước 1 giúp bạn có được một tài khoản có thể thanh toán cho dự án; bước 4 biến tài khoản đó thành một dự án. Hãy thực hiện theo thứ tự đó – mọi bước sau bước 4 đều đọc dự án mà bước 4 tạo ra.

1 · Tạo tài khoản có thông tin thanh toán (khoảng 1 phút)

👉🌐 Hãy làm việc này trước khi làm bất cứ việc gì khác. Đăng nhập bằng Tài khoản Google đã bật tính năng thanh toán. Bạn có thể dùng bất kỳ tài khoản nào như vậy. Nếu bạn chưa có, hãy bắt đầu dùng thử miễn phí. Việc này sẽ cung cấp cho bạn một tài khoản thanh toán, đây là tất cả những gì cần thiết cho bước 4.

2 · Mở Cloud Shell (khoảng 1 phút)

👉🌐 Cloud Console – nhấp vào Cloud Shell ở đầu Cloud Console – đây là biểu tượng có hình dạng thiết bị đầu cuối trong tiêu đề. Một cửa sổ dòng lệnh sẽ mở ra ở cuối trang.

Kích hoạt Cloud Shell từ tiêu đề Cloud Console trong Google Cloud

👉🌐 Console – nếu bạn được nhắc uỷ quyền vào bất kỳ thời điểm nào trong ngày hôm nay, hãy nhấp vào Uỷ quyền để tiếp tục.

👉💻 Cloud Shell – kiểm tra tài khoản mà Cloud Shell đã đăng nhập:

gcloud auth list

👀 Tìm tài khoản của bạn được đánh dấu bằng biểu tượng *. Tài khoản này phải giống với tài khoản bạn đã đăng nhập ở bước 1. Nếu không, hãy chạy gcloud auth login và chọn một trong các lựa chọn phù hợp.

3. Nhận phòng thí nghiệm (khoảng 1 phút)

👉💻 Cloud Shell – sao chép kho lưu trữ:

cd ~
rm -rf ~/bq-graph-measures-lab
git clone https://github.com/cuppibla/bq-graph-measures-lab.git
cd ~/bq-graph-measures-lab

4. Tạo dự án (khoảng 2 phút)

👉💻 Cloud Shell – một tập lệnh tìm tài khoản thanh toán của bạn, tạo một dự án trên tài khoản đó và trỏ Cloud Shell đến dự án đó:

cd ~/bq-graph-measures-lab
./setup_project.sh

👀 Dự kiến sẽ có một ✓ cho tài khoản thanh toán mà bạn đã chọn, một ✓ cho dự án mà bạn đã tạo và kết thúc như sau:

Project ready: bq-graph-4271
  Next:  ./setup.sh

bq-graph-4271 là mã dự án của bạn – mã dự án của bạn sẽ có các chữ số khác. Có 4 điều xảy ra trong đó:

billing

sử dụng tài khoản [YYYY-MM-DD] GDP Credit: mới nhất (nếu bạn có) và mọi tài khoản thanh toán đang mở khác

project

tạo bq-graph-XXXX và liên kết tài khoản thanh toán đó với

chọn

ghi mã nhận dạng vào ~/project_id.txt và chạy gcloud config set project, vì vậy, không có gì sau bước này yêu cầu bạn nhập mã nhận dạng

waits

cho đến khi dự án mới được phép phân phát, trong tối đa 2 phút

🌐 Dự án đó hiện có trong bảng điều khiển – mã nhận dạng của dự án nằm trong thẻ Thông tin dự án trên Trang tổng quan:

Mã dự án của bạn trên trang tổng quan của bảng điều khiển

5 · Tạo tập dữ liệu (~3 phút)

👉💻 Cloud Shell – một tập lệnh khác sẽ tạo các bảng:

cd ~/bq-graph-measures-lab
./setup.sh

Tập lệnh sẽ in từng bước khi chạy. Những việc mà công cụ này thực hiện theo thứ tự:

project

đọc dự án từ gcloud config và từ chối tiếp tục nếu không có dự án

API

cho phép bigquery.googleapis.com

tập dữ liệu

tạo tập dữ liệu music ở nhiều khu vực tại Hoa Kỳ và 5 bảng, mỗi bảng có một PRIMARY KEY ... NOT ENFORCED

check

đếm số hàng trong mọi bảng và dừng nếu có số lượng không khớp

👀 Dự kiến:

BigQuery Graph Measures · setup
  ✓ project: bq-graph-4271
  ✓ BigQuery API enabled

Creating dataset music (US) and five tables...
  ✓ music.Labels              2 rows
  ✓ music.Artists             3 rows
  ✓ music.Songs               5 rows
  ✓ music.Playlists           4 rows
  ✓ music.PlaylistEntries    10 rows

🎉 ready — open BigQuery Studio: https://console.cloud.google.com/bigquery?project=bq-graph-4271

Bạn đã hoàn tất việc sử dụng Cloud Shell. Bạn có thể đóng cửa sổ này.

6 · Mở BigQuery và trình chỉnh sửa truy vấn

👉🌐 Bảng điều khiển – nhấp vào đường liên kết ở cuối đầu ra hoặc mở BigQuery trong trình đơn điều hướng. Trong ngăn Explorer (Trình khám phá) ở bên trái, hãy mở rộng dự án của bạn: một tập dữ liệu music có 5 bảng.

Ngăn nội dung, nhạc mở rộng: Nghệ sĩ, Hãng thu âm, PlaylistEntries, Danh sách phát, Bài hát

👉🌐 Bảng điều khiển – ở đầu BigQuery Studio, trong hàng Tạo mới, hãy nhấp vào Truy vấn SQL. Một thẻ trình chỉnh sửa trống sẽ mở ra.

Tạo hàng mới bằng truy vấn SQL và thẻ trình chỉnh sửa trống bên dưới

Giữ lại thẻ này. Mọi khối 👉📋 trong bài thực hành này đều nằm ở đây: chọn nội dung bất kỳ trong trình chỉnh sửa, dán khối mới lên trên nội dung đó, nhấp vào Chạy. Kết quả sẽ xuất hiện trong bảng điều khiển bên dưới.

Giới thiệu về các bảng

Sau này, có hai điều quan trọng về các bảng này. Mọi bảng đều khai báo khoá chính là NOT ENFORCED: BigQuery không kiểm tra khoá này, nhưng biểu đồ thuộc tính mà bạn sắp tạo cần một khoá rõ ràng để biết giá trị nào nhận dạng một hàng. Và bảng cuối cùng, PlaylistEntries, là một bảng kết hợp: một bài hát nằm trong 4 danh sách phát sẽ có 4 hàng trong bảng này. Bảng đó là nơi diễn ra toàn bộ câu chuyện.

Các bảng này liên kết với nhau như sau: hãng thu âm ký hợp đồng với nghệ sĩ, nghệ sĩ phát hành bài hát, bài hát được đưa vào danh sách phát thông qua PlaylistEntries. Cymbal Records sở hữu Ava Sterling và Mina Okafor, cũng như 4 bài hát của họ. Northwind Audio sở hữu Kai Nakamura và một bài hát, Midnight Drive.

bàn

hàng

phím

nội dung

Nhãn

2

label_id

tên, ngân sách tiếp thị

Nghệ sĩ

3

artist_id

tên, nhãn nào

Bài hát

5

song_id

tên, nghệ sĩ, luồng

Danh sách phát

4

playlist_id

tên, người theo dõi

PlaylistEntries

10

entry_id

bài hát nào nằm trong danh sách phát nào

✅ Điểm kiểm tra: 🎉 ready trong Cloud Shell, 5 bảng trong music trong Trình khám phá và một thẻ trình chỉnh sửa truy vấn trống đang mở.

3. Tạo biểu đồ – Lựa chọn A: trình mô hình hoá trực quan

Biểu đồ thuộc tính là nội dung mô tả cách các bảng kết nối với nhau. Bạn có thể nhấp vào đó trong trình mô hình hoá biểu đồ trực quan (bước này, tất cả đều nhấp) hoặc viết dưới dạng SQL (bước tiếp theo, một lần dán). Cả hai đều tạo ra cùng một đối tượng – hãy chọn một trong hai, không được chọn cả hai.

1. Tạo shell biểu đồ

👉🌐 Bảng điều khiển – trong BigQuery Studio, trong hàng Tạo mới, hãy mở trình đơn AI và kiến thức rồi nhấp vào Biểu đồ.

👉🌐 Bảng điều khiển – nhập MusicGraph làm Tên biểu đồ và music làm Đích đến của biểu đồ trong tập dữ liệu. Khu vực này được điền sẵn từ tập dữ liệu (Hoa Kỳ).

👉🌐 Console (Bảng điều khiển) – trong phần Data sources (Nguồn dữ liệu), hãy chọn 5 bảng: Artists (Nghệ sĩ), Labels (Hãng thu âm), PlaylistEntries (Mục trong danh sách phát), Playlists (Danh sách phát), Songs (Bài hát) rồi nhấp vào Create (Tạo).

modeler create page: Graph name MusicGraph, dataset music, five tables ticked

👀 Canvas mở ra với 5 nút có màu và không có đường kẻ giữa các nút. Bảng Chi tiết ở bên phải liệt kê Nút (5) và Cạnh (0). Mỗi nút đã mang khoá chính của bảng và tất cả các cột của bảng đó dưới dạng thuộc tính – hãy nhấp vào nút bất kỳ để xem các thuộc tính đó.

canvas có 5 nút, bảng điều khiển Chi tiết cho thấy Nút (5) / Cạnh (0)

2. Vẽ 4 cạnh

Cạnh là một khoá ngoại, được vẽ. Mỗi khoá sẽ đi từ bảng chứa khoá đến bảng mà khoá đó trỏ đến.

👉🌐 Console (Bảng điều khiển) – nhấp vào New edge (Đỉnh mới). Trong hộp thoại Chọn bảng, hãy chọn PlaylistEntries rồi nhấp vào Thêm. Trong bảng điều khiển Thêm cạnh:

  1. Đặt Name (Tên) thành EntryToSong.
  2. Nhấp vào Thêm khoá chính rồi chấp nhận entry_id.
  3. Trong phần Nguồn, hãy đặt Nút nguồn thành PlaylistEntries, sau đó dùng Thêm cột được tham chiếu vào nút và Thêm cột được tham chiếu vào cạnh để chọn entry_id cho cả hai.
  4. Trong mục Target (Mục tiêu), hãy đặt Target node (Nút mục tiêu) thành Songs (Bài hát), sau đó chọn song_id cho cả Referenced columns in the node (Cột được tham chiếu trong nút) và Referenced columns on the edge (Cột được tham chiếu trên cạnh).
  5. Nhấp vào Xong.

đã điền Add edge panel cho EntryToSong

👉🌐 Console – lặp lại thêm 3 lần:

tên cạnh

bàn

nút nguồn → nút đích

cột để chọn ở cả hai bên

EntryToPlaylist

PlaylistEntries

PlaylistEntries → Playlists

nguồn entry_id, đích playlist_id

SongToArtist

Bài hát

Bài hát → Nghệ sĩ

nguồn song_id, đích artist_id

ArtistToLabel

Nghệ sĩ

Nghệ sĩ → Hãng thu âm

nguồn artist_id, đích label_id

Để mọi cạnh không có thuộc tính bổ sung.

👀 Bảng Details (Chi tiết) hiện có nội dung Edges (4) (Cạnh (4)) và canvas cho thấy chuỗi: Labels (Nhãn) ← Artists (Nghệ sĩ) ← Songs (Bài hát) ← PlaylistEntries (Mục trong danh sách phát) → Playlists (Danh sách phát).

canvas có 5 nút và 4 cạnh, Chi tiết cho thấy Cạnh (4)

3. Thêm chỉ số

👉🌐 Console – nhấp vào nút Bài hát, sau đó nhấp vào biểu tượng chỉnh sửa (bút chì) ở đầu bảng điều khiển Chi tiết. Trong mục Thuộc tính của nhãn, hãy nhấp vào Thêm thuộc tính, rồi nhấp vào Thêm trường.

👉🌐 Bảng điều khiển – nhập total_streams làm Tên trường và nhập nội dung này vào hộp Biểu thức:

MEASURE(SUM(streams))

👉🌐 Bảng điều khiển – nhấp vào Thêm, rồi nhấp vào Xong.

thẻ Tài sản mới: Tên trường total_streams, Biểu thức MEASURE(SUM(streams))

4. Đọc mã mà AI đã viết, sau đó xuất bản

👉🌐 Bảng điều khiển – mở thẻ Mã trong bảng điều khiển bên phải. Người mô hình hoá đã viết câu lệnh CREATE PROPERTY GRAPH cho bạn. Di chuyển đến nút Songs (Bài hát): danh sách thuộc tính của nút này hiện kết thúc bằng

MEASURE(SUM(streams)) AS `total_streams`

Đó là toàn bộ tính năng, chỉ trong một dòng. Mọi thứ sau bước này đều liên quan đến chức năng của dòng đó.

thẻ Mã, di chuyển đến nút Bài hát, MEASURE(SUM(streams)) AS total_streams có thể nhìn thấy

👉🌐 Console – nhấp vào Phát hành.

✅ Điểm dừng: trong Trình khám phá, music hiện có một thư mục Graphs (Biểu đồ) chứa MusicGraph. Nhấp vào đó: 5 nút, 4 cạnh và đường MEASURE(SUM(streams)) trong thẻ Mã. Bỏ qua bước tiếp theo và chuyển đến phần Hàm SUM và AGG, song song.

4. Tạo biểu đồ – Lựa chọn B: SQL

Bỏ qua bước này nếu bạn đã tạo biểu đồ trong trình mô hình hoá.

👉📋 Trình chỉnh sửa truy vấn – dán, rồi nhấp vào Chạy:

CREATE OR REPLACE PROPERTY GRAPH music.MusicGraph
  NODE TABLES (
    music.Labels KEY (label_id)
      PROPERTIES (label_id, label_name, marketing_budget,
        MEASURE(SUM(marketing_budget)) AS total_budget),
    music.Artists KEY (artist_id)
      PROPERTIES (artist_id, artist_name, label_id,
        MEASURE(COUNT(artist_id)) AS artist_count),
    music.Songs KEY (song_id)
      PROPERTIES (song_id, title, artist_id, streams,
        MEASURE(SUM(streams))   AS total_streams,
        MEASURE(COUNT(song_id)) AS song_count),
    music.Playlists KEY (playlist_id)
      PROPERTIES (playlist_id, playlist_name, followers,
        MEASURE(SUM(followers)) AS total_followers),
    music.PlaylistEntries KEY (entry_id)
      PROPERTIES (entry_id, playlist_id, song_id,
        MEASURE(COUNT(entry_id)) AS placement_count)
  )
  EDGE TABLES (
    music.PlaylistEntries AS EntryToSong
      SOURCE KEY (entry_id) REFERENCES PlaylistEntries(entry_id)
      DESTINATION KEY (song_id) REFERENCES Songs(song_id) NO PROPERTIES,
    music.PlaylistEntries AS EntryToPlaylist
      SOURCE KEY (entry_id) REFERENCES PlaylistEntries(entry_id)
      DESTINATION KEY (playlist_id) REFERENCES Playlists(playlist_id) NO PROPERTIES,
    music.Songs AS SongToArtist
      SOURCE KEY (song_id) REFERENCES Songs(song_id)
      DESTINATION KEY (artist_id) REFERENCES Artists(artist_id) NO PROPERTIES,
    music.Artists AS ArtistToLabel
      SOURCE KEY (artist_id) REFERENCES Artists(artist_id)
      DESTINATION KEY (label_id) REFERENCES Labels(label_id) NO PROPERTIES
  )

👀 Bảng kết quả cho biết biểu đồ tài sản đã được tạo.

câu lệnh CREATE PROPERTY GRAPH trong trình chỉnh sửa và thông báo thành công bên dưới

Đọc một lần

Biểu đồ có 5 bảng nút và 4 bảng cạnh. Mỗi bảng nút đặt tên cho KEY và liệt kê PROPERTIES. Các dòng bắt đầu bằng MEASURE là phần mới: mỗi dòng bao bọc một trong các hàm tổng hợp được hỗ trợ xung quanh một thuộc tính và đặt cho thuộc tính đó một biệt hiệu (bắt buộc).

Mỗi bảng cạnh là một khoá ngoại, được viết rõ ràng: SOURCE KEY trên bảng chứa khoá, DESTINATION KEY trên bảng mà khoá đó trỏ đến. NO PROPERTIES có nghĩa là cạnh không mang theo thông tin nào.

Lưu ý rằng PlaylistEntries xuất hiện 3 lần: một lần dưới dạng bảng nút và 2 lần nữa dưới dạng bảng vật lý đằng sau các cạnh EntryToSong và EntryToPlaylist. Đó là điều có chủ ý và chúng tôi sẽ giải thích lý do sau.

Xem những nội dung bạn đã tạo

👉🌐 Bảng điều khiển – trong ngăn Trình khám phá, hãy mở rộng music, sau đó mở rộng Đồ thị rồi nhấp vào MusicGraph. Trang biểu đồ sẽ mở ra trên một canvas có 5 nút và 4 cạnh. Nhấp vào một nút để xem các thuộc tính của nút đó – các chỉ số được liệt kê cùng với giá trị tổng hợp của chúng. Mở thẻ Code (Mã) để xem câu lệnh đằng sau hình ảnh.

trang MusicGraph: canvas ở bên trái, thẻ Code (Mã) ở bên phải

✅ Điểm kiểm tra: music có một thư mục Graphs (Biểu đồ) chứa MusicGraph và thẻ Code (Mã) cho thấy MEASURE(SUM(streams)) AS total_streams.

5. Hàm SUM và AGG cạnh nhau

Đây là toàn bộ nội dung của lớp học lập trình trong một cụm từ tìm kiếm. Cả hai cột đều cố gắng trả lời cùng một câu hỏi (tổng số lượt phát trên mỗi nhãn) trong cùng một bảng.

Bảng đó là bảng mà GRAPH_EXPAND tạo ra. Thao tác này sẽ làm phẳng biểu đồ: thao tác này bắt đầu từ một bảng và theo dõi từng cạnh ra ngoài dưới dạng LEFT JOIN, cho đến khi mọi bảng được kết nối nằm cạnh nhau trong một kết quả rộng duy nhất. Một hàng cho mỗi vị trí đặt quảng cáo, chứ không phải một hàng cho mỗi bài hát và mọi cột đều có tên là TableLabel_property. Hãy xem xét trước khi bạn truy vấn.

👉📋 Trình chỉnh sửa truy vấn – dán, rồi nhấp vào Chạy:

SELECT Labels_label_name, Songs_title, Songs_streams, Playlists_playlist_name
FROM GRAPH_EXPAND("music.MusicGraph")
ORDER BY Songs_title, Playlists_playlist_name

👀 Dự kiến 10 hàng – một hàng cho mỗi vị trí trong PlaylistEntries, đây chính xác là những gì Setup đã tải. Neon Summer chiếm 4 vị trí, mỗi vị trí cho một danh sách phát mà bài hát này xuất hiện, và Songs_streams có 2.000.000.000 lượt phát trong mỗi danh sách phát. Không có vấn đề gì với những hàng đó; thực tế là có 4 danh sách phát. Nhưng một cột thuộc về một bài hát hiện được lặp lại trên các hàng thuộc về vị trí đặt quảng cáo và đó là toàn bộ vấn đề mà truy vấn tiếp theo đo lường.

Bây giờ là phần so sánh.

👉📋 Trình chỉnh sửa truy vấn – dán, rồi nhấp vào Chạy:

SELECT
  Labels_label_name,
  SUM(Songs_streams)       AS with_sum,
  AGG(Songs_total_streams) AS with_agg
FROM GRAPH_EXPAND("music.MusicGraph")
GROUP BY 1 ORDER BY 1

👀 Kết quả:

Labels_label_name

with_sum

with_agg

Cymbal Records

12.600.000.000

5.100.000.000

Northwind Audio

9.000.000.000

4.500.000.000

lưới kết quả: with_sum 12.600.000.000 và with_agg 5.100.000.000 cho Cymbal Records

Kiểm tra theo cách thủ công. Bốn bài hát của Cymbal có lượt phát trực tuyến là 2 tỷ, 1,5 tỷ, 1,2 tỷ và 0,4 tỷ. Tức là 5,1 tỷ. AGG là đáp án đúng. SUM lớn gấp 2, 5 lần và số lượng bài hát của Northwind tăng gấp đôi.

Ba phần cú pháp mới

  • GRAPH_EXPAND("music.MusicGraph") là một hàm có giá trị bảng, biến biểu đồ thành một bảng rộng bằng cách theo dõi từng cạnh dưới dạng LEFT JOIN. Mỗi cột đều có tên là TableLabel_property, vì vậy Songs_streams là cột thô trong bảng Songs (Bài hát) và Songs_total_streams là chỉ số mà bạn đã khai báo.
  • SUM(Songs_streams) là SQL thông thường trên bảng rộng đó và nó kế thừa mọi bản sao mà quá trình làm phẳng tạo ra.
  • AGG(Songs_total_streams) đánh giá chỉ số theo cách mà chỉ số đó được khai báo: SUM(streams) một lần cho mỗi song_id, bất kể một bài hát chiếm bao nhiêu hàng trong bảng rộng.

✅ Điểm kiểm tra: hai nhãn, hai cột và số with_agg khớp với số lượng đếm bằng tay.

6. Tại sao hàm SUM lại tính dư

Chọn một bài hát và xem những phần kết hợp đó ảnh hưởng đến bài hát như thế nào.

👉📋 Trình chỉnh sửa truy vấn – dán, rồi nhấp vào Chạy:

SELECT 'BEFORE - the Songs table' AS step, title, streams, CAST(NULL AS STRING) AS playlist
FROM music.Songs WHERE title = 'Neon Summer'
UNION ALL
SELECT 'AFTER - joined to playlists', s.title, s.streams, pl.playlist_name
FROM music.Songs s
LEFT JOIN music.PlaylistEntries e ON e.song_id = s.song_id
LEFT JOIN music.Playlists pl ON pl.playlist_id = e.playlist_id
WHERE s.title = 'Neon Summer'
ORDER BY step DESC, playlist

👀 Kết quả:

bị xì hơi

tiêu đề

lượt phát

danh sách phát

TRƯỚC – bảng Bài hát

Neon Summer

2.000.000.000

rỗng

SAU KHI – được thêm vào danh sách phát

Neon Summer

2.000.000.000

Gym Pump

SAU KHI – được thêm vào danh sách phát

Neon Summer

2.000.000.000

Hot Right Now

SAU KHI – được thêm vào danh sách phát

Neon Summer

2.000.000.000

Nhạc Pop đang lên

SAU KHI – được thêm vào danh sách phát

Neon Summer

2.000.000.000

Nhạc nghe khi đi đường

lưới kết quả: một hàng TRƯỚC và bốn hàng SAU, tất cả đều là 2.000.000.000

Một hàng trở thành bốn hàng. Số lượng luồng không thay đổi mà được sao chép. Cộng tổng số lượt xem của các bản sao cho Cymbal Records: Neon Summer có 2 tỷ lượt xem trên 4 danh sách phát là 8 tỷ, Paper Crown có 1,5 tỷ lượt xem trên 2 danh sách phát là 3 tỷ, Double Shot có 1,2 tỷ lượt xem trên 1 danh sách phát, Slow Arrow có 0,4 tỷ lượt xem trên 1 danh sách phát. Đó là 12,6 tỷ, số SUM được trả về. Bài hát Northwind's Midnight Drive nằm trong 2 danh sách phát, nên 4,5 tỷ lượt phát đã tăng lên 9 tỷ.

Đây là fan-out và không phải là lỗi trong thao tác kết hợp. Các hàng danh sách phát là có thật. Lỗi này xảy ra khi bạn cộng một số thuộc về một bài hát trên các hàng thuộc về vị trí đặt quảng cáo.

Chỉ số này khắc phục vấn đề vì được khai báo trên nút Songs cùng với KEY (song_id). Yếu tố then chốt là độ hạt. Khi AGG đánh giá total_streams, hàm này sẽ tổng hợp một lần cho mỗi khoá bài hát và chỉ sau đó mới tổng hợp thành bất kỳ nhóm nào bạn đã tạo.

Những nội dung thay đổi

Bạn từng viết

Có chỉ số

SUM(streams) trong mọi truy vấn cần đến

MEASURE(SUM(streams)) một lần trong biểu đồ

SUM(...) để đọc

AGG(...) để đọc thư đó và chỉ AGG

3 JOIN

GRAPH_EXPAND(), một bảng phẳng

Một CTE tổng hợp trước khi kết hợp

Miễn phí. KEY quyết định độ hạt

✅ Điểm dừng: 5 hàng – 1 HÀNG TRƯỚC, 4 HÀNG SAU – và bạn có thể tạo lại 12,6 tỷ từ 5 hàng này.

7. Quy tắc: chỉ AGG đọc một chỉ số

Các chỉ số có loại riêng là MEASURE và chỉ có một hàm chấp nhận loại này. Bốn truy vấn bên dưới cố tình không thành công – hãy chạy từng truy vấn và đọc lỗi màu đỏ. Đây là 4 cách mà mọi người thường thử đầu tiên và việc biết được những gì họ nói sẽ giúp bạn tiết kiệm thời gian sau này.

👉📋 Trình chỉnh sửa truy vấn – AGG trên một cột đơn giản:

SELECT AGG(Songs_streams) FROM GRAPH_EXPAND("music.MusicGraph")

👀 No matching signature for aggregate function AGG ... Argument 1: expected MEASURE, found INT64

lỗi màu đỏ bên dưới trình chỉnh sửa

👉📋 Trình chỉnh sửa truy vấn – cột chỉ số không có AGG:

SELECT Songs_total_streams FROM GRAPH_EXPAND("music.MusicGraph") LIMIT 1

👀 Returning expressions of type MEASURE is not allowed

lỗi màu đỏ bên dưới trình chỉnh sửa

👉📋 Trình chỉnh sửa truy vấn – một chỉ số được tham chiếu trong GQL, không bao giờ thấy các chỉ số (đây là một truy vấn GQL – xem ghi chú chỉnh sửa trong phần tổng quan):

GRAPH music.MusicGraph
MATCH (s:Songs)
RETURN s.total_streams
LIMIT 1

👀 total_streams is not exposed by element type GRAPH_NODE(...)

lỗi màu đỏ bên dưới trình chỉnh sửa

👉📋 Trình chỉnh sửa truy vấn – SUM trên một cột chỉ số, cột hấp dẫn:

SELECT Labels_label_name, SUM(Songs_total_streams)
FROM GRAPH_EXPAND("music.MusicGraph")
GROUP BY 1

👀 MEASURE-typed arguments are only permitted in the AGG function

lỗi màu đỏ bên dưới trình chỉnh sửa

Vì vậy, hệ thống kiểu sẽ thực thi quy tắc cho bạn. Bạn chỉ có thể xem chỉ số thông qua GRAPH_EXPAND và chỉ có thể đọc thông qua AGG. Con số 12,6 tỷ bị tính thừa trước đó chỉ có thể đến từ việc cộng cột thô chứ không phải do xử lý sai chỉ số.

✅ Điểm dừng: 4 lỗi màu đỏ và bạn có thể cho biết từng lỗi đang thực thi quy tắc nào.

8. Mọi giá trị tổng hợp mà chỉ số hỗ trợ

MEASURE() bao bọc một trong 6 giá trị tổng hợp: SUM, AVG, MIN, MAX, COUNT và COUNT(DISTINCT). Tạo lại biểu đồ với cả 6 bài hát trên nút Bài hát. Các cạnh vẫn giữ nguyên NO PROPERTIES. Đây là phương pháp hay nhất đã được ghi lại khi một cạnh dùng chung bảng vật lý với một nút.

👉📋 Trình chỉnh sửa truy vấn – dán, rồi nhấp vào Chạy:

CREATE OR REPLACE PROPERTY GRAPH music.MusicGraph
  NODE TABLES (
    music.Labels KEY (label_id)
      PROPERTIES (label_id, label_name, marketing_budget,
        MEASURE(SUM(marketing_budget)) AS total_budget),
    music.Artists KEY (artist_id)
      PROPERTIES (artist_id, artist_name, label_id,
        MEASURE(COUNT(artist_id)) AS artist_count),
    music.Songs KEY (song_id)
      PROPERTIES (song_id, title, artist_id, streams,
        MEASURE(SUM(streams))              AS total_streams,
        MEASURE(AVG(streams))              AS avg_streams,
        MEASURE(MIN(streams))              AS min_streams,
        MEASURE(MAX(streams))              AS max_streams,
        MEASURE(COUNT(song_id))            AS song_count,
        MEASURE(COUNT(DISTINCT artist_id)) AS distinct_artists),
    music.Playlists KEY (playlist_id)
      PROPERTIES (playlist_id, playlist_name, followers,
        MEASURE(SUM(followers)) AS total_followers),
    music.PlaylistEntries KEY (entry_id)
      PROPERTIES (entry_id, playlist_id, song_id,
        MEASURE(COUNT(entry_id)) AS placement_count)
  )
  EDGE TABLES (
    music.PlaylistEntries AS EntryToSong
      SOURCE KEY (entry_id) REFERENCES PlaylistEntries(entry_id)
      DESTINATION KEY (song_id) REFERENCES Songs(song_id) NO PROPERTIES,
    music.PlaylistEntries AS EntryToPlaylist
      SOURCE KEY (entry_id) REFERENCES PlaylistEntries(entry_id)
      DESTINATION KEY (playlist_id) REFERENCES Playlists(playlist_id) NO PROPERTIES,
    music.Songs AS SongToArtist
      SOURCE KEY (song_id) REFERENCES Songs(song_id)
      DESTINATION KEY (artist_id) REFERENCES Artists(artist_id) NO PROPERTIES,
    music.Artists AS ArtistToLabel
      SOURCE KEY (artist_id) REFERENCES Artists(artist_id)
      DESTINATION KEY (label_id) REFERENCES Labels(label_id) NO PROPERTIES
  )

lệnh CREATE PROPERTY GRAPH gồm 6 bước và thông báo thành công của lệnh này

Bây giờ, hãy đọc lại tất cả. Mọi chỉ số đều trải qua AGG và cột cuối cùng cho thấy AGG kết quả là các giá trị thông thường mà bạn có thể thực hiện phép tính số học. Biểu đồ vừa thay đổi, vì vậy, trước tiên hãy xoá Sử dụng kết quả được lưu vào bộ nhớ đệm (Tuỳ chọn khác → Cài đặt truy vấn).

👉📋 Trình chỉnh sửa truy vấn – dán, rồi nhấp vào Chạy:

SELECT
  Labels_label_name,
  AGG(Songs_total_streams)    AS total_streams,
  AGG(Songs_avg_streams)      AS avg_streams,
  AGG(Songs_min_streams)      AS min_streams,
  AGG(Songs_max_streams)      AS max_streams,
  AGG(Songs_song_count)       AS songs,
  AGG(Songs_distinct_artists) AS artists,
  AGG(Songs_total_streams) / AGG(Songs_song_count) AS streams_per_song
FROM GRAPH_EXPAND("music.MusicGraph")
GROUP BY 1
ORDER BY 1

👀 Kết quả:

Labels_label_name

total_streams

avg_streams

min_streams

max_streams

bài hát

nghệ sĩ

streams_per_song

Cymbal Records

5.100.000.000

1.275.000.000

400.000.000

2.000.000.000

4

2

1.275.000.000

Northwind Audio

4.500.000.000

4.500.000.000

4.500.000.000

4.500.000.000

1

1

4.500.000.000

lưới kết quả gồm 7 cột, cả hai nhãn

Mỗi con số được tính toán dựa trên 4 bài hát cho Cymbal và 1 bài hát cho Northwind, chứ không phải dựa trên 10 hàng vị trí đặt quảng cáo. Cụ thể, AVG sẽ sai nếu tính theo cách khác: tính trung bình cột thô trên các hàng vị trí sẽ cho ra 1,575 tỷ cho Cymbal, vì 2 tỷ của Neon Summer được tính 4 lần.

Vì vậy, "thay thế SUM bằng AGG" thực sự là hai quyết định. Khi khai báo chỉ số, bạn vẫn chọn một trong 6 giá trị tổng hợp. Khi đọc chỉ số, hàm luôn là AGG.

✅ Điểm kiểm tra: mỗi nhãn một hàng, mỗi hàng 7 số và streams_per_song bằng avg_streams.

9. Thay đổi cách nhóm, chứ không phải chỉ số

Cùng một chỉ số nhưng trả lời một câu hỏi khác. Nhóm theo danh sách phát thay vì nhãn.

👉📋 Trình chỉnh sửa truy vấn – dán, rồi nhấp vào Chạy:

SELECT
  Playlists_playlist_name,
  AGG(Songs_total_streams) AS streams,
  AGG(Songs_song_count)    AS songs
FROM GRAPH_EXPAND("music.MusicGraph")
GROUP BY 1
ORDER BY 2 DESC

👀 Kết quả:

Playlists_playlist_name

lượt phát

bài hát

Nhạc nghe khi đi đường

6.900.000.000

3

Gym Pump

6.500.000.000

2

Hot Right Now

4.700.000.000

3

Nhạc Pop đang lên

3.500.000.000

2

lưới kết quả, Chuyến đi đường bộ 6.900.000.000 ở trên cùng

Hai dòng AGG là các dòng từ SUM và AGG, cạnh nhau. Chỉ có GROUP BY được di chuyển. Road Trip có các bài hát Neon Summer, Midnight Drive và Slow Arrow, mỗi bài hát được tính một lần trong danh sách phát đó. Đây chính xác là ý nghĩa của "lượt phát đạt đến danh sách phát này".

Người viết chỉ số đã quyết định độ chi tiết một lần. Mọi truy vấn sau đó của bất kỳ ai đều sẽ kế thừa truy vấn này.

✅ Điểm dừng chân: Road Trip đứng đầu với 6,9 tỷ lượt xem.

10. Xem những gì GRAPH_EXPAND mang lại cho bạn

Bạn không cần chạy GRAPH_EXPAND để tìm hiểu hình dạng của nó. Quy trình hệ thống BQ.SHOW_GRAPH_EXPAND_SCHEMA ghi danh sách cột vào một biến.

👉📋 Trình chỉnh sửa truy vấn – dán cả 3 dòng rồi nhấp vào Run (Chạy):

DECLARE schema STRING DEFAULT '';
CALL BQ.SHOW_GRAPH_EXPAND_SCHEMA('music.MusicGraph', schema);
SELECT schema;

👀 Kết quả là một chuỗi JSON. Mỗi trường có một tên, một loại và một chế độ, đồng thời mọi cột chỉ số đều có "is_measure": true. Đối với biểu đồ bạn vừa tạo, bạn sẽ nhận được những thông tin sau, cùng với nhiều thông tin khác:

tên

loại

is_measure

Songs_title

STRING

Songs_streams

INTEGER

Songs_total_streams

INTEGER

true

Songs_avg_streams

FLOAT

true

Songs_distinct_artists

INTEGER

true

PlaylistEntries_placement_count

INTEGER

true

ô JSON duy nhất, được mở rộng đủ để hiển thị giá trị true is_measure

Mọi nội dung mô tả hoặc từ đồng nghĩa mà bạn đặt cho một tài sản cũng sẽ xuất hiện ở đây. Bước trò chuyện không bắt buộc cho biết ai đọc những tin nhắn đó.

✅ Điểm kiểm tra: một chuỗi JSON có is_measure trên mọi cột mà bạn đã khai báo bằng MEASURE.

11. GRAPH_EXPAND cần gì từ hình dạng của biểu đồ

Bạn không cần chạy bất kỳ nội dung nào trong bước này, chỉ cần đọc. GRAPH_EXPAND tạo bảng rộng bằng một chuỗi LEFT JOIN, bắt đầu từ một bảng và theo các cạnh ra ngoài. Từ đó, có 3 quy tắc và MusicGraph đáp ứng tất cả các quy tắc này.

hình dạng GRAPH_EXPAND cần: PlaylistEntries làm gốc duy nhất, 4 cạnh nhiều-đến-một ra ngoài và cặp Songs–Playlists nhiều-đến-nhiều được chuyển thành một nút

Chỉ có một bảng nút gốc. Nút gốc là bảng nút có khoá không xuất hiện trong bất kỳ bảng nào khác – bảng không có điểm cạnh nào. Trong MusicGraph, PlaylistEntries là nguồn của 2 cạnh và không phải là đích đến của cạnh nào. Bảng rộng có 10 hàng, mỗi hàng cho một vị trí.

Mỗi cạnh là mối quan hệ nhiều-một, từ nguồn đến đích. Mỗi mục có một bài hát và một danh sách phát, mỗi bài hát có một nghệ sĩ, mỗi nghệ sĩ có một hãng thu âm. Đó là lý do tại sao bảng rộng không bao giờ mở rộng ra ngoài các hàng của chính thư mục gốc. Dữ liệu mà gốc không thể truy cập sẽ không xuất hiện: một bài hát không có vị trí sẽ bị thiếu trong bảng rộng.

Mối quan hệ nhiều với nhiều trở thành một nút. Bài hát và danh sách phát có mối quan hệ nhiều-nhiều. Nếu bạn khai báo bảng kết hợp dưới dạng một cạnh duy nhất từ Bài hát đến Danh sách phát, thì GRAPH_EXPAND sẽ bỏ qua bảng đó vì không rõ ràng và không còn cạnh nào có thể sử dụng được, nên sẽ không thành công. Việc chuyển PlaylistEntries thành bảng nút có hai cạnh nhiều-đến-một là mẫu được ghi lại và đó là những gì bạn đã làm khi tạo biểu đồ.

12. (KHÔNG BẮT BUỘC) Đường dẫn có GQL

Cho đến nay, mọi câu hỏi đều có một câu trả lời bằng số. Không có. Luồng phát của Cymbal tiếp cận người nghe ở đâu? là câu hỏi về các tuyến đường trong biểu đồ và tổng số không thể trả lời câu hỏi này – khi bạn đã cộng tổng, tuyến đường sẽ biến mất.

1. Hỏi nơi các luồng dữ liệu sẽ được chuyển đến

👉📋 Trình chỉnh sửa truy vấn – dán, rồi nhấp vào Chạy:

GRAPH music.MusicGraph
MATCH (l:Labels)<-[:ArtistToLabel]-(a:Artists)<-[:SongToArtist]-(s:Songs)
      <-[:EntryToSong]-(e:PlaylistEntries)-[:EntryToPlaylist]->(pl:Playlists)
WHERE l.label_name = 'Cymbal Records'
RETURN pl.playlist_name, pl.followers,
       SUM(s.streams) AS streams_reaching_this_playlist,
       STRING_AGG(s.title, ', ') AS songs
GROUP BY pl.playlist_name, pl.followers
ORDER BY streams_reaching_this_playlist DESC

👀 Bạn có thể mong đợi 4 danh sách phát:

pl.playlist_name

pl.followers

streams_reaching_this_playlist

bài hát

Hot Right Now

35.000.000

4.700.000.000

Double Shot, Neon Summer, Paper Crown

Nhạc Pop đang lên

2.000.000

3.500.000.000

Neon Summer, Paper Crown

Nhạc nghe khi đi đường

5.000.000

2.400.000.000

Neon Summer, Slow Arrow

Gym Pump

3.000.000

2.000.000.000

Neon Summer

Kết quả GQL: 4 danh sách phát có số lượng lượt phát tương ứng

Đọc dòng MATCH như một câu: bắt đầu từ một nhãn, quay lại nghệ sĩ của nhãn đó, quay lại bài hát của nghệ sĩ, quay lại các mục trong danh sách phát có chứa những bài hát đó, sau đó chuyển tiếp đến danh sách phát. Các mũi tên chỉ hướng mà các cạnh được khai báo; <- đi ngược lại một bước.

Bây giờ, hãy cộng cột thứ ba. 12,6 tỷ – số mà SUM đã đưa cho bạn ở bước 4, số đó không chính xác.

Đây là thông tin chính xác. Khi đó, câu hỏi đặt ra là Cymbal đã phát trực tuyến bao nhiêu và một bài hát chỉ được tính một lần, bất kể bài hát đó có trong bao nhiêu danh sách phát. Câu hỏi đặt ra là những lượt phát đó đến từ đâu và một bài hát xuất hiện trên 4 danh sách phát thực sự tiếp cận được 4 đối tượng. Nội dung trùng lặp mà GRAPH_EXPAND tạo ra là một lỗi cho một câu hỏi và câu trả lời cho câu hỏi còn lại. AGG không bao giờ nói rằng nội dung trùng lặp là xấu mà chỉ nói rằng nội dung đó phải phù hợp với câu hỏi.

2. Trả về chính các đường dẫn

Xoá tính năng tổng hợp và yêu cầu các tuyến đường.

👉📋 Trình chỉnh sửa truy vấn – dán, rồi nhấp vào Chạy:

GRAPH music.MusicGraph
MATCH p = (l:Labels)<-[:ArtistToLabel]-(a:Artists)<-[:SongToArtist]-(s:Songs)
          <-[:EntryToSong]-(e:PlaylistEntries)-[:EntryToPlaylist]->(pl:Playlists)
WHERE l.label_name = 'Cymbal Records'
RETURN TO_JSON(p) AS path

p = đặt tên cho toàn bộ kết quả trùng khớp và TO_JSON hiển thị kết quả đó.

👀 Dự kiến có 8 hàng và 1 cột path. Mỗi ô là một mảng JSON gồm các nút và cạnh dọc theo một tuyến đường, mỗi nút mang theo labels và properties.

8 hàng, mỗi hàng là một đường dẫn JSON, có thẻ Biểu đồ trong ngăn kết quả

8 hàng cho 4 bài hát, vì mỗi vị trí sẽ có một tuyến đường, chứ không phải mỗi bài hát.

3. Mở thẻ Biểu đồ

👉🌐 Bảng điều khiển – phía trên kết quả, hãy nhấp vào Biểu đồ.

Thẻ này chỉ xuất hiện khi một kết quả có chứa các phần tử biểu đồ. Truy vấn trước đó trả về các con số, nên không có thẻ Biểu đồ; truy vấn này trả về các đường dẫn, nên có thẻ Biểu đồ.

thẻ Graph (Đồ thị) vẽ đồ thị con của Cymbal trong bố cục lực

Bạn sẽ thấy góc của Cymbal trên biểu đồ được vẽ dưới dạng bố cục lực, với số lượng nút và cạnh trong chế độ xem, cũng như một chip cho mỗi nhãn. Kéo một nút để tách bố cục; nhấp vào một nút để đọc các thuộc tính của nút đó.

✅ Điểm kiểm tra: cột thứ ba của truy vấn đầu tiên có tổng là 12, 6 tỷ, truy vấn thứ hai trả về 8 đường dẫn và thẻ Graph (Đồ thị) vẽ các đường dẫn đó.

13. (KHÔNG BẮT BUỘC) Trò chuyện với biểu đồ

Không có SQL trong bước này. Các tác nhân dữ liệu BigQuery có thể sử dụng biểu đồ làm nguồn kiến thức và tài liệu cho biết rằng các tác nhân này sử dụng các chỉ số để tổng hợp nhiều cấp. Hãy xem điều đó có đúng không.

1. Tạo tác nhân

👉🌐 Bảng điều khiển – trong trình đơn điều hướng BigQuery ở bên trái, hãy nhấp vào Agent (Tác nhân), sau đó nhấp vào Agent catalog (Danh mục tác nhân), rồi nhấp vào Create agent (Tạo tác nhân).

👉🌐 Bảng điều khiển – nhập Music graph agent vào Tên tác nhân và nhập nội dung sau vào Mô tả về tác nhân:

Ask questions about labels, artists, songs and playlists in the music property graph.

👉🌐 Bảng điều khiển – trong mục Nguồn kiến thức, hãy nhấp vào Thêm nguồn. Trong hộp thoại Chọn nguồn, hãy mở rộng dự án của bạn, mở rộng music, mở rộng Graphs (Biểu đồ), đánh dấu vào MusicGraph rồi nhấp vào Confirm (Xác nhận).

👀 Nút Thêm nguồn chuyển sang màu xám. Một tác nhân có thể chứa tối đa một biểu đồ và không thể kết hợp biểu đồ với bảng.

hộp thoại Chọn nguồn có MusicGraph được đánh dấu và Chọn (1)

👉🌐 Bảng điều khiển – giữ nguyên Khu vực như đã đặt từ vị trí của biểu đồ. Nhấp vào Lưu, rồi nhấp vào Xuất bản. Trong bảng Kênh xuất bản, hãy nhấp vào Xuất bản tác nhân rồi đóng cửa sổ xác nhận.

2. Đặt câu hỏi

👉🌐 Bảng điều khiển – nhấp vào Tạo cuộc trò chuyện. Một trang trò chuyện sẽ mở ra. Nhập câu hỏi này vào hộp Đặt câu hỏi ở dưới cùng rồi nhấn Enter:

For each label, show total streams and how many playlists their songs are on

👀 Trợ lý trả về một bảng và một câu tóm tắt:

label_name

total_streams

playlist_placements

Cymbal Records

5.100.000.000

8

Northwind Audio

4.500.000.000

2

câu trả lời của tác nhân: bảng và bản tóm tắt một câu

5,1 tỷ. Không ai nói với tác nhân về việc phân đầu ra và tác nhân này cũng không thuộc trường hợp đó.

3. Đọc truy vấn mà AI đã viết

👉🌐 Bảng điều khiển – trong trình đơn điều hướng, hãy nhấp vào Trình khám phá công việc rồi nhấp vào công việc mới nhất. Nhãn của nó bao gồm ca-bq-job: true và data-agent-id cùng với mã nhận dạng của tác nhân, đồng thời truy vấn của nó là:

SELECT
  Labels_label_name AS label_name,
  AGG(Songs_total_streams) AS total_streams,
  AGG(PlaylistEntries_placement_count) AS playlist_placements
FROM GRAPH_EXPAND("music.MusicGraph")
GROUP BY label_name
ORDER BY total_streams DESC

Trình khám phá công việc: nhãn của công việc (ca-bq-job, data-agent-id) và SQL của công việc

Nó tự dùng GRAPH_EXPAND và AGG vì các chỉ số nằm trong giản đồ mà nó đọc. Không có nội dung nào trong phần mô tả của tác nhân đề cập đến họ.

✅ Điểm kiểm tra: 5, 1 tỷ trong câu trả lời của cuộc trò chuyện và AGG(...) trong SQL của công việc.

14. Dọn dẹp

👉💻 Cloud Shell – thả tập dữ liệu, các bảng và biểu đồ thuộc tính của tập dữ liệu:

cd ~/bq-graph-measures-lab
./cleanup.sh

👀 Dự kiến ✓ dropped YOUR_PROJECT_ID.music (tables and graph).

Nếu bạn đã tạo tác nhân dữ liệu không bắt buộc, hãy xoá tác nhân đó trong bảng điều khiển trong mục Tác nhân → Danh mục tác nhân. Và nếu ./setup_project.sh tạo một dự án chỉ cho phòng thí nghiệm này, thì cách dọn dẹp gọn gàng nhất là tắt toàn bộ dự án – mã nhận dạng nằm trong ~/project_id.txt.

15. Xin chúc mừng

Bạn đã khai báo một dòng, MEASURE(SUM(streams)), và dòng này đã thay đổi 12,6 tỷ thành 5,1 tỷ – cho bạn và cho mọi truy vấn mà bất kỳ ai viết dựa trên biểu đồ đó sau này, kể cả những truy vấn mà một tác nhân viết.

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

  • Chỉ số là một giá trị tổng hợp được khai báo trên một nút, bên cạnh KEY đặt độ chi tiết của chỉ số đó.
  • GRAPH_EXPAND làm phẳng biểu đồ thành một bảng rộng có TableLabel_property cột.
  • AGG là hàm duy nhất đọc một chỉ số và hệ thống loại thực thi hàm này theo 4 cách khác nhau.
  • Có 6 giá trị tổng hợp và kết quả AGG là các giá trị thông thường mà bạn có thể chia.
  • Việc thay đổi GROUP BY sẽ hỏi lại câu hỏi mà không ảnh hưởng đến chỉ số.
  • GRAPH_EXPAND muốn có một gốc, nhiều cạnh một-nhiều và các giao điểm được chuyển thành nút.

Bảng quyết định

Dấu hiệu

Nguyên nhân

Cách khắc phục

Tổng số quá lớn

SUM trên một cột trải rộng

khai báo một chỉ số, đọc chỉ số đó bằng AGG

"expected MEASURE, found INT64" (dự kiến là MEASURE, nhưng lại là INT64)

AGG trên một cột đơn giản

sử dụng SUM hoặc khai báo chỉ số

"Không được phép trả về biểu thức thuộc loại MEASURE"

cột chỉ số không có AGG

wrap it: AGG(...)

"không được hiển thị theo loại phần tử"

chỉ số được tham chiếu trong GQL

chỉ đo lường độ trễ sau GRAPH_EXPAND

GRAPH_EXPAND bỏ qua một cạnh hoặc không thành công

ngã ba được mô hình hoá dưới dạng một cạnh

nâng cấp bảng kết hợp thành một nút

Một số cũ sau khi thay đổi biểu đồ

kết quả được lưu vào bộ nhớ đệm

xoá Sử dụng kết quả trong bộ nhớ đệm

Những nội dung chúng tôi không đề cập (có chủ ý)

Nội dung mô tả và từ đồng nghĩa về các thuộc tính, truy vấn đã xác minh và bảng thuật ngữ cho các tác nhân dữ liệu, GQL ngoài một MATCH, các chỉ số trên nhiều biểu đồ. Mỗi phòng là một phòng thí nghiệm riêng.

Tìm hiểu thêm