Menganalisis Interaksi Obat dengan BigQuery Graph

1. Pengantar

Dalam codelab ini, Anda akan mempelajari cara menggunakan BigQuery Graph untuk memodelkan dan menganalisis jaringan interaksi obat-target. Anda akan memanfaatkan kemampuan kueri grafik (GQL) untuk mempelajari interaksi obat dengan target biologis, mengidentifikasi potensi efek samping (seperti risiko jantung), dan menemukan potensi terapi kombinasi.

🧬 Kasus Penggunaan — Jaringan Interaksi Obat-Target

Pertanyaan terkait bisnis: Berapa potensi dampak kerusakan lengkap suatu senyawa — target mana yang terikat, jalur biologis mana yang terpengaruh, dan area penyakit mana yang terlibat?

Tabel:

Tabel

Deskripsi

compounds

Molekul obat dengan mekanisme tindakan dan tahap pengembangan

targets

Target protein dengan nama gen dan ID UniProt

interactions

Afinitas pengikatan senyawa-target (target utama + target di luar target)

pathways

Jalur biologis dengan asosiasi area penyakit

target_pathways

Tabel persimpangan yang menautkan target ke jalur yang diikuti

Model grafik properti:

(Compound)-[BINDS_TO {affinity_nm, ic50_nm, interaction_type}]->(Target)
(Target)-[PARTICIPATES_IN {role, importance_score}]->(Pathway)

Skema Grafik

🔍 Kueri Demo

Kueri

Informasi yang ditampilkan

Q1: Profil pengikatan target

Traversal 1 hop — senyawa ke semua target utama dan target di luar target

Q2: Deteksi risiko jantung hERG

Traversal 2 hop — senyawa → target hERG → jalur jantung

Q3: Pasangan senyawa target bersama

Pencocokan dua arah — dua senyawa yang bertemu di node target yang sama

Q4: Radius ledakan jalur penyakit

Agregasi 2 hop — cakupan jalur dan area penyakit lengkap per senyawa

Q5: Pemilihan senyawa yang aman

Senyawa dengan cakupan onkologi tinggi, tetapi tidak memiliki kewajiban jantung hERG

Yang akan Anda lakukan

  • Membuat set data dan skema BigQuery untuk jaringan interaksi obat
  • Memuat data sampel (Senyawa, Target, Interaksi, Jalur, Jalur Target)
  • Membuat Grafik Properti di BigQuery yang menghubungkan entity ini
  • Mengkueri grafik untuk memahami interaksi senyawa, jalur biologis, dan potensi dampak kerusakan penyakit menggunakan traversal grafik (GRAPH_TABLE dan MATCH)
  • Membandingkan GQL dan SQL standar secara berdampingan untuk memahami kesederhanaan dan kemampuan ekspresif sintaksis grafik

Yang akan Anda butuhkan

  • Browser web seperti Chrome
  • Project Google Cloud yang mengaktifkan penagihan

Codelab ini ditujukan bagi developer dari semua level, termasuk para pemula.

2. Sebelum memulai

Membuat Project Google Cloud

  1. Di Konsol Google Cloud, pilih atau buat project Google Cloud.
  2. Pastikan penagihan diaktifkan untuk project Cloud Anda.

Mulai Cloud Shell

  1. Klik Activate Cloud Shell di bagian atas konsol Google Cloud.
  2. Verifikasi autentikasi:
gcloud auth list
  1. Konfirmasi project Anda:
gcloud config get project
  1. Tetapkan jika diperlukan:
export PROJECT_ID=<YOUR_PROJECT_ID>
gcloud config set project $PROJECT_ID

Mengaktifkan API

Jalankan perintah ini untuk mengaktifkan BigQuery API yang diperlukan:

gcloud services enable bigquery.googleapis.com \
  bigqueryreservation.googleapis.com 

Membuat Pemesanan &Tugas BigQuery

Untuk menjalankan kueri GQL, Anda harus memiliki pemesanan yang menggunakan edisi Enterprise atau Enterprise Plus. Buat pemesanan Edisi Enterprise dengan penskalaan otomatis di 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. Menentukan Skema dan Memuat Data

Pertama, Anda harus membuat set data untuk menyimpan tabel terkait grafik dan mengisinya dengan data sampel.

  1. Buka BigQuery Studio di Konsol Google Cloud.
  2. Klik SQL Editor untuk membuka tab kueri baru.
  3. Jalankan pernyataan berikut untuk membuat set data drug_target_graph:
CREATE SCHEMA IF NOT EXISTS drug_target_graph
OPTIONS (location = 'US');

Sekarang, buat 5 tabel sumber dengan menjalankan kueri DDL berikut di BigQuery Studio.

1. Membuat Tabel compounds

Berisi molekul obat, mekanisme tindakannya, tahap pengembangan, dan area terapi.

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. Membuat Tabel targets

