1. Introdução
Neste codelab, você vai aprender a usar o BigQuery Graph para modelar e analisar uma rede de interação entre medicamentos e alvos. Você vai aproveitar o poder das consultas de gráficos (GQL) para descobrir como os medicamentos interagem com alvos biológicos, identificar possíveis efeitos colaterais (como riscos cardíacos) e descobrir possíveis terapias combinadas.
🧬 Caso de uso: rede de interação entre medicamentos e alvos
Pergunta de negócios:qual é o raio de impacto completo de um composto? A quais alvos ele se liga, quais vias biológicas são afetadas e quais áreas de doenças estão implicadas?
Tabelas :
Tabela | Descrição |
| Moléculas de medicamentos com mecanismo de ação e estágio de desenvolvimento |
| Alvos de proteínas com nomes de genes e IDs UniProt |
| Afinidade de ligação de composto-alvo (alvos principais + alvos secundários) |
| Vias biológicas com associações de áreas de doenças |
| Tabela de junção que vincula alvos às vias em que eles participam |
Modelo de gráfico de propriedades :
(Compound)-[BINDS_TO {affinity_nm, ic50_nm, interaction_type}]->(Target)
(Target)-[PARTICIPATES_IN {role, importance_score}]->(Pathway)

🔍 Consultas de demonstração
Consulta | O que ela mostra |
Q1: perfil de ligação de destino | Travessia de 1 salto: composto para todos os alvos principais e secundários |
Q2: detecção de risco cardíaco hERG | Travessia de 2 saltos: composto → alvo hERG → via cardíaca |
Q3: pares de compostos de destino compartilhado | Correspondência bidirecional: dois compostos convergindo no mesmo nó de destino |
Q4: raio de explosão da via de doenças | Agregação de 2 saltos: cobertura completa da via e da área de doenças por composto |
Q5: seleção de compostos seguros | Compostos com alta cobertura oncológica, mas sem responsabilidade cardíaca hERG |
Atividades deste laboratório
- Criar um conjunto de dados e um esquema do BigQuery para a rede de interação de medicamentos
- Carregar dados de amostra (compostos, alvos, interações, vias, vias de destino)
- Criar um gráfico de propriedades no BigQuery conectando essas entidades
- Consultar o gráfico para entender as interações de compostos, as vias biológicas e o raio de explosão de doenças usando travessias de gráficos (
GRAPH_TABLEeMATCH) - Comparar GQL e SQL padrão lado a lado para entender a simplicidade e o poder expressivo da sintaxe de gráficos
O que é necessário
- Um navegador da web, como o Chrome
- Tenha um projeto na nuvem do Google Cloud com o faturamento ativado.
Este codelab é destinado a desenvolvedores de todos os níveis, incluindo iniciantes.
2. Antes de começar
Criar um projeto do Google Cloud
- No Console do Google Cloud, selecione ou crie um projeto na nuvem do Google Cloud.
- Verifique se o faturamento está ativado para seu projeto na nuvem.
Iniciar o Cloud Shell
- Clique em Ativar o Cloud Shell na parte de cima do console do Google Cloud.
- Verificar a autenticação:
gcloud auth list
- Confirmar seu projeto:
gcloud config get project
- Defina, se necessário:
export PROJECT_ID=<YOUR_PROJECT_ID>
gcloud config set project $PROJECT_ID
Ativar APIs
Execute este comando para ativar a API BigQuery necessária:
gcloud services enable bigquery.googleapis.com
3. Definir o esquema e carregar dados
Primeiro, você precisa criar um conjunto de dados para armazenar as tabelas relacionadas ao gráfico e preenchê-las com dados de amostra.
- Acesse o BigQuery Studio no console do Google Cloud.
- Clique no Editor SQL para abrir uma nova guia de consulta.
- Execute a seguinte instrução para criar o conjunto de dados
drug_target_graph:
CREATE SCHEMA IF NOT EXISTS drug_target_graph
OPTIONS (location = 'US');
Agora, crie as cinco tabelas de origem executando as seguintes consultas DDL no BigQuery Studio.
1. Criar tabela compounds
Contém moléculas de medicamentos, mecanismo de ação, estágio de desenvolvimento e área terapêutica.
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. Criar tabela targets
Contém alvos de proteínas, nomes de genes, IDs UniProt e classes de destino.
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. Criar tabela interactions
Contém dados de afinidade de ligação de composto-alvo (alvos principais x alvos secundários).
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. Criar tabela pathways
Contém vias biológicas, áreas de doenças associadas e relevância do câncer.
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. Criar tabela target_pathways
Uma tabela de junção que vincula alvos às vias biológicas em que eles participam.
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. Criar o gráfico de propriedades
Com as tabelas criadas, agora você pode construir o gráfico de propriedades. Isso vincula nós (compostos, alvos, vias) usando tabelas de arestas (Interactions e Target Pathways).
Execute a seguinte instrução no editor SQL do 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)
);
Isso cria um gráfico chamado drug_target_interaction_graph no conjunto de dados.

