১. ভূমিকা
এই কোডল্যাবে, আপনি শিখবেন কীভাবে BigQuery Graph ব্যবহার করে একটি ড্রাগ-টার্গেট ইন্টারঅ্যাকশন নেটওয়ার্ক মডেল ও বিশ্লেষণ করতে হয়। আপনি গ্রাফ কোয়েরি (GQL)-এর শক্তিকে কাজে লাগিয়ে জানবেন কীভাবে ওষুধ জৈবিক টার্গেটের সাথে মিথস্ক্রিয়া করে, সম্ভাব্য পার্শ্বপ্রতিক্রিয়া (যেমন হৃদরোগের ঝুঁকি) শনাক্ত করবেন এবং সম্ভাব্য কম্বিনেশন থেরাপি খুঁজে বের করবেন।
🧬 ব্যবহারের ক্ষেত্র — ড্রাগ-টার্গেট ইন্টারঅ্যাকশন নেটওয়ার্ক
ব্যবসায়িক প্রশ্ন: একটি যৌগের পূর্ণাঙ্গ প্রভাবের পরিধি কী — এটি কোন কোন লক্ষ্যবস্তুর সাথে আবদ্ধ হয়, কোন কোন জৈবিক পথ প্রভাবিত হয় এবং কোন কোন রোগের ক্ষেত্র এতে জড়িত থাকে?
টেবিল:
টেবিল | বর্ণনা |
| ওষুধের অণুসমূহ তাদের কার্যপ্রণালী এবং বিকাশের পর্যায় |
| জিনের নাম এবং ইউনিপ্রোট আইডি সহ প্রোটিন টার্গেট |
| যৌগ-লক্ষ্যবস্তু বন্ধন আসক্তি (প্রাথমিক লক্ষ্যবস্তু + অনাকাঙ্ক্ষিত লক্ষ্যবস্তু) |
| রোগের ক্ষেত্র সম্পর্কিত জৈবিক পথ |
| লক্ষ্যগুলোকে তাদের অংশগ্রহণ করা পথগুলোর সাথে যুক্তকারী সংযোগ সারণী। |
সম্পত্তি গ্রাফ মডেল:
(Compound)-[BINDS_TO {affinity_nm, ic50_nm, interaction_type}]->(Target)
(Target)-[PARTICIPATES_IN {role, importance_score}]->(Pathway)