Berisi target protein, nama gen, ID UniProt, dan class target.

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. Membuat Tabel interactions

Berisi data afinitas pengikatan senyawa-target (target utama vs target di luar target).

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. Membuat Tabel pathways

Berisi jalur biologis, area penyakit terkait, dan relevansi kanker.

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. Membuat Tabel target_pathways

Tabel persimpangan yang menautkan target ke jalur biologis yang diikuti.

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. Membuat Grafik Properti

Setelah tabel berhasil dibuat, Anda kini dapat membuat grafik properti. Tindakan ini menautkan node (Senyawa, Target, Jalur) menggunakan tabel edge (Interactions dan Target Pathways).

Jalankan pernyataan berikut di Editor SQL 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)
);

Tindakan ini akan membuat grafik bernama drug_target_interaction_graph di set data Anda.

Skema Grafik

5. Kueri 1: Profil Pengikatan Target Lengkap per Senyawa

Mari kita jalankan kueri grafik pertama. Ini adalah traversal 1 hop yang menjawab pertanyaan: Senyawa mana yang terikat ke target mana, dan berapa afinitasnya?

Kueri GQL

Jalankan kueri berikut di Editor 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;

Berikut adalah hasil yang akan Anda lihat:

Grafik Hasil Kuartal 1

6. Kueri 2: Deteksi Risiko Jantung

Pertanyaan Terkait Bisnis

Dalam penemuan obat, salah satu alasan paling umum mengapa senyawa yang menjanjikan gagal dalam uji klinis adalah kardiotoksisitas — khususnya, pengikatan yang tidak disengaja ke protein hERG (gen: KCNH2), saluran ion kalium yang mengatur ritme jantung. Hit di luar target pada hERG dapat menyebabkan aritmia fatal, dan telah menyebabkan beberapa penarikan obat yang sangat terkenal.

Pertanyaan yang ingin kita jawab adalah:

"Senyawa mana dalam pipeline kita yang memiliki peristiwa pengikatan di luar target pada protein hERG — dan jalur jantung mana yang berisiko?"

Ini adalah pertanyaan 2 hop: kita perlu melakukan traversal dari Senyawa, melalui Target (hERG), ke Jalur — menghubungkan tiga jenis entity di dua hubungan dalam satu kueri.

Menulis Kueri GQL

Jalankan kueri berikut di Editor SQL 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;

Perhatikan bagaimana klausa MATCH dibaca hampir seperti kalimat: "Temukan Senyawa yang terikat ke Target yang berpartisipasi dalam Jalur" — dengan filter yang diterapkan di setiap node dan edge di sepanjang jalur.

Berikut adalah data yang akan Anda lihat di hasil:

Hasil Tabel Grafik Q2

Memvisualisasikan Jaringan Risiko sebagai Grafik

Tabel menampilkan data — tetapi tidak menampilkan struktur risiko. Apakah beberapa senyawa bertemu di jalur yang sama? Apakah ada satu senyawa berisiko tinggi atau beberapa?

Visualisasi grafik membuatnya langsung terlihat. Jalankan sel di bawah untuk merender traversal 2 hop yang sama sebagai jaringan interaktif:

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

Anda akan melihat grafik seperti ini:

Visualisasi Grafik

Setiap jalur dalam grafik melacak rantai kewajiban lengkap: senyawa (node biru) terikat ke protein hERG di tengah, yang terhubung ke satu atau beberapa jalur jantung (node hijau). Yang sebelumnya merupakan daftar baris datar dalam tabel kini menjadi jaringan risiko yang terlihat — senyawa dengan beberapa eksposur jalur langsung menonjol sebagai prioritas yang lebih tinggi untuk peninjauan keamanan.

Lihat Mengapa GQL Lebih Elegan Daripada SQL

Untuk menjalankan kueri 2 hop yang sama dalam SQL standar, Anda memerlukan 4 gabungan eksplisit. Anda menghabiskan upaya kognitif untuk menjelaskan cara menggabungkan tabel, bukan hubungan yang Anda cari. GQL memungkinkan Anda tetap fokus pada pertanyaan.

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;

Menganalisis lebih dalam — deteksi risiko metabolit multi-hop

Kueri di atas mengidentifikasi senyawa yang secara langsung mengikat protein hERG. Namun, dalam alur kerja keamanan obat yang sebenarnya, risiko terkadang satu langkah lebih jauh: senyawa dapat diubah secara metabolisme dalam tubuh menjadi molekul sekunder (metabolit) yang kemudian mengikat hERG — kewajiban yang mungkin tidak terdeteksi oleh pengujian pengikatan langsung.

Jika grafik properti Anda menyertakan tabel node Metabolit dan edge METABOLISES_INTO, Anda dapat memperluas pola MATCH yang sama ke traversal 3 hop:

(Compound)-[METABOLISES_INTO]->(Metabolite)-[BINDS_TO]->
(Target)-[PARTICIPATES_IN]->(Pathway)

Struktur kueri GQL akan berubah tepat satu node dan satu edge. SQL yang setara akan memerlukan dua JOIN tambahan. Pola inilah yang membuat traversal grafik sangat efektif untuk analisis kaskade keamanan — kompleksitas kueri tumbuh secara linear, sedangkan insight biologis tumbuh secara eksponensial.

7. Kueri 3: Pasangan Senyawa Target Bersama

Untuk menemukan kandidat terapi kombinasi, kita dapat mengidentifikasi kapan dua senyawa berbeda terikat ke node target yang sama. Kita menggunakan pencocokan dua arah untuk menjawab pertanyaan: Senyawa onkologi mana yang bertemu di target yang sama persis?

Jalankan kueri berikut di Editor 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;

Berikut adalah data yang akan Anda lihat di hasil:

Grafik Hasil K3

Visualisasi Grafik

Anda dapat memvisualisasikan Grafik langsung di BigQuery dengan menjalankan kode berikut di editor 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

Traversal dua arah ini menampilkan pasangan senyawa yang bertemu di target protein yang sama — pola yang sulit ditemukan dalam tabel interaksi datar, tetapi langsung terlihat sebagai grafik. Dalam penemuan obat, pasangan target bersama adalah titik awal untuk desain terapi kombinasi: dua senyawa yang mencapai node yang sama dalam jalur kanker dapat menghasilkan efek sinergis, atau menandakan redundansi yang tidak disengaja dalam pipeline

Visualisasi Grafik

8. Kueri 4: Radius Ledakan Jalur Penyakit

Seberapa luas dampak biologis setiap senyawa? Mari kita lakukan traversal 2 hop dengan agregasi untuk menjawab pertanyaan: Berapa banyak jalur biologis dan target berbeda yang dipengaruhi setiap senyawa, yang dikelompokkan berdasarkan area penyakit?

Jalankan kueri berikut di Editor 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;

Berikut adalah hasil yang akan Anda lihat:

Grafik Hasil Q4

9. Kueri 5: Pemilihan Senyawa yang Aman

Terakhir, mari kita kueri senyawa yang memiliki cakupan onkologi tinggi, tetapi secara eksplisit menghindari kewajiban di luar target hERG (jantung). Hal ini cocok dengan pola pemilihan yang mengutamakan keamanan dalam pipeline penemuan obat.

Jalankan kueri berikut di Editor 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;

Berikut adalah output yang akan Anda lihat di hasil:

Grafik Hasil Q5

Anda telah berhasil menjalankan traversal grafik lanjutan di BigQuery untuk mengekstrak profil keamanan dan efikasi utama.

10. Bagian Bonus: Melakukan percakapan dengan grafik

BigQuery Conversational Analytics kini mendukung grafik sebagai sumber pengetahuan. Hal ini memungkinkan Anda melakukan percakapan dengan grafik yang baru saja dibuat dalam bahasa alami.

Memulai: Menambahkan grafik sebagai sumber pengetahuan

Untuk memulai, buat agen percakapan dengan mengikuti langkah-langkah di sini. Pilih grafik yang Anda buat dari kotak penelusuran.

Menyiapkan Analisis Percakapan Grafik

Menggunakan BigQuery Conversational Analytics untuk melakukan percakapan dengan grafik

Setelah menambahkan sumber pengetahuan sebagai grafik, selesaikan penyiapan agen analisis percakapan lainnya.

Kemudian, Anda dapat mulai melakukan percakapan dengan grafik dalam bahasa alami.

Mulai percakapan dengan grafik Anda.

Pertanyaan tambahan

  1. Apa saja target untuk senyawa yang saat ini dalam uji coba Fase 2?
  2. Target mana yang digunakan bersama antara senyawa kardiovaskular dan onkologi?

11. Pembersihan

Untuk menghindari biaya berkelanjutan ke akun Google Cloud Anda, hapus resource yang dibuat selama codelab ini.

Jalankan kueri berikut untuk menghapus skema dan semua tabel secara bertingkat:

DROP SCHEMA IF EXISTS drug_target_graph CASCADE;

12. Selamat

Selamat! Anda telah berhasil memodelkan dan menganalisis jaringan interaksi obat-target menggunakan BigQuery Graph.

Yang telah Anda pelajari

  • Cara memodelkan hubungan entity (senyawa, target, jalur) sebagai grafik properti.
  • Cara menentukan skema dan membuat Grafik Properti di BigQuery.
  • Cara menulis traversal grafik yang kompleks menggunakan GQL dan membandingkannya dengan SQL tradisional.
  • Cara memanfaatkan GRAPH_TABLE, MATCH, dan pencocokan dua arah untuk memecahkan masalah domain ilmu pengetahuan.

Dokumen referensi