将列值除以 impala 中的总行数

Posted

技术标签:

【中文标题】将列值除以 impala 中的总行数【英文标题】:Divide columns values by total rows in impala 【发布时间】:2015-06-04 23:46:43 【问题描述】:

SELECT COUNT(DISTINCT cgi.sample_id 由于 Impala 不允许 SET 操作或 select 语句中的子查询,我很难弄清楚如何将列值除以返回的总行数。我的最终目标是计算每个 chr:start 位置的次要等位基因频率。

我的数据结构如下:

| chr | start    | stop     | ref | allele1seq | allele2seq | sample_id | 
|  6  | 66720709 | 66720710 |  A  |      A     |     T      | 101-46-3  |
|  7  | 66720809 | 66720810 |  GG |      GA    |     GG     | 101-46-3  |

我想做一些类似于下面查询的事情:

WITH vars as
(SELECT cgi.chr, cgi.start, concat(cgi.chr, ':', CAST(cgi.start AS STRING)) as pos, cgi.ref, cgi.allele1seq, cgi.allele2seq,
    CASE 
        WHEN (cgi.allele1seq = cgi.ref AND cgi.allele2seq <> cgi.ref) THEN '1'  
        WHEN (cgi.allele1seq <> cgi.ref AND cgi.allele2seq = cgi.ref) THEN '1' 
        WHEN (cgi.allele1seq = cgi.ref AND cgi.allele2seq = cgi.ref) THEN '2' 
        ELSE '0' END as ma_count
    FROM comgen_variants as cgi)

SELECT vars.*, (CAST(vars.ma_count as INT)/
((SELECT COUNT(DISTINCT cgi.sample_id) from comgen_variants as cgi) * 2)) as maf
FROM vars

我想要的输出在哪里:

| chr | start    | ref | allele1seq | allele2seq | ma_count | maf |  
|  6  | 66720709 |  A  |      A     |     T      |     1    | .05 | 
|  7  | 66720809 |  GG |      GG    |     GG     |     0    |  0  |

除了找出除以行数的方法外,我还需要将结果按 chr 和 pos 分组,然后计算每个替代等位基因(其中 allele1seq 和 allele2seq 不等于 ref)出现的次数就像我上面所说的那样简单地计算每行;但由于计数问题,我还没有走到那一步。

提前感谢您的帮助。

【问题讨论】:

【参考方案1】:

看起来您可以提前计算total number of distinct sample_ids*2,然后将其用于后续查询,因为该值不会每行更改。如果值 确实 取决于行,您可能需要查看analytic/window functions available to Impala。

但是,由于您不需要这样做,您可以执行以下操作:

WITH total AS 
(SELECT COUNT(DISTINCT sample_id) * 2 AS total FROM comgen_variants)

SELECT cgi.*,
       (CASE 
          WHEN (cgi.allele1seq = cgi.ref AND cgi.allele2seq <> cgi.ref) THEN 1  
          WHEN (cgi.allele1seq <> cgi.ref AND cgi.allele2seq = cgi.ref) THEN 1 
          WHEN (cgi.allele1seq = cgi.ref AND cgi.allele2seq = cgi.ref) THEN 2
          ELSE 0 END) / total.total AS maf
FROM comgen_variants AS cgi, total;

不过,我不确定这就是次要等位基因频率;您似乎想为每个基因座选择第二常见的等位基因频率?

【讨论】:

谢谢!是的,它还不是完全 MAF,我只是被困在如何做这部分......非常感谢你的帮助。

以上是关于将列值除以 impala 中的总行数的主要内容,如果未能解决你的问题,请参考以下文章

根据可变日期范围(impala)在窗口上对列值求和

如何查看 impala 表中的分区数

将具有 AM/PM 的字符串列转换为 Impala 中的时间戳

impala基础

从 impala 更新 vertica 中的巨大记录

Impala 中 SELECT 语句的算术运算