Sie können BigQuery verwenden, um eine JOIN
-Abfrage über Varianten mit Daten durchzuführen, die durch Intervalle in Genomregionen – sogenannte Überlappungen (Overlaps) – beschrieben werden. Auf dieser Seite wird gezeigt, wie Sie mithilfe einer komplexen JOIN
-Abfrage anhand einer Liste mit Genbezeichnungen
- die seltenen SNPs überlappenden Gene finden,
- über alle DNA-Proben hinweg 100.000 Basenpaare auf jeder Seite eines Gens finden.
Es werden drei Abfragen vorgestellt, die jeweils zeigen, wie BigQuery für verschiedene Mengen von genomischen Daten skaliert:
- Abfrage einer Inline-Tabelle
- Abfrage einer materialisierten Tabelle mit bestimmten Genen
- Abfrage einer materialisierten Tabelle mit 250 zufälligen Genen
Die Daten stammen aus der fast neun Milliarden Zeilen umfassenden Tute Genomics Annotation-Tabelle und dem Illumina Platinum Genomes-Dataset. Weitere Informationen zu diesen Datasets finden Sie hier:
- Exploring genetic variation with Google Genomics and Tute im Google Cloud-Blog
- Illumina Platinum Genomes im Abschnitt zu öffentlichen Datasets
Intervall-JOIN
mit einer Inline-Tabelle ausführen
In diesem Beispiel wird die in der Abfrage definierte Intervalltabelle intervals
verwendet. Es wird gezeigt, wie Sie für eine Tabelle, die Varianten aus Illumina Platinum Genomes enthält, eine JOIN
-Abfrage ausführen:
Rufen Sie die BigQuery-UI auf.
Klicken Sie auf Abfrage erstellen.
Geben Sie im Feld Neue Abfrage folgende Abfrage ein:
#standardSQL WITH -- -- Retrieve the variants in this cohort, flattening by alternate bases and -- counting affected alleles. variants AS ( SELECT REPLACE(reference_name, 'chr', '') as reference_name, start_position, end_position, reference_bases, alternate_bases.alt AS alt, (SELECT COUNTIF(gt = alt_offset+1) FROM v.call call, call.genotype gt) AS num_variant_alleles, (SELECT COUNTIF(gt >= 0) FROM v.call call, call.genotype gt) AS total_num_alleles FROM `bigquery-public-data.human_genome_variants.platinum_genomes_deepvariant_variants_20180823` v, UNNEST(v.alternate_bases) alternate_bases WITH OFFSET alt_offset ), -- -- Define an inline table that uses five rows -- selected from silver-wall-555.TuteTable.hg19. intervals AS ( SELECT * FROM UNNEST ([ STRUCT<Gene STRING, Chr STRING, gene_start INT64, gene_end INT64, region_start INT64, region_end INT64> ('PRCC', '1', 156736274, 156771607, 156636274, 156871607), ('NTRK1', '1', 156785541, 156852640, 156685541, 156952640), ('PAX8', '2', 113972574, 114037496, 113872574, 114137496), ('FHIT', '3', 59734036, 61238131, 59634036, 61338131), ('PPARG', '3', 12328349, 12476853, 12228349, 12576853) ])), -- -- JOIN the variants with the genomic intervals overlapping -- the genes of interest. -- -- The JOIN criteria is complicated because the task is to see if -- an SNP overlaps an interval. With standard SQL you can use complex -- JOIN predicates, including arbitrary expressions. gene_variants AS ( SELECT reference_name, start_position, reference_bases, alt, num_variant_alleles, total_num_alleles FROM variants INNER JOIN intervals ON variants.reference_name = intervals.Chr AND intervals.region_start <= variants.start_position AND intervals.region_end >= variants.end_position ) -- -- And finally JOIN the variants in the regions of interest -- with annotations for rare variants. SELECT DISTINCT Chr, annots.Start AS Start, Ref, annots.Alt, Func, Gene, PopFreqMax, ExonicFunc, num_variant_alleles, total_num_alleles FROM `silver-wall-555.TuteTable.hg19` AS annots INNER JOIN gene_variants AS vars ON vars.reference_name = annots.Chr AND vars.start_position = annots.Start AND vars.reference_bases = annots.Ref AND vars.alt = annots.Alt WHERE -- Retrieve annotations for rare variants only. PopFreqMax <= 0.01 ORDER BY Chr, Start;
Klicken Sie auf Abfrage ausführen. Die Abfrage dauert ca. zehn Sekunden. Dabei werden rund 334 GB an Daten verarbeitet. Die Abfrage liefert als Ergebnis seltene Varianten innerhalb der Kohorte, die mit den betrachteten Regionen überlappen.
Eine ähnliche Abfrage mit Daten aus 1000 Genomes Phase 3 dauert ca. 90 Sekunden, wobei rund 3,38 TB an Daten verarbeitet werden.
Materialisierte Tabelle verwenden
Wenn Sie mit sehr großen Big-Data-Datasets arbeiten, können Sie eine Intervalltabelle materialisieren und eine JOIN
-Abfrage über die neue Tabelle ausführen.
Intervall-JOIN
für bestimmte Gene ausführen
Im folgenden Beispiel wird eine neue Intervalltabelle materialisiert, die eine Liste bestimmter Gene aus der Tabelle silver-wall-555:TuteTable.hg19 enthält:
Rufen Sie die BigQuery-UI auf.
Gehen Sie so vor, um ein Dataset zu erstellen:
Klicken Sie im Navigationsbereich neben Ihrem Google Cloud-Projekt auf den Abwärtspfeil und anschließend auf Neues Dataset erstellen.
Geben Sie unter Dataset ID
genomics
ein.Behalten Sie die anderen Standardeinstellungen bei und klicken Sie auf OK.
Gehen Sie so vor, um die Intervalltabelle zu erstellen:
Klicken Sie in BigQuery auf Abfrage erstellen.
Geben Sie im Feld Neue Abfrage die folgende Abfrage ein. Damit wird ein Ausschnitt der Tabelle "silver-wall-555:TuteTable.hg19" in der neuen Intervalltabelle
genomics.myIntervalTable
materialisiert:#standardSQL CREATE TABLE `genomics.myIntervalTable` AS ( SELECT Gene, Chr, MIN(Start) AS gene_start, MAX(`End`) AS gene_end, MIN(Start)-100000 AS region_start, MAX(`End`)+100000 AS region_end FROM `silver-wall-555.TuteTable.hg19` WHERE Gene IN ('APC', 'ATM', 'BMPR1A', 'BRCA1', 'BRCA2', 'CDK4', 'CDKN2A', 'CREBBP', 'EGFR', 'EP300', 'ETV6', 'FHIT', 'FLT3', 'HRAS', 'KIT', 'MET', 'MLH1', 'NTRK1', 'PAX8', 'PDGFRA', 'PPARG', 'PRCC', 'PRKAR1A', 'PTEN', 'RET', 'STK11', 'TFE3', 'TGFB1', 'TGFBR2', 'TP53', 'WWOX') GROUP BY Chr, Gene );
- Klicken Sie auf Abfrage ausführen.
Geben Sie im Feld Neue Abfrage die folgende Abfrage ein:
#standardSQL WITH -- -- Retrieve the variants in this cohort, flattening by alternate bases and -- counting affected alleles. variants AS ( SELECT REPLACE(reference_name, 'chr', '') as reference_name, start_position, end_position, reference_bases, alternate_bases.alt AS alt, (SELECT COUNTIF(gt = alt_offset+1) FROM v.call call, call.genotype gt) AS num_variant_alleles, (SELECT COUNTIF(gt >= 0) FROM v.call call, call.genotype gt) AS total_num_alleles FROM `bigquery-public-data.human_genome_variants.platinum_genomes_deepvariant_variants_20180823` v, UNNEST(v.alternate_bases) alternate_bases WITH OFFSET alt_offset ), -- -- JOIN the variants with the genomic intervals overlapping -- the genes of interest. -- -- The JOIN criteria is complicated because the task is to see if -- an SNP overlaps an interval. With standard SQL you can use complex -- JOIN predicates, including arbitrary expressions. gene_variants AS ( SELECT reference_name, start_position, reference_bases, alt, num_variant_alleles, total_num_alleles FROM variants INNER JOIN `genomics.myIntervalTable` AS intervals ON variants.reference_name = intervals.Chr AND intervals.region_start <= variants.start_position AND intervals.region_end >= variants.end_position ) -- -- And finally JOIN the variants in the regions of interest -- with annotations for rare variants. SELECT DISTINCT Chr, annots.Start AS Start, Ref, annots.Alt, Func, Gene, PopFreqMax, ExonicFunc, num_variant_alleles, total_num_alleles FROM `silver-wall-555.TuteTable.hg19` AS annots INNER JOIN gene_variants AS vars ON vars.reference_name = annots.Chr AND vars.start_position = annots.Start AND vars.reference_bases = annots.Ref AND vars.alt = annots.Alt WHERE -- Retrieve annotations for rare variants only. PopFreqMax <= 0.01 ORDER BY Chr, Start;
Klicken Sie auf Abfrage ausführen. Die Abfrage dauert ca. zehn Sekunden. Dabei werden rund 334 GB an Daten verarbeitet. Die Abfrage liefert als Ergebnis seltene Varianten innerhalb der Kohorte, die mit den betrachteten Regionen überlappen.
Eine ähnliche Abfrage mit Daten aus 1000 Genomes Phase 3 dauert ca. 90 Sekunden, wobei rund 3,38 TB an Daten verarbeitet werden.
Intervall-JOIN
für zufällige Gene ausführen
Im folgenden Beispiel wird ein Intervall-JOIN
über eine materialisierte Tabelle ausgeführt, die 250 zufällig aus der Tabelle silver-wall-555:TuteTable.hg19 ausgewählte Gene enthält:
Rufen Sie die BigQuery-UI auf.
Gehen Sie so vor, um ein Dataset zu erstellen:
Klicken Sie im Navigationsbereich neben Ihrem Google Cloud-Projekt auf den Abwärtspfeil und anschließend auf Neues Dataset erstellen.
Geben Sie unter Dataset ID
genomics
ein.Behalten Sie die anderen Standardeinstellungen bei und klicken Sie auf OK.
Gehen Sie so vor, um die Intervalltabelle zu erstellen:
Klicken Sie in BigQuery auf Abfrage erstellen.
Geben Sie im Feld Neue Abfrage die folgende Abfrage ein. Damit wird ein Ausschnitt der Tabelle "silver-wall-555:TuteTable.hg19" in der neuen Intervalltabelle
genomics.randomGenesIntervalTable
materialisiert:#standardSQL CREATE TABLE `genomics.randomGenesIntervalTable` AS ( SELECT Gene, Chr, MIN(Start) AS gene_start, MAX(`End`) AS gene_end, MIN(Start) - 100000 AS region_start, MAX(`End`) + 100000 AS region_end FROM `silver-wall-555.TuteTable.hg19` WHERE Gene IN (SELECT Gene FROM `silver-wall-555.TuteTable.hg19` GROUP BY Gene LIMIT 250) GROUP BY Chr, Gene );
- Klicken Sie auf Abfrage ausführen.
Geben Sie im Feld Neue Abfrage die folgende Abfrage ein:
#standardSQL WITH -- -- Retrieve the variants in this cohort, flattening by alternate bases and -- counting affected alleles. variants AS ( SELECT REPLACE(reference_name, 'chr', '') as reference_name, start_position, end_position, reference_bases, alternate_bases.alt AS alt, (SELECT COUNTIF(gt = alt_offset+1) FROM v.call call, call.genotype gt) AS num_variant_alleles, (SELECT COUNTIF(gt >= 0) FROM v.call call, call.genotype gt) AS total_num_alleles FROM `bigquery-public-data.human_genome_variants.platinum_genomes_deepvariant_variants_20180823` v, UNNEST(v.alternate_bases) alternate_bases WITH OFFSET alt_offset ), -- -- JOIN the variants with the genomic intervals overlapping -- the genes of interest. -- -- The JOIN criteria is complicated because the task is to see if -- an SNP overlaps an interval. With standard SQL you can use complex -- JOIN predicates, including arbitrary expressions. gene_variants AS ( SELECT reference_name, start_position, reference_bases, alt, num_variant_alleles, total_num_alleles FROM variants INNER JOIN `genomics.randomGenesIntervalTable` AS intervals ON variants.reference_name = intervals.Chr AND intervals.region_start <= variants.start_position AND intervals.region_end >= variants.end_position ) -- -- And finally JOIN the variants in the regions of interest -- with annotations for rare variants. SELECT DISTINCT Chr, annots.Start AS Start, Ref, annots.Alt, Func, Gene, PopFreqMax, ExonicFunc, num_variant_alleles, total_num_alleles FROM `silver-wall-555.TuteTable.hg19` AS annots INNER JOIN gene_variants AS vars ON vars.reference_name = annots.Chr AND vars.start_position = annots.Start AND vars.reference_bases = annots.Ref AND vars.alt = annots.Alt WHERE -- Retrieve annotations for rare variants only. PopFreqMax <= 0.01 ORDER BY Chr, Start;
Klicken Sie auf Abfrage ausführen. Die Abfrage dauert ca. zehn Sekunden. Dabei werden rund 334 GB an Daten verarbeitet. Die Abfrage liefert als Ergebnis seltene Varianten innerhalb der Kohorte, die mit den betrachteten Regionen überlappen.
Eine ähnliche Abfrage mit Daten aus 1000 Genomes Phase 3 dauert ca. 90 Sekunden, wobei rund 3,38 TB an Daten verarbeitet werden.