Analizowanie interakcji między lekami za pomocą grafu BigQuery

1. Wprowadzenie

W tym ćwiczeniu dowiesz się, jak używać BigQuery Graph do modelowania i analizowania sieci interakcji między lekami a celami. Wykorzystasz możliwości zapytań grafowych (GQL), aby zbadać, jak leki oddziałują na cele biologiczne, zidentyfikować potencjalne skutki uboczne (np. ryzyko kardiologiczne) i odkryć potencjalne terapie skojarzone.

🧬 Przypadek użycia – sieć interakcji lek–cel

Pytanie biznesowe: jaki jest pełny zakres działania związku – z jakimi celami się wiąże, na jakie ścieżki biologiczne wpływa i jakie obszary chorobowe są z nim powiązane?

Tabele:

Tabela

Opis

compounds

Cząsteczki leku z mechanizmem działania i etapem rozwoju

targets

Białka docelowe z nazwami genów i identyfikatorami UniProt

interactions

Powinowactwo wiązania celu złożonego (cele główne i cele poza docelowymi)

pathways

ścieżki biologiczne powiązane z obszarami chorobowymi;

target_pathways

Tabela połączeń łącząca cele ze ścieżkami, w których uczestniczą

Model grafu właściwości:

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

Schemat grafu

🔍 Przykładowe zapytania

Zapytanie

Co to znaczy

P1: Profil powiązania celu

Przejście 1-etapowe – związek do wszystkich celów głównych i niezamierzonych

Pytanie 2. Wykrywanie ryzyka kardiologicznego związanego z kanałem hERG

Przejście 2-etapowe – związek → cel hERG → ścieżka sercowa

Pytanie 3. Pary związków o wspólnym celu

Dopasowanie dwukierunkowe – 2 związki zbiegające się w tym samym węźle docelowym.

P4: Następstwa ścieżki choroby

Agregacja 2-hopowa – pełna ścieżka i obszar chorobowy dla każdego związku

P5: Wybór bezpiecznego związku

Związki o wysokim stopniu pokrycia onkologicznego, ale bez ryzyka hERG dla serca

Jakie zadania wykonasz

  • utworzyć zbiór danych i schemat BigQuery dla sieci interakcji leków,
  • Wczytaj przykładowe dane (związki, cele, interakcje, ścieżki, ścieżki docelowe)
  • Utwórz w BigQuery graf właściwości łączący te encje.
  • wykonywać zapytania dotyczące wykresu, aby zrozumieć interakcje związków, ścieżki biologiczne i promień rażenia choroby, korzystając z przechodzenia po wykresie (GRAPH_TABLE i MATCH);
  • porównać GQL i standardową wersję SQL, aby zrozumieć prostotę i możliwości składni grafu;

Czego potrzebujesz

  • przeglądarkę internetową, np. Chrome;
  • projekt Google Cloud z włączonymi rozliczeniami,

To ćwiczenie jest przeznaczone dla deweloperów na wszystkich poziomach zaawansowania, w tym dla początkujących.

2. Zanim zaczniesz

Utwórz projekt Google Cloud

  1. W konsoli Google Cloud wybierz lub utwórz projekt w chmurze Google Cloud.
  2. Sprawdź, czy w projekcie Cloud włączone są płatności.

Uruchamianie Cloud Shell

  1. Kliknij Aktywuj Cloud Shell na górze konsoli Google Cloud.
  2. Weryfikacja uwierzytelniania:
gcloud auth list
  1. Potwierdź projekt:
gcloud config get project
  1. W razie potrzeby ustaw:
export PROJECT_ID=<YOUR_PROJECT_ID>
gcloud config set project $PROJECT_ID

Włącz interfejsy API

Uruchom to polecenie, aby włączyć wymagany interfejs BigQuery API:

gcloud services enable bigquery.googleapis.com

3. Definiowanie schematu i wczytywanie danych

Najpierw musisz utworzyć zbiór danych, w którym będą przechowywane tabele związane z grafem, i wypełnić je przykładowymi danymi.

  1. Otwórz BigQuery Studio w konsoli Google Cloud.
  2. Kliknij Edytor SQL, aby otworzyć nową kartę zapytania.
  3. Aby utworzyć zbiór danych drug_target_graph, uruchom to polecenie:
CREATE SCHEMA IF NOT EXISTS drug_target_graph
OPTIONS (location = 'US');

Teraz utwórz 5 tabel źródłowych, uruchamiając te zapytania DDL w BigQuery Studio.

1. Utwórz tabelę compounds

Zawiera cząsteczki leków, ich mechanizm działania, etap rozwoju i obszar terapeutyczny.

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. Utwórz tabelę targets

Zawiera cele białkowe, nazwy genów, identyfikatory UniProt i klasy celów.

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. Utwórz tabelę interactions

