0

我正在尝试查询 spark 表以查找“ref”列中包含不是 A、T、G、C 或 N 的字母的所有行。

一个有效的结果应该只包含那些字母,并且可以包含这些字母的任意长度或组合。

例如:

有效 = AA、ATTTGGGGCCCC、C、G、TTG、N 等。

无效 = P, ., NULL

以下查询仅返回包含单核苷酸的列:

SELECT ref
from test_set
where ref not in ('*A*', '*T*', '*G*', '*C*', '*N*')

ref
1   T
2   C
3   T
4   C
5   T

以下查询在 impala sql 中有效,但在 spark 中无效,而且非常难看:

SELECT regexp_replace(regexp_replace(regexp_replace(regexp_replace(regexp_replace(ref, 'A', ''), 'T', ''), 'G', ''), 'C', ''), 'N', '')
    from spark_df
4

2 回答 2

1

如果您不想使用 regexp_extract,则可以通过执行以下操作获得相同的结果:

SELECT ref
from test_set
where not (
            ref like '*A*' or
            ref like '*T*' or
            ref like '*C*' or
            ref like '*G*' or
            ref like '*N*'
          )
于 2016-04-29T20:36:08.643 回答
1

好的..我想通了:

SELECT regexp_extract(ref, 'ATGCN', 0)
from test_set

或者

SELECT alt 
FROM test_set
WHERE regexp_extract( alt, '([^ACGTN.])', 0 ) IS NULL
于 2016-04-29T20:39:56.600 回答