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 BigQuery Graph để lập mô hình và phân tích mạng lưới tương tác giữa thuốc và mục tiêu. Bạn sẽ tận dụng sức mạnh của truy vấn đồ thị (GQL) để khám phá cách thuốc tương tác với các mục tiêu sinh học, xác định tác dụng phụ tiềm ẩn (chẳng hạn như rủi ro về tim) và khám phá các liệu pháp kết hợp tiềm năng.
🧬 Trường hợp sử dụng — Mạng tương tác giữa thuốc và mục tiêu
Câu hỏi kinh doanh: Phạm vi tác động đầy đủ của một hợp chất là gì — hợp chất đó liên kết với những mục tiêu nào, ảnh hưởng đến những con đường sinh học nào và liên quan đến những vùng bệnh nào?
Bảng:
Bảng | Mô tả |
| Phân tử thuốc có cơ chế hoạt động và giai đoạn phát triển |
| Mục tiêu protein có tên gen và mã UniProt |
| Ái lực liên kết giữa hợp chất và mục tiêu (mục tiêu chính + mục tiêu phụ) |
| Con đường sinh học có liên quan đến vùng bệnh |
| Bảng liên kết các mục tiêu với lộ trình mà các mục tiêu đó tham gia |
Mô hình đồ thị thuộc tính:
(Compound)-[BINDS_TO {affinity_nm, ic50_nm, interaction_type}]->(Target)
(Target)-[PARTICIPATES_IN {role, importance_score}]->(Pathway)