🔍 ডেমো কোয়েরি
প্রশ্ন | এটি যা দেখায় |
প্রশ্ন ১: লক্ষ্যবস্তুর বন্ধন প্রোফাইল | এক-ধাপে অতিক্রম — সকল প্রাথমিক ও অনাকাঙ্ক্ষিত লক্ষ্যে যৌগটির গমন |
প্রশ্ন ২: hERG কার্ডিয়াক ঝুঁকি সনাক্তকরণ | ২-ধাপের অতিক্রমণ — যৌগ → hERG লক্ষ্যবস্তু → কার্ডিয়াক পথ |
প্রশ্ন ৩: অভিন্ন-লক্ষ্য যৌগ জোড়া | দ্বিমুখী মিল — দুটি যৌগ একই লক্ষ্য নোডের দিকে অভিসারী হচ্ছে |
প্রশ্ন ৪: রোগের পথ বিস্ফোরণ ব্যাসার্ধ | ২-ধাপের একত্রীকরণ — প্রতিটি যৌগের জন্য সম্পূর্ণ পথ এবং রোগের ক্ষেত্র কভারেজ |
প্রশ্ন ৫: নিরাপদ যৌগ নির্বাচন | উচ্চ অনকোলজি কভারেজযুক্ত কিন্তু hERG কার্ডিয়াক দায়বদ্ধতা নেই এমন যৌগ |
আপনি যা করবেন
- ওষুধের মিথস্ক্রিয়া নেটওয়ার্কের জন্য একটি BigQuery ডেটাসেট এবং স্কিমা তৈরি করুন।
- নমুনা ডেটা লোড করুন (যৌগ, লক্ষ্যবস্তু, মিথস্ক্রিয়া, পথ, লক্ষ্যবস্তুর পথ)
- BigQuery-তে এই সত্তাগুলোকে সংযুক্ত করে একটি প্রপার্টি গ্রাফ তৈরি করুন
- গ্রাফ ট্রাভার্সাল (
GRAPH_TABLEএবংMATCH) ব্যবহার করে যৌগিক মিথস্ক্রিয়া, জৈবিক পথ এবং রোগের বিস্তার ব্যাসার্ধ বোঝার জন্য গ্রাফটি কোয়েরি করুন। - গ্রাফ সিনট্যাক্সের সরলতা এবং প্রকাশক্ষমতা বোঝার জন্য GQL এবং স্ট্যান্ডার্ড SQL-কে পাশাপাশি তুলনা করুন।
আপনার যা যা লাগবে
- ক্রোমের মতো একটি ওয়েব ব্রাউজার
- বিলিং সক্ষম একটি গুগল ক্লাউড প্রজেক্ট
এই কোডল্যাবটি নতুনদের সহ সকল স্তরের ডেভেলপারদের জন্য।
২. শুরু করার আগে
একটি গুগল ক্লাউড প্রজেক্ট তৈরি করুন
- গুগল ক্লাউড কনসোলে , একটি গুগল ক্লাউড প্রজেক্ট নির্বাচন করুন বা তৈরি করুন।
- আপনার ক্লাউড প্রজেক্টের জন্য বিলিং চালু আছে কিনা তা নিশ্চিত করুন।
ক্লাউড শেল শুরু করুন
- Google Cloud কনসোলের শীর্ষে থাকা Activate Cloud Shell-এ ক্লিক করুন।
- প্রমাণীকরণ যাচাই করুন:
gcloud auth list
- আপনার প্রকল্পটি নিশ্চিত করুন:
gcloud config get project
- প্রয়োজনে সেট করুন:
export PROJECT_ID=<YOUR_PROJECT_ID>
gcloud config set project $PROJECT_ID
এপিআই সক্ষম করুন
প্রয়োজনীয় BigQuery API সক্রিয় করতে এই কমান্ডটি চালান:
gcloud services enable bigquery.googleapis.com
৩. স্কিমা নির্ধারণ করুন এবং ডেটা লোড করুন
প্রথমে, আপনার গ্রাফ-সম্পর্কিত টেবিলগুলো সংরক্ষণের জন্য একটি ডেটাসেট তৈরি করতে হবে এবং সেগুলোতে নমুনা ডেটা যোগ করতে হবে।
- গুগল ক্লাউড কনসোলে BigQuery Studio- তে যান।
- নতুন কোয়েরি ট্যাব খুলতে SQL Editor- এ ক্লিক করুন।
-
drug_target_graphডেটাসেটটি তৈরি করতে নিম্নলিখিত স্টেটমেন্টটি চালান:
CREATE SCHEMA IF NOT EXISTS drug_target_graph
OPTIONS (location = 'US');
এখন, BigQuery Studio-তে নিম্নলিখিত DDL কোয়েরিগুলো চালিয়ে ৫টি সোর্স টেবিল তৈরি করুন।
১. compounds সারণী তৈরি করুন
এতে ওষুধের অণু, তাদের কার্যপ্রণালী, বিকাশের পর্যায় এবং চিকিৎসার ক্ষেত্র অন্তর্ভুক্ত রয়েছে।
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;
২. targets সারণী তৈরি করুন
এতে প্রোটিন টার্গেট, জিনের নাম, ইউনিপ্রোট আইডি এবং টার্গেট ক্লাস অন্তর্ভুক্ত রয়েছে।
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;
৩. interactions সারণী তৈরি করুন
যৌগ-লক্ষ্যবস্তু বন্ধন আসক্তির তথ্য ধারণ করে (প্রাথমিক লক্ষ্যবস্তু বনাম অনাকাঙ্ক্ষিত লক্ষ্যবস্তু)।
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;
৪. pathways সারণী তৈরি করুন
এতে জৈবিক পথ, সংশ্লিষ্ট রোগের ক্ষেত্র এবং ক্যান্সারের সাথে প্রাসঙ্গিকতা অন্তর্ভুক্ত রয়েছে।
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';
৫. target_pathways টেবিল তৈরি করুন
একটি সংযোগ সারণী যা লক্ষ্যবস্তুগুলোকে তাদের অংশগ্রহণ করা জৈবিক পথগুলোর সাথে যুক্ত করে।
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;
৪. প্রপার্টি গ্রাফ তৈরি করুন
টেবিলগুলো সফলভাবে তৈরি হয়ে গেলে, আপনি এখন প্রপার্টি গ্রাফ তৈরি করতে পারেন। এটি এজ টেবিল ( Interactions এবং Target Pathways ) ব্যবহার করে নোডগুলোকে (কম্পাউন্ড, টার্গেট, পাথওয়ে) সংযুক্ত করে।
BigQuery Studio SQL Editor-এ নিম্নলিখিত স্টেটমেন্টটি চালান:
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)
);
এটি আপনার ডেটাসেটে drug_target_interaction_graph নামে একটি গ্রাফ তৈরি করে।

