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 để mô hình hoá 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 các 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 các tác dụng phụ tiềm ẩn (chẳng hạn như nguy cơ 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 lưới tương tác giữa thuốc và mục tiêu
Câu hỏi kinh doanh: Phạm vi ảnh hưởng đầy đủ của một hợp chất là gì – hợp chất đó liên kết với 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 lĩnh vực bệnh nào?
Bảng:
Bảng | Mô tả |
| Các 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ã nhận dạng UniProt |
| Ái lực liên kết của hợp chất mục tiêu (mục tiêu chính + mục tiêu ngoài) |
| Các con đường sinh học có liên quan đến vùng bệnh |
| Bảng kết hợp liên kết các mục tiêu với những lộ trình mà các mục tiêu đó tham gia |
Mô hình biểu đồ thuộc tính:
(Compound)-[BINDS_TO {affinity_nm, ic50_nm, interaction_type}]->(Target)
(Target)-[PARTICIPATES_IN {role, importance_score}]->(Pathway)

🔍 Cụm từ tìm kiếm minh hoạ
Truy vấn | Nội dung hiển thị |
Câu hỏi 1: Hồ sơ liên kết mục tiêu | Truy cập 1 bước — kết hợp với tất cả mục tiêu chính và mục tiêu ngoài |
Câu hỏi 2: Phát hiện nguy cơ tim hERG | Truyền tải 2 bước — hợp chất → mục tiêu hERG → đường dẫn tim |
Q3: Shared-target compound pairs | Khớp hai chiều – hai hợp chất hội tụ trên cùng một nút đích |
Câu hỏi 4: Bán kính ảnh hưởng của đường lây truyền bệnh | Phương pháp tổng hợp 2 bước – phạm vi bao phủ toàn bộ đường dẫn và vùng bệnh cho mỗi hợp chất |
Câu hỏi 5: Lựa chọn hợp chất an toàn | Các hợp chất có độ bao phủ cao trong ung thư học nhưng không có nguy cơ gây bệ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 Biểu đồ thuộc tính trong BigQuery để kết nối các thực thể này
- Truy vấn biểu đồ để tìm hiểu các tương tác phức tạp, đường dẫn sinh học và phạm vi ảnh hưởng của bệnh bằng cách sử dụng các thao tác duyệt qua biểu đồ (
GRAPH_TABLEvàMATCH) - So sánh GQL và SQL chuẩn để hiểu rõ 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 như Chrome
- Một dự án trê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 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
- Nhấp vào Kích hoạt Cloud Shell ở đầu Cloud Console.
- Xác minh quy trình xác thực:
gcloud auth list
- Xác nhận dự án của bạn:
gcloud config get project
- Đặ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 bắt buộc:
gcloud services enable bigquery.googleapis.com \
bigqueryreservation.googleapis.com
Tạo chế độ đặt trước và chỉ định BigQuery
Để chạy các truy vấn GQL, bạn phải có một phiên bản đặt trước sử dụng phiên bản Enterprise hoặc Enterprise Plus, hãy tạo một phiên bản đặt trước Enterprise Edition có tính năng tự động mở rộng quy mô trong Cloud Shell:
# 1. Create a BigQuery Enterprise reservation with 0 baseline slots and 100 max autoscaling slots
bq mk --reservation \
--project_id=${GCP_PROJECT} \
--location=US \
--edition=ENTERPRISE \
--slots=0 \
--autoscale_max_slots=100 \
--ignore_idle_slots=true \
drug-interaction-reservation
# 2. Assign your Cloud project to the newly created reservation for query execution
bq mk --reservation_assignment \
--project_id=${GCP_PROJECT} \
--location=US \
--reservation_id=drug-interaction-reservation \
--job_type=QUERY \
--assignee_type=PROJECT \
--assignee_id=${GCP_PROJECT}
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 đây trong BigQuery Studio.
1. Tạo compounds bảng
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ị.
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 targets bảng
Chứa các mục tiêu protein, tên gen, mã nhận dạng UniProt và các 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 interactions bảng
Chứa dữ liệu ái lực liên kết mục tiêu hợp chất (mục tiêu chính so với mục tiêu ngoài).
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 pathways bảng
Chứa các con đường sinh học, các lĩnh vực 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 target_pathways bảng
Bảng kết hợp liên kết các mục tiêu với các 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 thành công các bảng, giờ đây, bạn có thể tạo biểu đồ tài sản. 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 cách sử dụng các bảng cạnh (Interactions và Target Pathways).
Chạy câu lệnh sau trong Trình chỉnh sửa 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 đồ thị đầu tiên. Đây là một phép duyệt 1 bước nhảy giúp trả lời 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 gì bạn sẽ thấy trong kết quả:

6. Câu hỏi 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 đầy hứa hẹn thất bại trong các thử nghiệm lâm sàng là độc tính đối với tim – cụ thể là sự liên kết không mong muốn với protein hERG (gen: KCNH2), một kênh ion kali điều chỉnh nhịp tim. Một cú đánh ngoài mục tiêu trên hERG có thể gây ra rối loạn nhịp tim gây tử vong và là nguyên nhân dẫn đến việc thu hồi một số loại thuốc nổi tiếng.
Câu hỏi chúng ta muốn trả lời là:
"Những hợp chất nào trong quy trình của chúng tôi 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à một câu hỏi 2 bước: chúng ta cần đi từ một Hợp chất, thông qua một Mục tiêu (hERG), đến một Con đường – kết nối 3 loại thực thể trên 2 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;
Lưu ý 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 Lộ trình" – với các bộ lọc được áp dụng ở 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 đồ
Một bảng cho chúng ta thấy dữ liệu, nhưng không cho chúng ta 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ó rủi ro cao?
Hình ảnh trực quan dạng biểu đồ sẽ giúp bạn thấy rõ điều này ngay lập tức. Chạy ô bên dưới để hiển thị cùng một quá trình duyệt qua 2 bước nhảy dưới dạng một mạng lưới 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 (các nút màu xanh dương) liên kết với protein hERG ở trung tâm, kết nối với một hoặc nhiều đường dẫn tim (các nút màu xanh lục). Danh sách hàng phẳng trong bảng giờ đây là một mạng lưới rủi ro hữu hình – các hợp chất có nhiều đường tiếp xúc sẽ ngay lập tức nổi bật hơn và được ưu tiên cao hơn để đánh giá mức độ an toàn.
Xem lý do GQL thanh lịch hơn SQL
Để thực thi cùng một truy vấn 2 bước trong SQL chuẩn, bạn cần 4 phép kết hợp 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ô tả mối quan hệ 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 chuyển hoá nhiều bước
Truy vấn ở trên xác định các hợp chất liên kết trực tiếp với protein hERG. Tuy nhiên, trong quy trình thực tế về an toàn của thuốc, đôi khi rủi ro chỉ là một bước loại bỏ: 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 (một chất chuyển hoá) sau đó liên kết hERG – một trách nhiệm mà các xét nghiệm liên kết trực tiếp có thể bỏ lỡ hoàn toàn.
Nếu biểu đồ tài sản của bạn bao gồm một bảng nút Chất chuyển hoá và một cạnh METABOLISES_INTO, bạn có thể mở rộng cùng một mẫu MATCH thành một thao tác duyệt qua 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 2 lệnh JOIN. Đây là mẫu hình giúp việc duyệt qua biểu đồ trở nên đặc biệt hữu ích cho việc phân tích tầng 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 hợp chất có mục tiêu chung
Để tìm ra 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 đích. Chúng tôi sử dụng mối 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ả:

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 chỉnh sửa 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 qua hai chiều này sẽ làm nổi bật 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 xuất phát 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 một con đường ung thư có thể tạo ra hiệu ứng hiệp lực, hoặc thay vào đó báo hiệu sự dư thừa không mong muốn trong quy trình

8. Câu hỏi 4: Phạm vi ảnh hưởng của lộ trình bệnh
Mức độ ảnh hưởng về mặt sinh học của mỗi hợp chất là bao nhiêu? Hãy thực hiện thao tác truyền qua 2 bước nhảy 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 lĩnh 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 gì 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 tác dụng phụ hERG (tim) ngoài mục tiêu. Điều này phù hợp với các mẫu lựa chọn ưu tiên sự an toàn thường gặp 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ả mà bạn sẽ thấy:

Bạn đã thực hiện thành công các thao tác duyệt qua biểu đồ 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ới 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 kiến thức
Để bắt đầu, hãy tạo một tác nhân đàm thoại theo các bước tại đây. Chọn biểu đồ bạn đã tạo trong thanh tìm kiếm.

Sử dụng tính năng Phân tích đàm thoại của BigQuery để trò chuyện với biểu đồ
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 đàm thoại.
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
- Hiện tại, tất cả các mục tiêu cho các hợp chất trong các thử nghiệm Giai đoạn 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 các khoản phí phát sinh cho tài khoản Google Cloud của bạn, hãy xoá các tài nguyên đã 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 tầng:
DROP SCHEMA IF EXISTS drug_target_graph CASCADE;
12. Xin chúc mừng
Xin chúc mừng! Bạn đã mô hình hoá và phân tích thành công một 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 mô hình hoá mối quan hệ thực thể (hợp chất, mục tiêu, đường dẫn) dưới dạng biểu đồ thuộc tính.
- Cách xác định giản đồ và tạo Biểu đồ tài sản trong BigQuery.
- Cách viết các thao tác duyệt qua biểu đồ phức tạp bằng GQL và so sánh chúng 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 đề trong lĩnh vực khoa học sự sống.