Zawiera dane o powinowactwie wiązania związku z celem (główne cele i cele poza docelowymi).

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. Utwórz tabelę pathways

Zawiera ścieżki biologiczne, powiązane obszary chorobowe i znaczenie w przypadku nowotworów.

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. Utwórz tabelę target_pathways

Tabela połączeń łącząca cele ze ścieżkami biologicznymi, w których uczestniczą.

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. Tworzenie grafu właściwości

Po utworzeniu tabel możesz utworzyć wykres właściwości. Łączy węzły (związki, cele, ścieżki) za pomocą tabel krawędzi (Interactions i Target Pathways).

Uruchom w edytorze SQL BigQuery Studio tę instrukcję:

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)
);

Spowoduje to utworzenie w zbiorze danych grafu o nazwie drug_target_interaction_graph.

Schemat grafu

5. Zapytanie 1: pełny profil wiązania docelowego na związek

Uruchommy pierwsze zapytanie dotyczące wykresu. Jest to przejście 1-etapowe, które odpowiada na pytanie: Które związki wiążą się z którymi celami i jakie jest ich powinowactwo?

Zapytanie GQL

Uruchom w edytorze SQL to zapytanie:

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;

Oto co zobaczysz w wynikach:

Wynik pytania 1 na wykresie

6. Zapytanie 2. Wykrywanie ryzyka kardiologicznego

Pytanie biznesowe

W procesie odkrywania leków jedną z najczęstszych przyczyn, dla których obiecujący związek nie przechodzi badań klinicznych, jest kardiotoksyczność – w szczególności niezamierzone wiązanie się z białkiem hERG (gen: KCNH2), kanałem jonów potasowych, który reguluje rytm serca. Nieprawidłowe oddziaływanie na hERG może powodować śmiertelne arytmie i było przyczyną wycofania kilku znanych leków.

Pytanie, na które chcemy odpowiedzieć, brzmi:

„Które związki w naszym procesie mają zdarzenie wiązania poza celem na białku hERG i które ścieżki kardiologiczne są przez to zagrożone?”

To jest pytanie dwuetapowe: musimy przejść od związku chemicznego przez cel (hERG) do ścieżki, łącząc 3 typy encji w ramach 2 relacji w jednym zapytaniu.

Tworzenie zapytania GQL

Uruchom w edytorze SQL BigQuery to zapytanie:

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;

Zwróć uwagę, że klauzula MATCH brzmi prawie jak zdanie: „Znajdź związek, który wiąże się z celem uczestniczącym w ścieżce” – z filtrami zastosowanymi do każdego węzła i krawędzi na ścieżce.

Oto dane, które zobaczysz w wynikach:

Wynik tabeli Graph Q2

Wizualizacja sieci ryzyka w postaci wykresu

Tabela pokazuje dane, ale nie pokazuje struktury ryzyka. Czy wiele związków zbiega się na tej samej ścieżce? Czy jest to jeden kompleks o wysokim ryzyku czy kilka?

Wizualizacja graficzna pozwala natychmiast to zauważyć. Uruchom komórkę poniżej, aby wyrenderować ten sam 2-etapowy proces jako sieć interaktywną:

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

Powinien pojawić się taki wykres:

Wizualizacja grafu

Każda ścieżka na wykresie przedstawia pełny łańcuch odpowiedzialności: związek (niebieskie węzły) wiąże się z białkiem hERG w centrum, które łączy się z co najmniej 1 ścieżką sercową (zielone węzły). To, co wcześniej było płaską listą wierszy w tabeli, teraz jest widoczną siecią ryzyka – związki z wieloma ścieżkami narażenia natychmiast wyróżniają się jako te o wyższym priorytecie do sprawdzenia pod kątem bezpieczeństwa.

Dlaczego GQL jest bardziej elegancki niż SQL

Aby wykonać to samo zapytanie z 2 przeskokami w standardowej wersji SQL, potrzebujesz 4 jawnych złączeń. Musisz poświęcić czas i wysiłek na opisanie, jak połączyć tabele, zamiast skupić się na tym, jakiej relacji szukasz. GQL pozwala skupić się na pytaniu.

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;

Going deeper – multi-hop metabolite risk detection

Powyższe zapytanie identyfikuje związki, które bezpośrednio wiążą się z białkiem hERG. Jednak w rzeczywistych procesach związanych z bezpieczeństwem leków ryzyko jest czasem o krok dalej: związek może zostać metabolicznie przekształcony w organizmie w cząsteczkę wtórną (metabolit), która następnie wiąże hERG – jest to ryzyko, które testy bezpośredniego wiązania mogą całkowicie pominąć.

Jeśli wykres właściwości zawiera tabelę węzłów Metabolite i krawędź METABOLISES_INTO, możesz rozszerzyć ten sam wzorzec MATCH na 3-etapowe przejście:

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