🔍 Câu hỏi minh hoạ
Truy vấn | Nội dung hiển thị |
Q1: Hồ sơ liên kết mục tiêu | Duyệt qua 1 bước — hợp chất đến tất cả mục tiêu chính và mục tiêu phụ |
Q2: Phát hiện nguy cơ tim mạch hERG | Truyền tải 2 bước — hợp chất → mục tiêu hERG → đường dẫn tim |
Câu hỏi 3: Các cặp hợp chất có cùng mục tiêu | Khớp hai chiều — hai hợp chất hội tụ trên cùng một nút mục tiêu |
Câu hỏi 4: Phạm vi ảnh hưởng của con đường lây truyền bệnh | Tổng hợp 2 bước — toàn bộ lộ trình và phạm vi bao phủ của vùng bệnh trên mỗi hợp chất |
Câu hỏi 5: Lựa chọn hợp chất an toàn | Hợp chất có khả năng điều trị ung thư cao nhưng không gây độc tính tim hERG |
Bạn sẽ thực hiện
- Tạo tập dữ liệu và giản đồ BigQuery cho mạng lưới tương tác thuốc
- Tải dữ liệu mẫu (Hợp chất, Mục tiêu, Tương tác, Đường dẫn, Đường dẫn mục tiêu)
- Tạo một Đồ thị thuộc tính trong BigQuery để kết nối các thực thể này
- Truy vấn biểu đồ để hiểu các tương tác phức tạp, các con đường sinh học và phạm vi ảnh hưởng của bệnh bằng cách duyệt qua biểu đồ (
GRAPH_TABLEvàMATCH) - So sánh GQL và SQL chuẩn để hiểu được sự đơn giản và khả năng biểu đạt của cú pháp biểu đồ
Bạn cần có
- Một trình duyệt web, chẳng hạn như Chrome
- Một dự án Google Cloud đã bật tính năng thanh toán
Lớp học lập trình này dành cho nhà phát triển ở mọi cấp độ, kể cả người mới bắt đầu.
2. Trước khi bắt đầu
Tạo một dự án trên Google Cloud
- Trong Google Cloud Console, hãy chọn hoặc tạo một dự án trên đám mây của Google Cloud.
- Đảm bảo rằng bạn đã bật tính năng thanh toán cho dự án trên đám mây của bạn.
Bắt đầu Cloud Shell
- Nhấp vào Kích hoạt Cloud Shell ở đầu Google Cloud Console.
- Xác minh việc xác thực:
gcloud auth list
- Xác nhận dự án của bạn:
gcloud config get project
- Hãy đặt nếu cần:
export PROJECT_ID=<YOUR_PROJECT_ID>
gcloud config set project $PROJECT_ID
Bật API
Chạy lệnh này để bật BigQuery API cần thiết:
gcloud services enable bigquery.googleapis.com
3. Xác định giản đồ và tải dữ liệu
Trước tiên, bạn cần tạo một tập dữ liệu để lưu trữ các bảng liên quan đến biểu đồ và điền dữ liệu mẫu vào các bảng đó.
- Chuyển đến BigQuery Studio trong Google Cloud Console.
- Nhấp vào SQL Editor (Trình chỉnh sửa SQL) để mở một thẻ truy vấn mới.
- Chạy câu lệnh sau để tạo tập dữ liệu
drug_target_graph:
CREATE SCHEMA IF NOT EXISTS drug_target_graph
OPTIONS (location = 'US');
Bây giờ, hãy tạo 5 bảng nguồn bằng cách chạy các truy vấn DDL sau trong BigQuery Studio.
1. Tạo bảng compounds
Chứa các phân tử thuốc, cơ chế hoạt động, giai đoạn phát triển và lĩnh vực điều trị của chúng.
CREATE OR REPLACE TABLE drug_target_graph.compounds AS
SELECT 'CPD001' AS compound_id, 'Imatinib' AS compound_name, 'Kinase Inhibitor' AS mechanism_of_action, 'Approved' AS dev_stage, 'Oncology' AS therapeutic_area, 479.6 AS molecular_weight UNION ALL
SELECT 'CPD002', 'Gefitinib', 'Kinase Inhibitor', 'Approved', 'Oncology', 446.9 UNION ALL
SELECT 'CPD003', 'Erlotinib', 'Kinase Inhibitor', 'Approved', 'Oncology', 393.4 UNION ALL
SELECT 'CPD004', 'Sorafenib', 'Multi-Kinase Inhibitor', 'Approved', 'Oncology', 464.8 UNION ALL
SELECT 'CPD005', 'Vemurafenib', 'BRAF Inhibitor', 'Approved', 'Oncology', 489.9 UNION ALL
SELECT 'CPD006', 'Crizotinib', 'ALK Inhibitor', 'Approved', 'Oncology', 450.3 UNION ALL
SELECT 'CPD007', 'Idelalisib', 'PI3K Inhibitor', 'Approved', 'Oncology', 415.4 UNION ALL
SELECT 'CPD008', 'Trametinib', 'MEK Inhibitor', 'Approved', 'Oncology', 615.4 UNION ALL
SELECT 'CPD009', 'Palbociclib', 'CDK Inhibitor', 'Approved', 'Oncology', 447.5 UNION ALL
SELECT 'CPD010', 'Compound-X1', 'Kinase Inhibitor', 'Phase II', 'Oncology', 412.3 UNION ALL
SELECT 'CPD011', 'Compound-X2', 'PI3K Inhibitor', 'Phase I', 'Oncology', 398.7 UNION ALL
SELECT 'CPD012', 'Saquinavir', 'Protease Inhibitor', 'Approved', 'Infectious Disease', 670.8 UNION ALL
SELECT 'CPD013', 'Metformin', 'AMPK Activator', 'Approved', 'Metabolic', 165.6 UNION ALL
SELECT 'CPD014', 'Rapamycin', 'mTOR Inhibitor', 'Approved', 'Immunology', 914.2 UNION ALL
SELECT 'CPD015', 'Compound-X3', 'Multi-Kinase Inhibitor', 'Preclinical', 'Oncology', 502.1;
2. Tạo bảng targets
Chứa các mục tiêu protein, tên gen, mã UniProt và lớp mục tiêu.
CREATE OR REPLACE TABLE drug_target_graph.targets AS
SELECT 'TGT001' AS target_id, 'BCR-ABL1' AS target_name, 'ABL1' AS gene_name, 'P00519' AS uniprot_id, 'Kinase' AS target_class, TRUE AS is_oncogene UNION ALL
SELECT 'TGT002', 'EGFR', 'EGFR', 'P00533', 'Kinase', TRUE UNION ALL
SELECT 'TGT003', 'VEGFR2', 'KDR', 'P35968', 'Kinase', FALSE UNION ALL
SELECT 'TGT004', 'BRAF', 'BRAF', 'P15056', 'Kinase', TRUE UNION ALL
SELECT 'TGT005', 'ALK', 'ALK', 'Q9UM73', 'Kinase', TRUE UNION ALL
SELECT 'TGT006', 'PI3K-alpha','PIK3CA', 'P42336', 'Lipid Kinase', TRUE UNION ALL
SELECT 'TGT007', 'MEK1', 'MAP2K1', 'Q02750', 'Kinase', FALSE UNION ALL
SELECT 'TGT008', 'CDK4', 'CDK4', 'P11802', 'Kinase', FALSE UNION ALL
SELECT 'TGT009', 'CDK6', 'CDK6', 'P30279', 'Kinase', FALSE UNION ALL
SELECT 'TGT010', 'mTOR', 'MTOR', 'P42345', 'Kinase', FALSE UNION ALL
SELECT 'TGT011', 'PDGFR-beta','PDGFRB', 'P09619', 'Kinase', FALSE UNION ALL
SELECT 'TGT012', 'c-KIT', 'KIT', 'P10721', 'Kinase', TRUE UNION ALL
SELECT 'TGT013', 'hERG', 'KCNH2', 'Q12809', 'Ion Channel', FALSE UNION ALL
SELECT 'TGT014', 'AMPK', 'PRKAA1', 'Q13131', 'Kinase', FALSE UNION ALL
SELECT 'TGT015', 'RAF1', 'RAF1', 'P04049', 'Kinase', FALSE UNION ALL
SELECT 'TGT016', 'RET', 'RET', 'P07949', 'Kinase', TRUE UNION ALL
SELECT 'TGT017', 'FLT3', 'FLT3', 'P36888', 'Kinase', TRUE UNION ALL
SELECT 'TGT018', 'AKT1', 'AKT1', 'P31749', 'Kinase', FALSE UNION ALL
SELECT 'TGT019', 'ERK2', 'MAPK1', 'P28482', 'Kinase', FALSE UNION ALL
SELECT 'TGT020', 'HIV-Protease','HIV1-PR','Q72547', 'Protease', FALSE;
3. Tạo bảng interactions
Chứa dữ liệu về ái lực liên kết của mục tiêu hợp chất (mục tiêu chính so với mục tiêu phụ).
CREATE OR REPLACE TABLE drug_target_graph.interactions AS
SELECT 'INT001' AS interaction_id, 'CPD001' AS compound_id, 'TGT001' AS target_id, 0.025 AS affinity_nm, 0.038 AS ic50_nm, 'primary' AS interaction_type, 9.8 AS pchembl_value UNION ALL
SELECT 'INT002', 'CPD001', 'TGT011', 0.1, 0.15, 'primary', 8.8 UNION ALL
SELECT 'INT003', 'CPD001', 'TGT012', 0.068, 0.1, 'primary', 9.2 UNION ALL
SELECT 'INT004', 'CPD001', 'TGT016', 0.5, 0.8, 'off-target', 7.4 UNION ALL
SELECT 'INT005', 'CPD001', 'TGT013', 5.2, 8.1, 'off-target', 6.1 UNION ALL
SELECT 'INT006', 'CPD002', 'TGT002', 0.02, 0.033, 'primary', 9.7 UNION ALL
SELECT 'INT007', 'CPD002', 'TGT013', 3.1, 4.8, 'off-target', 6.5 UNION ALL
SELECT 'INT008', 'CPD003', 'TGT002', 0.058, 0.079, 'primary', 9.2 UNION ALL
SELECT 'INT009', 'CPD003', 'TGT013', 8.5, 12.0, 'off-target', 5.9 UNION ALL
SELECT 'INT010', 'CPD004', 'TGT003', 0.09, 0.12, 'primary', 9.1 UNION ALL
SELECT 'INT011', 'CPD004', 'TGT004', 0.038, 0.055, 'primary', 8.9 UNION ALL
SELECT 'INT012', 'CPD004', 'TGT015', 0.22, 0.31, 'primary', 8.5 UNION ALL
SELECT 'INT013', 'CPD004', 'TGT016', 0.58, 0.75, 'primary', 8.1 UNION ALL
SELECT 'INT014', 'CPD004', 'TGT017', 0.33, 0.48, 'primary', 8.4 UNION ALL
SELECT 'INT015', 'CPD004', 'TGT013', 2.8, 4.1, 'off-target', 6.6 UNION ALL
SELECT 'INT016', 'CPD005', 'TGT004', 0.031, 0.044, 'primary', 9.5 UNION ALL
SELECT 'INT017', 'CPD005', 'TGT015', 0.48, 0.65, 'off-target', 7.3 UNION ALL
SELECT 'INT018', 'CPD006', 'TGT005', 0.02, 0.028, 'primary', 9.8 UNION ALL
SELECT 'INT019', 'CPD006', 'TGT003', 0.41, 0.59, 'off-target', 7.4 UNION ALL
SELECT 'INT020', 'CPD007', 'TGT006', 0.019, 0.025, 'primary', 9.8 UNION ALL
SELECT 'INT021', 'CPD007', 'TGT018', 0.55, 0.78, 'off-target', 7.2 UNION ALL
SELECT 'INT022', 'CPD008', 'TGT007', 0.0092, 0.014, 'primary', 10.1 UNION ALL
SELECT 'INT023', 'CPD008', 'TGT019', 0.38, 0.51, 'off-target', 7.4 UNION ALL
SELECT 'INT024', 'CPD009', 'TGT008', 0.011, 0.017, 'primary', 9.9 UNION ALL
SELECT 'INT025', 'CPD009', 'TGT009', 0.015, 0.022, 'primary', 9.8 UNION ALL
SELECT 'INT026', 'CPD010', 'TGT002', 0.041, 0.058, 'primary', 9.4 UNION ALL
SELECT 'INT027', 'CPD010', 'TGT001', 0.38, 0.52, 'off-target', 7.3 UNION ALL
SELECT 'INT028', 'CPD010', 'TGT013', 1.2, 1.8, 'off-target', 7.1 UNION ALL
SELECT 'INT029', 'CPD011', 'TGT006', 0.029, 0.041, 'primary', 9.5 UNION ALL
SELECT 'INT030', 'CPD011', 'TGT010', 0.71, 0.95, 'off-target', 7.0 UNION ALL
SELECT 'INT031', 'CPD012', 'TGT020', 0.39, 0.55, 'primary', 7.3 UNION ALL
SELECT 'INT032', 'CPD013', 'TGT014', 12.0, 18.5, 'primary', 5.7 UNION ALL
SELECT 'INT033', 'CPD014', 'TGT010', 0.0018, 0.0025, 'primary', 11.8 UNION ALL
SELECT 'INT034', 'CPD015', 'TGT004', 0.055, 0.078, 'primary', 9.2 UNION ALL
SELECT 'INT035', 'CPD015', 'TGT003', 0.12, 0.17, 'primary', 8.9 UNION ALL
SELECT 'INT036', 'CPD015', 'TGT016', 0.29, 0.41, 'primary', 8.5 UNION ALL
SELECT 'INT037', 'CPD015', 'TGT013', 0.95, 1.35, 'off-target', 7.2;
4. Tạo bảng pathways
Chứa các con đường sinh học, các vùng bệnh liên quan và mức độ liên quan đến ung thư.
CREATE OR REPLACE TABLE drug_target_graph.pathways AS
SELECT 'PWY001' AS pathway_id, 'MAPK Signaling' AS pathway_name, 'hsa04010' AS kegg_id, 'Cell Proliferation' AS biological_process, 'Oncology' AS disease_area, 'high' AS cancer_relevance UNION ALL
SELECT 'PWY002', 'PI3K-AKT Signaling', 'hsa04151', 'Cell Survival', 'Oncology', 'high' UNION ALL
SELECT 'PWY003', 'VEGF Signaling', 'hsa04370', 'Angiogenesis', 'Oncology', 'high' UNION ALL
SELECT 'PWY004', 'ErbB Signaling', 'hsa04012', 'Cell Growth', 'Oncology', 'high' UNION ALL
SELECT 'PWY005', 'mTOR Signaling', 'hsa04150', 'Cell Growth', 'Oncology', 'medium' UNION ALL
SELECT 'PWY006', 'Cell Cycle', 'hsa04110', 'Cell Division', 'Oncology', 'high' UNION ALL
SELECT 'PWY007', 'Cardiac Muscle Contraction', 'hsa04260', 'Cardiac Function', 'Cardiovascular', 'low' UNION ALL
SELECT 'PWY008', 'hERG Cardiac Channel', 'hsa04022', 'Cardiac Repolarisation','Cardiovascular', 'low' UNION ALL
SELECT 'PWY009', 'AMPK Signaling', 'hsa04152', 'Energy Metabolism', 'Metabolic', 'low' UNION ALL
SELECT 'PWY010', 'ALK Signaling', 'hsa04915', 'Cell Proliferation', 'Oncology', 'high' UNION ALL
SELECT 'PWY011', 'RAS Signaling', 'hsa04014', 'Cell Proliferation', 'Oncology', 'high' UNION ALL
SELECT 'PWY012', 'HIV Replication', 'hsa05170', 'Viral Replication', 'Infectious Disease', 'low';
5. Tạo bảng target_pathways
Bảng liên kết các mục tiêu với con đường sinh học mà chúng tham gia.
CREATE OR REPLACE TABLE drug_target_graph.target_pathways AS
SELECT 'TP001' AS tp_id, 'TGT001' AS target_id, 'PWY001' AS pathway_id, 'activator' AS role, 0.95 AS importance_score UNION ALL
SELECT 'TP002', 'TGT001', 'PWY011', 'activator', 0.88 UNION ALL
SELECT 'TP003', 'TGT002', 'PWY004', 'activator', 0.98 UNION ALL
SELECT 'TP004', 'TGT002', 'PWY001', 'activator', 0.82 UNION ALL
SELECT 'TP005', 'TGT002', 'PWY002', 'activator', 0.75 UNION ALL
SELECT 'TP006', 'TGT003', 'PWY003', 'activator', 0.96 UNION ALL
SELECT 'TP007', 'TGT003', 'PWY001', 'activator', 0.71 UNION ALL
SELECT 'TP008', 'TGT004', 'PWY001', 'activator', 0.97 UNION ALL
SELECT 'TP009', 'TGT004', 'PWY011', 'activator', 0.89 UNION ALL
SELECT 'TP010', 'TGT005', 'PWY010', 'activator', 0.99 UNION ALL
SELECT 'TP011', 'TGT005', 'PWY001', 'activator', 0.78 UNION ALL
SELECT 'TP012', 'TGT006', 'PWY002', 'activator', 0.98 UNION ALL
SELECT 'TP013', 'TGT006', 'PWY005', 'activator', 0.85 UNION ALL
SELECT 'TP014', 'TGT007', 'PWY001', 'activator', 0.94 UNION ALL
SELECT 'TP015', 'TGT007', 'PWY011', 'activator', 0.88 UNION ALL
SELECT 'TP016', 'TGT008', 'PWY006', 'activator', 0.95 UNION ALL
SELECT 'TP017', 'TGT009', 'PWY006', 'activator', 0.93 UNION ALL
SELECT 'TP018', 'TGT010', 'PWY005', 'activator', 0.99 UNION ALL
SELECT 'TP019', 'TGT010', 'PWY002', 'activator', 0.91 UNION ALL
SELECT 'TP020', 'TGT011', 'PWY003', 'activator', 0.87 UNION ALL
SELECT 'TP021', 'TGT011', 'PWY001', 'activator', 0.72 UNION ALL
SELECT 'TP022', 'TGT012', 'PWY001', 'activator', 0.83 UNION ALL
SELECT 'TP023', 'TGT012', 'PWY011', 'activator', 0.79 UNION ALL
SELECT 'TP024', 'TGT013', 'PWY008', 'substrate', 0.99 UNION ALL
SELECT 'TP025', 'TGT013', 'PWY007', 'substrate', 0.95 UNION ALL
SELECT 'TP026', 'TGT014', 'PWY009', 'activator', 0.97 UNION ALL
SELECT 'TP027', 'TGT015', 'PWY001', 'activator', 0.91 UNION ALL
SELECT 'TP028', 'TGT015', 'PWY011', 'activator', 0.86 UNION ALL
SELECT 'TP029', 'TGT016', 'PWY001', 'activator', 0.84 UNION ALL
SELECT 'TP030', 'TGT016', 'PWY003', 'activator', 0.77 UNION ALL
SELECT 'TP031', 'TGT017', 'PWY001', 'activator', 0.88 UNION ALL
SELECT 'TP032', 'TGT017', 'PWY011', 'activator', 0.82 UNION ALL
SELECT 'TP033', 'TGT018', 'PWY002', 'activator', 0.96 UNION ALL
SELECT 'TP034', 'TGT018', 'PWY005', 'activator', 0.88 UNION ALL
SELECT 'TP035', 'TGT019', 'PWY001', 'activator', 0.97 UNION ALL
SELECT 'TP036', 'TGT019', 'PWY011', 'activator', 0.91 UNION ALL
SELECT 'TP037', 'TGT020', 'PWY012', 'substrate', 0.99;
4. Tạo biểu đồ thuộc tính
Sau khi tạo bảng thành công, giờ đây, bạn có thể tạo biểu đồ thuộc tính. Thao tác này liên kết các nút (Hợp chất, Mục tiêu, Đường dẫn) bằng bảng cạnh (Interactions và Target Pathways).
Chạy câu lệnh sau trong Trình soạn thảo SQL của BigQuery Studio:
CREATE OR REPLACE PROPERTY GRAPH drug_target_graph.drug_target_interaction_graph
NODE TABLES (
drug_target_graph.compounds
AS compound_node
KEY (compound_id)
LABEL Compound
PROPERTIES (compound_id, compound_name, mechanism_of_action, dev_stage, therapeutic_area, molecular_weight),
drug_target_graph.targets
AS target_node
KEY (target_id)
LABEL Target
PROPERTIES (target_id, target_name, gene_name, uniprot_id, target_class, is_oncogene),
drug_target_graph.pathways
AS pathway_node
KEY (pathway_id)
LABEL Pathway
PROPERTIES (pathway_id, pathway_name, kegg_id, biological_process, disease_area, cancer_relevance)
)
EDGE TABLES (
drug_target_graph.interactions
AS binds_to_edge
KEY (interaction_id)
SOURCE KEY (compound_id) REFERENCES compound_node (compound_id)
DESTINATION KEY (target_id) REFERENCES target_node (target_id)
LABEL BINDS_TO
PROPERTIES (interaction_id, affinity_nm, ic50_nm, interaction_type, pchembl_value),
drug_target_graph.target_pathways
AS participates_in_edge
KEY (tp_id)
SOURCE KEY (target_id) REFERENCES target_node (target_id)
DESTINATION KEY (pathway_id) REFERENCES pathway_node (pathway_id)
LABEL PARTICIPATES_IN
PROPERTIES (tp_id, role, importance_score)
);
Thao tác này sẽ tạo một biểu đồ có tên là drug_target_interaction_graph trong tập dữ liệu của bạn.

