Spark SQL: 列值只能是 A、T、G、C 或 N 的组合

Spark SQL: column values can only be a combination of A,T,G,C or N

我正在尝试查询 spark table 以查找 '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

如果您不想使用 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*'
          )

好的..我想通了:

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

或者

SELECT alt 
FROM test_set
WHERE regexp_extract( alt, '([^ACGTN.])', 0 ) IS NULL