我有一些看起来像这样的数据
Sequence, length
abc, 1
bat, 1
abc > abc, 2
abc > bat, 2
ced > ced > ced > fan, 4
我正在尝试将各种字符串的频率作为此数据的新列。例如:
Sequence, length, count_of_ced
abc, 1, 0
bat, 1, 0
abc > abc, 2, 0
abc > bat, 2, 0
ced > ced > ced > fan, 4, 3
我正在尝试通过获取长度值并减去Sequence字段的长度来解决此问题,将“ ced”字符串替换为“”,如下所示:
length - array_length(split(replace(Sequence, "ced", ""), " > " )) as count_of_ced
但是此行的所有结果都为0。
这是正确的方法吗?我已经用“>”和“>”上的字符串分割对它们进行了测试,但是我仍然得到0。我已经翻阅了Google Bigquery文档,但没有找到预建的substring_count()函数或其他任何东西。
答案 0 :(得分:4)
有一种经过尝试的真实字符串长度方法:
select (length(replace(sequence, 'ced', 'ced+')) - length(sequence)) as num_ced
或者,您可以使用数组:
select array_length(regexp_extract_all(sequence, 'ced'))
答案 1 :(得分:0)
以下版本使用'ced'作为分隔符
SELECT ARRAY_LENGTH(SPLIT(Sequence, 'ced')) - 1
您可以使用问题中的伪数据对其进行测试,如下所示
#standardSQL
WITH `project.dataset.table` AS (
SELECT 'abc' Sequence, 1 length UNION ALL
SELECT 'bat', 1 UNION ALL
SELECT 'abc > abc', 2 UNION ALL
SELECT 'abc > bat', 2 UNION ALL
SELECT 'ced > ced > ced > fan', 4
)
SELECT Sequence, length,
ARRAY_LENGTH(SPLIT(Sequence, 'ced')) - 1 AS count_of_ced
FROM `project.dataset.table`
结果为
Row Sequence length count_of_ced
1 abc 1 0
2 bat 1 0
3 abc > abc 2 0
4 abc > bat 2 0
5 ced > ced > ced > fan 4 3