5. Consulta 1: perfil completo de ligação de destino por composto
Vamos executar nossa primeira consulta de gráfico. Esta é uma travessia de 1 salto que responde a: Quais compostos se ligam a quais alvos e qual é a afinidade deles?
Consulta GQL
Execute a seguinte consulta no 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;
Confira o que vai aparecer nos resultados:

6. Consulta 2: detecção de risco cardíaco
A pergunta de negócios
Na descoberta de medicamentos, um dos motivos mais comuns para um composto promissor falhar em ensaios clínicos é a cardiotoxicidade , especificamente, a ligação não intencional à proteína hERG (gene: KCNH2), um canal de íons de potássio que regula o ritmo cardíaco. Um acerto fora do alvo no hERG pode causar arritmias fatais e foi responsável por várias retiradas de medicamentos de alto nível.
A pergunta que queremos responder é:
"Quais compostos no nosso pipeline têm um evento de ligação fora do alvo na proteína hERG e quais vias cardíacas isso coloca em risco?"
Esta é uma pergunta de 2 saltos: precisamos atravessar de um composto, por um alvo (hERG), para uma via, conectando três tipos de entidades em duas relações em uma única consulta.
Escrever a consulta GQL
Execute a seguinte consulta no editor SQL do 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;
Observe como a cláusula MATCH é lida quase como uma frase: "Encontre um composto que se ligue a um alvo que participe de um Programa de treinamentos" , com os filtros aplicados em cada nó e aresta ao longo do caminho.
Confira os dados que vão aparecer nos resultados:

Visualizar a rede de risco como um gráfico
Uma tabela mostra os dados, mas não a estrutura do risco. Vários compostos estão convergindo na mesma via? Há um ou vários compostos de alto risco?
Uma visualização de gráfico torna isso imediatamente visível. Execute a célula abaixo para renderizar a mesma travessia de 2 saltos como uma rede interativa:
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
Você verá um gráfico como este:

Cada caminho no gráfico rastreia uma cadeia de responsabilidade completa: um composto (nós azuis) se liga à proteína hERG no centro, que se conecta a uma ou mais vias cardíacas (nós verdes). O que era uma lista simples de linhas na tabela agora é uma rede de risco visível. Os compostos com várias exposições de vias se destacam imediatamente como prioridade maior para revisão de segurança.
Confira por que o GQL é mais elegante que o SQL
Para executar a mesma consulta de 2 saltos no SQL padrão, você precisa de quatro junções explícitas. Você está gastando esforço cognitivo descrevendo como unir tabelas em vez de qual relação está procurando. O GQL permite que você se concentre na pergunta.
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;
Aprofundamento: detecção de risco de metabólito de vários saltos
A consulta acima identifica compostos que se ligam diretamente à proteína hERG. No entanto, em fluxos de trabalho de segurança de medicamentos reais, o risco às vezes é uma etapa removida: um composto pode ser convertido metabolicamente no corpo em uma molécula secundária (um metabólito) que se liga ao hERG, uma responsabilidade que os ensaios de ligação direta podem perder completamente.
Se o gráfico de propriedades incluísse uma tabela de nós de metabólito e uma aresta METABOLISES_INTO, você poderia estender o mesmo padrão MATCH para uma travessia de 3 saltos:
(Compound)-[METABOLISES_INTO]->(Metabolite)-[BINDS_TO]->
(Target)-[PARTICIPATES_IN]->(Pathway)
A estrutura de consulta GQL mudaria exatamente um nó e uma aresta. O SQL equivalente exigiria duas junções adicionais. Esse é o padrão que torna a travessia de gráficos particularmente poderosa para a análise de cascata de segurança. A complexidade da consulta cresce linearmente, enquanto o insight biológico cresce exponencialmente.
7. Consulta 3: pares de compostos de destino compartilhado
Para encontrar candidatos para terapia combinada, podemos identificar quando dois compostos diferentes se ligam ao mesmo nó de destino. Usamos uma correspondência bidirecional para responder: Quais compostos oncológicos convergem no mesmo destino?
Execute a seguinte consulta no 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;
Confira os dados que vão aparecer nos resultados:

Visualização de gráfico
Você pode visualizar o gráfico diretamente no BigQuery executando o código a seguir no 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
Essa travessia bidirecional mostra pares de compostos que convergem no mesmo alvo de proteína, um padrão difícil de detectar em uma tabela de interações simples, mas imediatamente visível como um gráfico. Na descoberta de medicamentos, os pares de destino compartilhado são o ponto de partida para o design de terapia combinada: dois compostos que atingem o mesmo nó em uma via de câncer podem produzir um efeito sinérgico ou, alternativamente, sinalizar uma redundância não intencional no pipeline.

8. Consulta 4: raio de explosão da via de doenças
Qual é o impacto biológico de cada composto? Vamos realizar uma travessia de 2 saltos com agregação para responder: Quantas vias biológicas e alvos distintos cada composto afeta, agrupados por área de doenças?
Execute a seguinte consulta no 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;
Confira o que vai aparecer nos resultados:

9. Consulta 5: seleção de compostos seguros
Por fim, vamos consultar compostos que têm alta cobertura oncológica, mas evitam explicitamente responsabilidades fora do alvo hERG (cardíaco). Isso corresponde a padrões comuns de seleção de segurança em pipelines de descoberta de medicamentos.
Execute a seguinte consulta no 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;
Confira a saída que vai aparecer nos resultados:

Você executou travessias de gráficos avançadas no BigQuery para extrair perfis de segurança e eficácia importantes.
10. Seção bônus: conversar com o gráfico
O BigQuery Conversational Analytics agora oferece suporte a gráficos como uma fonte de conhecimento. Isso permite que você converse com o gráfico que acabou de criar em linguagem natural.
Introdução: adicionar um gráfico como fonte de conhecimento
Para começar, crie um agente de conversação seguindo as etapas aqui. Selecione o gráfico criado na barra de pesquisa.

Usar o BigQuery Conversational Analytics para conversar com o gráfico
Depois de adicionar a fonte de conhecimento como gráfico, conclua o restante da configuração do agente de análise de conversação .
Em seguida, você pode começar a conversar com o gráfico em linguagem natural.

Outras perguntas
- Quais são todos os alvos para compostos atualmente em ensaios de fase 2?
- Quais alvos são compartilhados entre compostos cardiovasculares e oncológicos?
11. Limpar
Para evitar cobranças contínuas na sua conta do Google Cloud, exclua os recursos criados durante este codelab.
Execute a consulta a seguir para remover o esquema e todas as tabelas em cascata:
DROP SCHEMA IF EXISTS drug_target_graph CASCADE;
12. Parabéns
Parabéns! Você modelou e analisou uma rede de interação entre medicamentos e alvos usando o BigQuery Graph.
O que você aprendeu
- Como modelar relações de entidades (compostos, alvos, vias) como um gráfico de propriedades.
- Como definir o esquema e criar um gráfico de propriedades no BigQuery.
- Como escrever travessias de gráficos complexas usando GQL e compará-las ao SQL tradicional.
- Como aproveitar
GRAPH_TABLE,MATCHe correspondência bidirecional para resolver problemas de domínio de ciências da vida.