2017-06-15 13 views
0

BigQueryには次のゲノムテーブルがあります(12K行以上)。 1行をbigQuery - 新しいテーブルの列を作成するために行の値を使用する方法

Row sample_id chr3_3930069__TGT chr3_3929921_TC chr3_3929739_TC 
1 hu011C57 1     1    0 
2 hu011C58 0  

意味:私は、次の表を生成したい

Row sample_id PIK3CA_features 
1 hu011C57 chr3_3930069__TGT  
2 hu011C57 chr3_3929921_TC 
3 hu011C57 chr3_3929739_TC 
4 hu011C57 chr3_3929813__T 
5 hu011C57 chr3_3929897_GA 
6 hu011C57 chr3_3929977_TC 
7 hu011C57 chr3_3929783_TC 

PIK3CA_features(カラム2)の長いリストが同一sample_idに関連している(カラム1)このサンプルにPIK3CA_featureが存在する場合には、すべてのサンプルIDについて1/0が存在する。

このテーブルを簡単に生成する方法はありますか?

何か考えてくれてありがとうございました!

答えて

0

これは、サンプルIDをグループ化することで実現できます。

SELECT 
    sample_id, 
    COUNTIF(PIK3CA_features = 'chr3_3930069__TGT') as chr3_3930069__TGT, 
    COUNTIF(PIK3CA_features = 'chr3_3929921_TC') as chr3_3929921_TC, 
    COUNTIF(PIK3CA_features = 'chr3_3929739_TC') as chr3_3929739_TC 
FROM [your_table] 
GROUP BY sample_id; 

サンプルIDごとに重複するPIK3CA_featuresがないと仮定すると、これは必要なものを提供します。

1

、あなたが必要なものにやや近い取得するARRAYS and STRUCTSの概念を使用してそのようにされて頭に浮かぶだけのアイデア:これはあなたのための1つのsample_idあたりの行との対応配列を返します

WITH data AS(
SELECT 'hu011C57' sample_id, 'chr3_3930069__TGT' PIK3CA_features union all 
SELECT 'hu011C57', 'chr3_3929921_TC' union all 
SELECT 'hu011C57', 'chr3_3929739_TC' union all 
SELECT 'hu011C57', 'chr3_3929813__T' union all 
SELECT 'hu011C57', 'chr3_3929897_GA' union all 
SELECT 'hu011C57', 'chr3_3929977_TC' union all 
SELECT 'hu011C57', 'chr3_3929783_TC' union all 
SELECT 'hu011C58', 'chr3_3929783_TC' union all 
SELECT 'hu011C58', 'chr3_3929921_TC' 
), 

all_features AS (
    SELECT DISTINCT PIK3CA_features FROM data 
), 

aggregated_samples AS(
    SELECT 
    sample_id, 
    ARRAY_AGG(DISTINCT PIK3CA_features) features 
FROM data 
GROUP BY sample_id 
) 

SELECT 
    sample_id, 
    ARRAY(SELECT AS STRUCT PIK3CA_features, PIK3CA_features IN (SELECT feature FROM UNNEST(features) feature) FROM all_features AS present ORDER BY PIK3CA_features) features 
FROM aggregated_samples 

各フィーチャーとsample_idにそのフィーチャーがある構造体。

BigQueryはこのタイプのデータ構造をネイティブにサポートしているため、分析関数、サブクエリなどの高度な分析機能を失うことなく、データ表現にこの表現を使用できます。

関連する問題