2016-04-29 1 views
0

スパーク・テーブルを照会して、A以外の文字を含む 'ref' T、G、CまたはNのいずれかを含むことができます。Spark SQL:列の値は、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 

次のクエリは、インパラSQLで動作しますが、スパークではない、ともかなり醜いです:

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

答えて

1

は、[OK]を..私はそれを考え出した:

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

それとも

SELECT alt 
FROM test_set 
WHERE regexp_extract(alt, '([^ACGTN.])', 0) IS NULL 
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*' 
     ) 
関連する問題