BigQuery - REGEXP EXTRACT с использованием двух полей - PullRequest
0 голосов
/ 09 октября 2018

У меня есть таблица с тремя полями:

Ref Alt INFO

A   T       SNP;FN1,DKFZp686O22169;DKFZp686O22169(uc002vez.2)///FN1(uc010zjp.1)///FN1(uc002vfa.2)///FN1(uc002vfb.2)///FN1(uc002vfc.2)///FN1(uc002vfd.2)///FN1(uc002vfe.2)///FN1(uc002vff.2)///FN1(uc002vfg.2)///FN1(uc002vfh.2)///FN1(uc002vfi.2)///FN1(uc002vfj.2)///FN1(uc010fvc.1)///FN1(uc010fvd.1);Protein_Coding///Protein_Coding///Protein_Coding///Protein_Coding///Protein_Coding///Protein_Coding///Protein_Coding///Protein_Coding///Protein_Coding///Protein_Coding///Protein_Coding///Protein_Coding///Protein_Coding///Protein_Coding;5UTR///Intron_8///Intron_32///Intron_31///Intron_31///Intron_32///Intron_31///Intron_31///Intron_31///Intron_31///Intron_32///Intron_32///Intron_2///Intron_2;.///.///.///.///.///.///.///.///.///.///.///.///.///.;.///.///.///.///.///.///.///.///.///.///.///.///.///.;A-0.9491,T-0.0509;A-970,T-52;A/A-0.9002,A/T-0.0978,T/T-0.0020;A/A-460,A/T-50,T/T-1,N/N-0

Можно ли как-нибудь извлечь A/T-0.0978 из поля INFO, используя первые два поля?

Спасибо!

1 Ответ

0 голосов
/ 09 октября 2018

Ниже для BigQuery Standard SQL и извлеките все значения для данной комбинации (два в вашем конкретном примере)

#standardSQL
SELECT REGEXP_EXTRACT_ALL(INFO, CONCAT(r'[,;](', Ref, '/', Alt, '.*?)[,;]')) val
FROM `project.dataset.table`   

, если вы запустите его для данных в вашем вопросе - результат будет

#standardSQL
WITH `project.dataset.table` AS (
  SELECT 'A' Ref, 'T' Alt, 'SNP;FN1,DKFZp686O22169;DKFZp686O22169(uc002vez.2)///FN1(uc010zjp.1)///FN1(uc002vfa.2)///FN1(uc002vfb.2)///FN1(uc002vfc.2)///FN1(uc002vfd.2)///FN1(uc002vfe.2)///FN1(uc002vff.2)///FN1(uc002vfg.2)///FN1(uc002vfh.2)///FN1(uc002vfi.2)///FN1(uc002vfj.2)///FN1(uc010fvc.1)///FN1(uc010fvd.1);Protein_Coding///Protein_Coding///Protein_Coding///Protein_Coding///Protein_Coding///Protein_Coding///Protein_Coding///Protein_Coding///Protein_Coding///Protein_Coding///Protein_Coding///Protein_Coding///Protein_Coding///Protein_Coding;5UTR///Intron_8///Intron_32///Intron_31///Intron_31///Intron_32///Intron_31///Intron_31///Intron_31///Intron_31///Intron_32///Intron_32///Intron_2///Intron_2;.///.///.///.///.///.///.///.///.///.///.///.///.///.;.///.///.///.///.///.///.///.///.///.///.///.///.///.;A-0.9491,T-0.0509;A-970,T-52;A/A-0.9002,A/T-0.0978,T/T-0.0020;A/A-460,A/T-50,T/T-1,N/N-0' INFO
)
SELECT REGEXP_EXTRACT_ALL(INFO, CONCAT(r'[,;](', Ref, '/', Alt, '.*?)[,;]')) val
FROM `project.dataset.table`   

с выводом

Row     val  
1       A/T-0.0978   
        A/T-50   

В случае, если вы хотите первое значение - вы можете использовать

#standardSQL
SELECT REGEXP_EXTRACT_ALL(INFO, CONCAT(r'[,;](', Ref, '/', Alt, '.*?)[,;]'))[OFFSET(0)] val 
FROM `project.dataset.table`  

или

#standardSQL
SELECT REGEXP_EXTRACT(INFO, CONCAT(r'[,;](', Ref, '/', Alt, '.*?)[,;]')) val 
FROM `project.dataset.table`
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...