0

A、T、G、C、または N 以外の文字を含む「ref」列のすべての行を検索するために、spark テーブルにクエリを実行しようとしています。

有効な結果には、これらの文字のみが含まれている必要があり、これらの文字の任意の長さまたは組み合わせを含めることができます。

例えば:

有効 = 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

わかりました..私はそれを理解しました:

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 に答える
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 に答える