5. Truy vấn 1: Hồ sơ liên kết mục tiêu đầy đủ cho mỗi hợp chất
Hãy chạy truy vấn biểu đồ đầu tiên. Đây là một bước truyền tải 1 bước trả lời cho câu hỏi: Hợp chất nào liên kết với mục tiêu nào và ái lực của chúng là gì?
Truy vấn GQL
Chạy truy vấn sau trong Trình chỉnh sửa SQL:
SELECT
compound_name,
dev_stage,
target_name,
gene_name,
target_class,
interaction_type,
ROUND(affinity_nm, 3) AS affinity_nm,
ROUND(ic50_nm, 3) AS ic50_nm,
pchembl_value
FROM GRAPH_TABLE(
drug_target_graph.drug_target_interaction_graph
MATCH (c:Compound)-[b:BINDS_TO]->(t:Target)
COLUMNS (
c.compound_name AS compound_name,
c.dev_stage AS dev_stage,
t.target_name AS target_name,
t.gene_name AS gene_name,
t.target_class AS target_class,
b.interaction_type AS interaction_type,
b.affinity_nm AS affinity_nm,
b.ic50_nm AS ic50_nm,
b.pchembl_value AS pchembl_value
)
)
ORDER BY compound_name, interaction_type, affinity_nm;
Sau đây là những thông tin bạn sẽ thấy trong kết quả:

6. Truy vấn 2: Phát hiện nguy cơ tim mạch
Câu hỏi về doanh nghiệp
Trong quá trình khám phá thuốc, một trong những lý do phổ biến nhất khiến một hợp chất tiềm năng thất bại trong các thử nghiệm lâm sàng là độc tính tim — cụ thể là sự liên kết ngoài ý muốn với protein hERG (gen: KCNH2), một kênh ion kali điều hoà nhịp tim. Việc tác động nhầm vào hERG có thể gây ra chứng loạn nhịp tim gây tử vong và là nguyên nhân khiến một số loại thuốc nổi tiếng bị thu hồi.
Câu hỏi chúng tôi muốn trả lời là:
"Hợp chất nào trong quy trình của chúng ta có sự kiện liên kết ngoài mục tiêu trên protein hERG và những con đường tim mạch nào có nguy cơ bị ảnh hưởng?"
Đây là câu hỏi 2 bước: chúng ta cần đi từ một Hợp chất, qua một Đích (hERG), đến một Đường dẫn — kết nối ba loại thực thể qua hai mối quan hệ trong một truy vấn duy nhất.
Viết truy vấn GQL
Chạy truy vấn sau trong Trình chỉnh sửa SQL của BQ:
SELECT
compound_name,
dev_stage,
therapeutic_area,
target_name,
ROUND(affinity_nm, 3) AS herg_affinity_nm,
pathway_name,
disease_area AS pathway_disease_area
FROM GRAPH_TABLE(
drug_target_graph.drug_target_interaction_graph
MATCH (c:Compound)-[b:BINDS_TO]->(t:Target)-[p:PARTICIPATES_IN]->(pw:Pathway)
WHERE t.gene_name = 'KCNH2'
AND b.interaction_type = 'off-target'
AND pw.disease_area = 'Cardiovascular'
COLUMNS (
c.compound_name AS compound_name,
c.dev_stage AS dev_stage,
c.therapeutic_area AS therapeutic_area,
t.target_name AS target_name,
b.affinity_nm AS affinity_nm,
pw.pathway_name AS pathway_name,
pw.disease_area AS disease_area
)
)
ORDER BY herg_affinity_nm;
Hãy chú ý cách mệnh đề MATCH đọc gần giống như một câu: "Tìm một Hợp chất liên kết với một Mục tiêu tham gia vào một Con đường" — với các bộ lọc được áp dụng tại mỗi nút và cạnh dọc theo đường dẫn.
Sau đây là dữ liệu bạn sẽ thấy trong kết quả:

Trực quan hoá mạng lưới rủi ro dưới dạng biểu đồ
Bảng cho chúng ta thấy dữ liệu, nhưng không cho thấy cấu trúc của rủi ro. Có nhiều hợp chất hội tụ trên cùng một con đường không? Có một hay nhiều hợp chất có nguy cơ cao?
Hình ảnh trực quan của biểu đồ giúp bạn thấy ngay điều này. Chạy ô bên dưới để kết xuất cùng một lượt truyền tải 2 bước dưới dạng mạng tương tác:
GRAPH `drug_target_graph.drug_target_interaction_graph`
MATCH pt = (c:Compound)-[b:BINDS_TO]->(t:Target)-[p:PARTICIPATES_IN]->(pw:Pathway)
WHERE t.gene_name = 'KCNH2'
AND pw.disease_area = 'Cardiovascular'
RETURN
TO_JSON(pt) AS path
Bạn sẽ thấy một biểu đồ như sau:

Mỗi đường dẫn trong biểu đồ theo dõi một chuỗi trách nhiệm hoàn chỉnh: một hợp chất (nút màu xanh dương) liên kết với protein hERG ở giữa, kết nối với một hoặc nhiều đường dẫn tim (nút màu xanh lục). Danh sách phẳng gồm các hàng trong bảng giờ đây đã trở thành một mạng lưới rủi ro rõ ràng. Các hợp chất có nhiều đường tiếp xúc ngay lập tức nổi bật và được ưu tiên cao hơn để xem xét về độ an toàn.
Xem lý do GQL hiệu quả hơn SQL
Để thực thi cùng một truy vấn 2 bước nhảy trong SQL chuẩn, bạn cần 4 phép nối rõ ràng. Bạn đang tốn công sức để mô tả cách kết hợp các bảng thay vì mối quan hệ nào mà bạn đang tìm kiếm. GQL giúp bạn tập trung vào câu hỏi.
SELECT
c.compound_name,
c.dev_stage,
c.therapeutic_area,
t.target_name,
ROUND(i.affinity_nm, 3) AS herg_affinity_nm,
pw.pathway_name,
pw.disease_area AS pathway_disease_area
FROM drug_target_graph.compounds c
JOIN drug_target_graph.interactions i ON c.compound_id = i.compound_id
JOIN drug_target_graph.targets t ON i.target_id = t.target_id
JOIN drug_target_graph.target_pathways tp ON t.target_id = tp.target_id
JOIN drug_target_graph.pathways pw ON tp.pathway_id = pw.pathway_id
WHERE t.gene_name = 'KCNH2'
AND i.interaction_type = 'off-target'
AND pw.disease_area = 'Cardiovascular'
ORDER BY herg_affinity_nm;
Đi sâu hơn — phát hiện rủi ro về chất chuyển hoá nhiều bước
Câu lệnh trên xác định các hợp chất liên kết trực tiếp với protein hERG. Nhưng trong quy trình thực tế về độ an toàn của thuốc, rủi ro đôi khi nằm ở một bước khác: một hợp chất có thể được chuyển hoá trong cơ thể thành một phân tử thứ cấp (chất chuyển hoá) rồi liên kết với hERG — một rủi ro mà các xét nghiệm liên kết trực tiếp có thể bỏ sót hoàn toàn.
Nếu biểu đồ thuộc tính của bạn bao gồm bảng nút Metabolite và cạnh METABOLISES_INTO, bạn có thể mở rộng cùng một mẫu MATCH thành một đường truyền tải 3 bước:
(Compound)-[METABOLISES_INTO]->(Metabolite)-[BINDS_TO]->
(Target)-[PARTICIPATES_IN]->(Pathway)
Cấu trúc truy vấn GQL sẽ thay đổi chính xác một nút và một cạnh. SQL tương đương sẽ yêu cầu thêm hai JOIN. Đây là mẫu giúp việc duyệt đồ thị trở nên đặc biệt hiệu quả trong việc phân tích chuỗi an toàn — độ phức tạp của truy vấn tăng tuyến tính trong khi thông tin chi tiết về sinh học tăng theo cấp số nhân.
7. Truy vấn 3: Cặp từ ghép có cùng mục tiêu
Để tìm các ứng viên cho liệu pháp kết hợp, chúng ta có thể xác định thời điểm hai hợp chất khác nhau liên kết với cùng một nút mục tiêu. Chúng tôi sử dụng phương pháp so khớp hai chiều để trả lời câu hỏi: Những hợp chất ung thư nào hội tụ trên cùng một mục tiêu?
Chạy truy vấn sau trong Trình chỉnh sửa SQL:
SELECT
compound_a,
compound_b,
shared_target,
gene_name,
ROUND(affinity_a_nm, 3) AS affinity_a_nm,
ROUND(affinity_b_nm, 3) AS affinity_b_nm
FROM GRAPH_TABLE(
drug_target_graph.drug_target_interaction_graph
MATCH (c1:Compound)-[b1:BINDS_TO]->(t:Target)<-[b2:BINDS_TO]-(c2:Compound)
WHERE c1.compound_id < c2.compound_id
AND c1.therapeutic_area = 'Oncology'
AND c2.therapeutic_area = 'Oncology'
COLUMNS (
c1.compound_name AS compound_a,
c2.compound_name AS compound_b,
t.target_name AS shared_target,
t.gene_name AS gene_name,
b1.affinity_nm AS affinity_a_nm,
b2.affinity_nm AS affinity_b_nm
)
)
ORDER BY compound_a, compound_b, affinity_a_nm;
Sau đây là dữ liệu bạn sẽ thấy trong kết quả:

Hình ảnh trực quan hoá biểu đồ
Bạn có thể trực quan hoá Biểu đồ ngay trong BigQuery bằng cách chạy mã sau trong trình soạn thảo SQL.
GRAPH `drug_target_graph.drug_target_interaction_graph`
MATCH p = (c1:Compound)-[b1:BINDS_TO]->(t:Target)<-[b2:BINDS_TO]-(c2:Compound)
WHERE c1.compound_id < c2.compound_id
AND c1.therapeutic_area = 'Oncology'
RETURN
TO_JSON(p) AS path
Quá trình duyệt hai chiều này cho thấy các cặp hợp chất hội tụ trên cùng một mục tiêu protein – một mẫu khó phát hiện trong bảng tương tác phẳng nhưng có thể thấy ngay dưới dạng biểu đồ. Trong quá trình khám phá thuốc, các cặp mục tiêu chung là điểm khởi đầu cho việc thiết kế liệu pháp kết hợp: hai hợp chất tác động vào cùng một nút trong lộ trình ung thư có thể tạo ra hiệu ứng hiệp đồng hoặc báo hiệu sự dư thừa không mong muốn trong quy trình

8. Truy vấn 4: Bán kính ảnh hưởng của lộ trình bệnh
Tác động sinh học của mỗi hợp chất rộng đến mức nào? Hãy thực hiện phép duyệt 2 bước có tổng hợp để trả lời câu hỏi: Mỗi hợp chất ảnh hưởng đến bao nhiêu con đường sinh học và mục tiêu riêng biệt, được nhóm theo khu vực bệnh?
Chạy truy vấn sau trong Trình chỉnh sửa SQL:
SELECT
compound_name,
dev_stage,
disease_area,
COUNT(DISTINCT pathway_id) AS pathways_affected,
COUNT(DISTINCT target_id) AS targets_involved,
STRING_AGG(DISTINCT pathway_name ORDER BY pathway_name) AS pathway_list
FROM GRAPH_TABLE(
drug_target_graph.drug_target_interaction_graph
MATCH (c:Compound)-[b:BINDS_TO]->(t:Target)-[p:PARTICIPATES_IN]->(pw:Pathway)
COLUMNS (
c.compound_name AS compound_name,
c.dev_stage AS dev_stage,
t.target_id AS target_id,
pw.pathway_id AS pathway_id,
pw.pathway_name AS pathway_name,
pw.disease_area AS disease_area
)
)
GROUP BY compound_name, dev_stage, disease_area
ORDER BY compound_name, pathways_affected DESC;
Sau đây là những thông tin bạn sẽ thấy trong kết quả:

9. Truy vấn 5: Lựa chọn hợp chất an toàn
Cuối cùng, hãy truy vấn các hợp chất có mức độ bao phủ cao về ung thư nhưng tránh rõ ràng các trách nhiệm pháp lý ngoài mục tiêu hERG (tim). Điều này phù hợp với các mẫu lựa chọn ưu tiên an toàn phổ biến trong quy trình khám phá thuốc.
Chạy truy vấn sau trong Trình chỉnh sửa SQL:
WITH oncology_compounds AS (
SELECT DISTINCT compound_id, compound_name, dev_stage
FROM GRAPH_TABLE(
drug_target_graph.drug_target_interaction_graph
MATCH (c:Compound)-[b:BINDS_TO]->(t:Target)-[p:PARTICIPATES_IN]->(pw:Pathway)
WHERE pw.disease_area = 'Oncology'
AND pw.cancer_relevance = 'high'
COLUMNS (
c.compound_id AS compound_id,
c.compound_name AS compound_name,
c.dev_stage AS dev_stage
)
)
),
herg_risk_compounds AS (
SELECT DISTINCT compound_id
FROM GRAPH_TABLE(
drug_target_graph.drug_target_interaction_graph
MATCH (c:Compound)-[b:BINDS_TO]->(t:Target)
WHERE t.gene_name = 'KCNH2'
COLUMNS (c.compound_id AS compound_id)
)
)
SELECT
o.compound_name,
o.dev_stage,
'Clean cardiac profile' AS cardiac_safety
FROM oncology_compounds o
LEFT JOIN herg_risk_compounds h ON o.compound_id = h.compound_id
WHERE h.compound_id IS NULL
ORDER BY o.dev_stage, o.compound_name;
Sau đây là kết quả bạn sẽ thấy:

Bạn đã thực hiện thành công các phép duyệt đồ thị nâng cao trong BigQuery để trích xuất các hồ sơ chính về độ an toàn và hiệu quả!
10. Phần bổ sung: Trò chuyện với biểu đồ
Tính năng Phân tích đàm thoại của BigQuery hiện hỗ trợ biểu đồ làm nguồn kiến thức. Nhờ đó, bạn có thể trò chuyện về biểu đồ vừa tạo bằng ngôn ngữ tự nhiên.
Bắt đầu: Thêm biểu đồ làm nguồn tri thức
Để bắt đầu, hãy tạo một tác nhân trò chuyện theo các bước tại đây. Chọn biểu đồ bạn đã tạo trên thanh tìm kiếm.

Sử dụng tính năng Phân tích đàm thoại trong BigQuery để trò chuyện với biểu đồ của bạn
Sau khi bạn thêm nguồn kiến thức dưới dạng biểu đồ, hãy hoàn tất phần còn lại của quy trình thiết lập tác nhân phân tích cuộc trò chuyện.
Sau đó, bạn có thể bắt đầu trò chuyện với biểu đồ bằng ngôn ngữ tự nhiên!

Câu hỏi khác
- Tất cả mục tiêu của các hợp chất hiện đang trong giai đoạn thử nghiệm 2 là gì?
- Những mục tiêu nào được chia sẻ giữa các hợp chất tim mạch và ung thư?
11. Dọn dẹp
Để tránh bị tính phí liên tục vào tài khoản Google Cloud, hãy xoá các tài nguyên được tạo trong lớp học lập trình này.
Chạy truy vấn sau để loại bỏ giản đồ và tất cả các bảng theo kiểu xếp tầng:
DROP SCHEMA IF EXISTS drug_target_graph CASCADE;
12. Xin chúc mừng
Xin chúc mừng! Bạn đã lập mô hình và phân tích thành công mạng lưới tương tác giữa thuốc và mục tiêu bằng BigQuery Graph.
Kiến thức bạn học được
- Cách lập mô hình mối quan hệ giữa các thực thể (hợp chất, mục tiêu, lộ trình) dưới dạng đồ thị thuộc tính.
- Cách xác định giản đồ và tạo Biểu đồ thuộc tính trong BigQuery.
- Cách viết các phép duyệt đồ thị phức tạp bằng GQL và so sánh với SQL truyền thống.
- Cách tận dụng
GRAPH_TABLE,MATCHvà tính năng so khớp hai chiều để giải quyết các vấn đề về miền khoa học đời sống.