我正试图查询一个火花表,以查找“ref”列中包含非A、T、G、C或N的字母的所有行。
有效的结果应该只包含这些字母,并且可以包含这些字母的任何长度或组合。
例如:
有效= AA,ATTTGGGGCCCC,C,G,TTG,N等。
无效= P,.,空
以下查询只返回带有单个核苷酸的列:
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中工作,但没有spark,而且也很难看:
SELECT regexp_replace(regexp_replace(regexp_replace(regexp_replace(regexp_replace(ref, 'A', ''), 'T', ''), 'G', ''), 'C', ''), 'N', '')
from spark_df发布于 2016-04-29 20:39:56
好的..。我想出来了:
SELECT regexp_extract(ref, 'ATGCN', 0)
from test_set或
SELECT alt
FROM test_set
WHERE regexp_extract( alt, '([^ACGTN.])', 0 ) IS NULL发布于 2016-04-29 20:36:08
如果您不想使用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*'
)https://stackoverflow.com/questions/36946891
复制相似问题