৫. কোয়েরি ১: প্রতিটি যৌগের জন্য সম্পূর্ণ টার্গেট বাইন্ডিং প্রোফাইল
চলুন আমাদের প্রথম গ্রাফ কোয়েরিটি চালানো যাক। এটি একটি ১-হপ ট্র্যাভার্সাল যা এই প্রশ্নের উত্তর দেয়: কোন যৌগ কোন টার্গেটের সাথে আবদ্ধ হয় এবং তাদের অ্যাফিনিটি কত?
GQL কোয়েরি
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;
ফলাফলে আপনি যা দেখতে পাবেন তা হলো:

৬. কোয়েরি ২: হৃদরোগের ঝুঁকি শনাক্তকরণ
ব্যবসায়িক প্রশ্ন
ঔষধ আবিষ্কারের ক্ষেত্রে, ক্লিনিক্যাল ট্রায়ালে কোনো সম্ভাবনাময় যৌগের ব্যর্থ হওয়ার অন্যতম প্রধান কারণ হলো কার্ডিওটক্সিসিটি —বিশেষত, hERG প্রোটিনের (জিন: KCNH2 ) সাথে এর অনাকাঙ্ক্ষিত সংযোগ। এই hERG প্রোটিনটি হলো একটি পটাশিয়াম আয়ন চ্যানেল যা হৃৎস্পন্দন নিয়ন্ত্রণ করে। hERG-এর উপর এই অনাকাঙ্ক্ষিত সংযোগের ফলে মারাত্মক অ্যারিথমিয়া হতে পারে এবং এর কারণেই বেশ কয়েকটি বহুল আলোচিত ঔষধ বাজার থেকে প্রত্যাহার করা হয়েছে।
আমরা যে প্রশ্নের উত্তর দিতে চাই তা হলো:
আমাদের গবেষণাধীন কোন যৌগগুলো hERG প্রোটিনের সাথে অফ-টার্গেট বাইন্ডিং ঘটায় — এবং এর ফলে হৃৎপিণ্ডের কোন পথগুলো ঝুঁকিতে পড়ে?
এটি একটি দুই-ধাপের প্রশ্ন : আমাদের একটি কম্পাউন্ড থেকে, একটি টার্গেট (hERG)-এর মধ্য দিয়ে, একটি পাথওয়েতে যেতে হবে — একটিমাত্র কোয়েরিতে দুটি সম্পর্কের মধ্যে তিনটি এনটিটি টাইপকে সংযুক্ত করতে হবে।
GQL কোয়েরিটি লিখুন
BQ SQL এডিটর-এ নিম্নলিখিত কোয়েরিটি চালান:
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;
লক্ষ্য করুন, MATCH ক্লজটি কীভাবে প্রায় একটি বাক্যের মতো শোনায়: "এমন একটি যৌগ খুঁজুন যা এমন একটি টার্গেটের সাথে আবদ্ধ হয় যা একটি পাথওয়েতে অংশগ্রহণ করে" — যেখানে পাথওয়ে বরাবর প্রতিটি নোড এবং এজে ফিল্টারগুলো প্রয়োগ করা হয়।
ফলাফলে আপনি এই ডেটা দেখতে পাবেন:

ঝুঁকি নেটওয়ার্কটিকে একটি গ্রাফ হিসাবে কল্পনা করুন
একটি সারণি আমাদের তথ্য দেখায় — কিন্তু এটি ঝুঁকির কাঠামোটি দেখায় না। একাধিক যৌগ কি একই পথে মিলিত হচ্ছে? উচ্চ-ঝুঁকিপূর্ণ যৌগ কি একটি, নাকি একাধিক?
একটি গ্রাফ ভিজ্যুয়ালাইজেশন এটি তাৎক্ষণিকভাবে দৃশ্যমান করে তোলে। একই ২-হপ ট্র্যাভার্সালকে একটি ইন্টারেক্টিভ নেটওয়ার্ক হিসাবে রেন্ডার করতে নীচের সেলটি চালান:
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
আপনি এইরকম একটি গ্রাফ দেখতে পাবেন:

গ্রাফের প্রতিটি পথ একটি সম্পূর্ণ দায়বদ্ধতার শৃঙ্খলকে নির্দেশ করে: একটি যৌগ (নীল নোড) কেন্দ্রে থাকা hERG প্রোটিনের সাথে আবদ্ধ হয়, যা এক বা একাধিক কার্ডিয়াক পথের (সবুজ নোড) সাথে সংযুক্ত থাকে। সারণিতে যা আগে সারিগুলোর একটি সাধারণ তালিকা ছিল, তা এখন একটি দৃশ্যমান ঝুঁকি নেটওয়ার্কে পরিণত হয়েছে — একাধিক পথের সংস্পর্শে থাকা যৌগগুলো নিরাপত্তা পর্যালোচনার জন্য উচ্চতর অগ্রাধিকার হিসেবে তাৎক্ষণিকভাবে চিহ্নিত হয়।
দেখুন কেন GQL, SQL-এর চেয়ে বেশি মার্জিত
স্ট্যান্ডার্ড SQL-এ একই ২-হপ কোয়েরি চালাতে ৪টি সুস্পষ্ট জয়েন প্রয়োজন হয়। আপনি কী সম্পর্ক খুঁজছেন, সেদিকে মনোযোগ না দিয়ে টেবিলগুলো কীভাবে জয়েন করতে হয়, তা বর্ণনা করতে গিয়ে মানসিক শক্তি ব্যয় করছেন। GQL আপনাকে মূল প্রশ্নের উপর মনোযোগ ধরে রাখতে সাহায্য করে।
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;
আরও গভীরে — মাল্টি-হপ মেটাবোলাইট ঝুঁকি সনাক্তকরণ
উপরের কোয়েরিটি এমন যৌগ শনাক্ত করে যা সরাসরি hERG প্রোটিনের সাথে আবদ্ধ হয়। কিন্তু বাস্তব ড্রাগ সেফটি ওয়ার্কফ্লোতে, ঝুঁকিটি কখনও কখনও এক ধাপ দূরে থাকে: একটি যৌগ শরীরে বিপাকীয়ভাবে একটি দ্বিতীয় অণুতে (মেটাবোলাইট) রূপান্তরিত হতে পারে যা পরবর্তীতে hERG-এর সাথে আবদ্ধ হয় — এমন একটি ঝুঁকি যা সরাসরি বাইন্ডিং অ্যাসে সম্পূর্ণভাবে এড়িয়ে যেতে পারে।
যদি আপনার প্রপার্টি গ্রাফে একটি মেটাবোলাইট নোড টেবিল এবং একটি METABOLISES_INTO এজ অন্তর্ভুক্ত থাকে, তাহলে আপনি একই MATCH প্যাটার্নটিকে একটি ৩-হপ ট্রাভার্সাল পর্যন্ত প্রসারিত করতে পারেন:
(Compound)-[METABOLISES_INTO]->(Metabolite)-[BINDS_TO]->
(Target)-[PARTICIPATES_IN]->(Pathway)
GQL কোয়েরির কাঠামোতে ঠিক একটি নোড এবং একটি এজ পরিবর্তিত হবে। এর সমতুল্য SQL-এর জন্য অতিরিক্ত দুটি JOIN-এর প্রয়োজন হবে। এই প্যাটার্নটিই সেফটি ক্যাসকেড বিশ্লেষণের জন্য গ্রাফ ট্র্যাভার্সালকে বিশেষভাবে শক্তিশালী করে তোলে — কোয়েরির জটিলতা রৈখিকভাবে বৃদ্ধি পায়, অথচ জৈবিক অন্তর্দৃষ্টি সূচকীয়ভাবে বৃদ্ধি পায়।
৭. কোয়েরি ৩: শেয়ার্ড-টার্গেট কম্পাউন্ড পেয়ার
সংমিশ্রণ চিকিৎসার জন্য উপযুক্ত প্রার্থী খুঁজে বের করতে, আমরা শনাক্ত করতে পারি কখন দুটি ভিন্ন যৌগ একই টার্গেট নোডে আবদ্ধ হয়। এই প্রশ্নের উত্তর দিতে আমরা একটি দ্বিমুখী মিল পদ্ধতি ব্যবহার করি: কোন অনকোলজি যৌগগুলো হুবহু একই টার্গেটে মিলিত হয়?
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;
ফলাফলে আপনি এই ডেটা দেখতে পাবেন:

গ্রাফ ভিজ্যুয়ালাইজেশন
SQL এডিটরে নিম্নলিখিত কোডটি রান করে আপনি সরাসরি BigQuery-তে গ্রাফটি দেখতে পারেন।
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
এই দ্বিমুখী পরিভ্রমণ এমন যৌগিক জোড়াগুলোকে সামনে নিয়ে আসে যেগুলো একই প্রোটিন টার্গেটের দিকে অভিসারী হয় — এমন একটি প্যাটার্ন যা একটি সাধারণ ইন্টারঅ্যাকশন টেবিলে খুঁজে পাওয়া কঠিন, কিন্তু গ্রাফ হিসেবে তা তাৎক্ষণিকভাবে দৃশ্যমান। ঔষধ আবিষ্কারের ক্ষেত্রে, একই টার্গেটের জোড়াগুলোই হলো কম্বিনেশন থেরাপি ডিজাইনের সূচনা বিন্দু: ক্যান্সারের কোনো একটি পাথওয়ের একই নোডে আঘাতকারী দুটি যৌগ একটি সিনারজিস্টিক প্রভাব তৈরি করতে পারে, অথবা বিকল্পভাবে পাইপলাইনে একটি অনাকাঙ্ক্ষিত পুনরাবৃত্তির সংকেত দিতে পারে।

৮. কোয়েরি ৪: রোগের পথ ব্লাস্ট ব্যাসার্ধ
প্রতিটি যৌগের জৈবিক প্রভাব কতটা ব্যাপক? এর উত্তর দিতে, আসুন অ্যাগ্রিগেশন সহ একটি ২-হপ ট্রাভার্সাল সম্পাদন করি: রোগের ক্ষেত্র অনুসারে প্রতিটি যৌগ কতগুলি জৈবিক পথ এবং স্বতন্ত্র লক্ষ্যকে প্রভাবিত করে?
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;
ফলাফলে আপনি যা দেখতে পাবেন তা হলো:

৯. কোয়েরি ৫: নিরাপদ যৌগিক নির্বাচন
অবশেষে, এমন যৌগগুলির সন্ধান করা যাক যেগুলির অনকোলজি কভারেজ বেশি, কিন্তু স্পষ্টভাবে hERG (কার্ডিয়াক) অফ-টার্গেট ঝুঁকি এড়িয়ে চলে । এটি ওষুধ আবিষ্কারের পাইপলাইনে প্রচলিত ‘নিরাপত্তাই প্রথম’ নির্বাচন পদ্ধতির সাথে মিলে যায়।
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;
ফলাফলে আপনি এই আউটপুটটি দেখতে পাবেন:

আপনি BigQuery-তে সফলভাবে উন্নত গ্রাফ ট্র্যাভার্সাল সম্পাদন করে মূল নিরাপত্তা এবং কার্যকারিতার প্রোফাইলগুলো বের করেছেন!
১০. বোনাস সেকশন: আপনার গ্রাফের সাথে চ্যাট করুন
BigQuery Conversational Analytics এখন নলেজ সোর্স হিসেবে গ্রাফ সমর্থন করে। এর ফলে আপনি আপনার সদ্য তৈরি করা গ্রাফটির সাথে স্বাভাবিক ভাষায় চ্যাট করতে পারবেন।
শুরু করা যাক: জ্ঞানের উৎস হিসেবে একটি গ্রাফ যোগ করুন
শুরু করতে, এখানে দেওয়া ধাপগুলো অনুসরণ করে একটি কনভারসেশনাল এজেন্ট তৈরি করুন। সার্চ বার থেকে আপনার তৈরি করা গ্রাফটি নির্বাচন করুন।

আপনার গ্রাফের সাথে আলাপচারিতা করতে BigQuery Conversational Analytics ব্যবহার করুন।
একবার আপনি নলেজ সোর্সটিকে গ্রাফ হিসেবে যুক্ত করে নিলে, কনভারসেশনাল অ্যানালিটিক্স এজেন্টের বাকি সেটআপটি সম্পূর্ণ করুন।
এরপর আপনি আপনার গ্রাফের সাথে স্বাভাবিক ভাষায় কথা বলা শুরু করতে পারেন!

অতিরিক্ত প্রশ্ন
- বর্তমানে দ্বিতীয় পর্যায়ের পরীক্ষায় থাকা যৌগগুলোর লক্ষ্যমাত্রাগুলো কী কী?
- কার্ডিওভাসকুলার এবং অনকোলজি যৌগগুলির মধ্যে কোন লক্ষ্যগুলি অভিন্ন?
১১. পরিষ্কার করুন
আপনার গুগল ক্লাউড অ্যাকাউন্টে চলমান চার্জ এড়াতে, এই কোডল্যাব চলাকালীন তৈরি করা রিসোর্সগুলো মুছে ফেলুন।
পর্যায়ক্রমে স্কিমা এবং সমস্ত টেবিল ড্রপ করতে নিম্নলিখিত কোয়েরিটি চালান:
DROP SCHEMA IF EXISTS drug_target_graph CASCADE;
১২. অভিনন্দন
অভিনন্দন! আপনি BigQuery Graph ব্যবহার করে সফলভাবে একটি ড্রাগ-টার্গেট ইন্টারঅ্যাকশন নেটওয়ার্কের মডেলিং ও বিশ্লেষণ করেছেন।
আপনি যা শিখেছেন
- এনটিটি রিলেশনশিপ (কম্পাউন্ড, টার্গেট, পাথওয়ে)-কে প্রপার্টি গ্রাফ হিসেবে কীভাবে মডেল করা যায়।
- BigQuery-তে কীভাবে স্কিমা নির্ধারণ করতে হয় এবং প্রপার্টি গ্রাফ তৈরি করতে হয়।
- GQL ব্যবহার করে কীভাবে জটিল গ্রাফ ট্র্যাভার্সাল লিখতে হয় এবং সেগুলোকে প্রচলিত SQL-এর সাথে তুলনা করতে হয়।
- জীবন বিজ্ঞান ক্ষেত্রের সমস্যা সমাধানে কীভাবে
GRAPH_TABLE,MATCHএবং দ্বিমুখী ম্যাচিং ব্যবহার করা যায়।