Struktura zapytania GQL zmieni się o dokładnie 1 węzeł i 1 krawędź. Odpowiednik w SQL wymagałby 2 dodatkowych instrukcji JOIN. Ten wzorzec sprawia, że przechodzenie po grafie jest szczególnie skuteczne w analizie kaskady bezpieczeństwa – złożoność zapytania rośnie liniowo, podczas gdy wiedza biologiczna rośnie wykładniczo.

7. Zapytanie 3: pary związków o wspólnym celu

Aby znaleźć kandydatów do terapii skojarzonej, możemy zidentyfikować sytuacje, w których 2 różne związki wiążą się z tym samym węzłem docelowym. Używamy dopasowania dwukierunkowego, aby odpowiedzieć na pytanie: Które związki onkologiczne są ukierunkowane na dokładnie ten sam cel?

Uruchom w edytorze SQL to zapytanie:

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;

Oto dane, które zobaczysz w wynikach:

Wynik Graph Q3

Wizualizacja grafu

Graf możesz wizualizować bezpośrednio w BigQuery, uruchamiając w edytorze SQL ten kod.

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

To dwukierunkowe przechodzenie pozwala wykryć pary związków, które zbiegają się na tym samym białku docelowym – jest to wzorzec, który trudno zauważyć w płaskiej tabeli interakcji, ale który jest natychmiast widoczny na wykresie. W procesie odkrywania leków pary o wspólnym celu są punktem wyjścia do projektowania terapii skojarzonej: 2 związki, które trafiają w ten sam węzeł w ścieżce nowotworowej, mogą wywołać efekt synergiczny lub sygnalizować niezamierzoną nadmiarowość w procesie.

Wizualizacja grafu

8. Zapytanie 4. Następstwa ścieżki choroby

Jak szeroki jest wpływ biologiczny każdego związku? Wykonajmy 2-etapowe przechodzenie z agregacją, aby odpowiedzieć na pytanie: na ile ścieżek biologicznych i odrębnych celów wpływa każdy związek, z podziałem na obszary chorobowe?

Uruchom w edytorze SQL to zapytanie:

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;

Oto co zobaczysz w wynikach:

Wynik wykresu Q4

9. Zapytanie 5. Bezpieczny wybór związku

Na koniec wyszukajmy związki, które mają wysokie pokrycie onkologiczne, ale wyraźnie unikają niepożądanych skutków hERG (sercowych). Odpowiada to powszechnym wzorcom wyboru, które kładą nacisk na bezpieczeństwo, w procesach odkrywania leków.

Uruchom w edytorze SQL to zapytanie:

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;

Oto dane wyjściowe, które zobaczysz w wynikach:

Graph Q5 Result

Udało Ci się wykonać zaawansowane przechodzenie grafu w BigQuery, aby wyodrębnić kluczowe profile bezpieczeństwa i skuteczności.

10. Sekcja bonusowa: czat z wykresem

Analityka konwersacyjna BigQuery obsługuje teraz graf jako źródło wiedzy. Dzięki temu możesz rozmawiać z utworzonym wykresem w języku naturalnym.

Pierwsze kroki: dodawanie wykresu jako źródła wiedzy

Aby rozpocząć, utwórz agenta konwersacyjnego, wykonując czynności opisane tutaj. Na pasku wyszukiwania wybierz utworzony wykres.

Konfiguracja analityki konwersacyjnej grafu

Używanie analityki konwersacyjnej BigQuery do czatowania z wykresem

Po dodaniu źródła wiedzy jako grafu dokończ konfigurację agenta analityki konwersacyjnej.

Możesz zacząć rozmawiać z wykresem w języku naturalnym.

Czatuj z wykresem.

Pytania dodatkowe

  1. Jakie są wszystkie cele związków chemicznych, które są obecnie w fazie 2 badań?
  2. Które cele są wspólne dla związków stosowanych w leczeniu chorób układu krążenia i nowotworów?

11. Czyszczenie danych

Aby uniknąć bieżących opłat na koncie Google Cloud, usuń zasoby utworzone podczas tego ćwiczenia.

Uruchom poniższe zapytanie, aby usunąć schemat i wszystkie tabele kaskadowo:

DROP SCHEMA IF EXISTS drug_target_graph CASCADE;

12. Gratulacje

Gratulacje! Udało Ci się utworzyć model i przeanalizować sieć interakcji między lekami a celami za pomocą BigQuery Graph.

Czego się nauczysz

  • Jak modelować relacje między elementami (związki, cele, ścieżki) jako graf właściwości.
  • jak zdefiniować schemat i utworzyć graf właściwości w BigQuery;
  • jak pisać złożone zapytania do grafów za pomocą GQL i porównywać je z tradycyjnym SQL;
  • Jak wykorzystać GRAPH_TABLE, MATCH i dopasowanie dwukierunkowe do rozwiązywania problemów w dziedzinie nauk przyrodniczych.

Dokumentacja referencyjna