问题描述
我需要计算雪花字符串中的单词。 问题是单词之间有空格, 以品种计数。
例如:
str = '67778 19gj5 7770 202ty524 2024 i900 3290 POC/*'
我想得到字数 - 8。
我尝试了什么:
array_size(split(str,' '))
返回 27 :(
和
array_size(split(str,'\t'))
返回 1。
有什么想法吗?
解决方法
替代解决方案:
- 使用 regex_replace 用一个空格替换所有出现的多个空格
- 使用单个空格作为分隔符拆分字符串(即您最初尝试的)
这是@NickW 建议的实现,并做了一些改进:
用单个空格替换所有连续的 whitespace 字符 (\\s+
) 并将其拆分,使用 array_size,它将适用于所有空格:空格、制表符、换行符等:
WITH t1 AS (
select '67778 19gj5 7770 202ty524 2024 i900 3290 POC/*' as str
)
select array_size(split(regexp_replace(str,'\\s+',' '),' ')) num_words
from t1
结果:
NUM_WORDS
8
,
您可以使用 SPLIT_TO_TABLE
和 COUNT_IF
:
CREATE OR REPLACE TABLE t AS
SELECT '67778 19gj5 7770 202ty524 2024 i900 3290 POC/*' AS str;
查询:
SELECT STR,COUNT_IF(s.VALUE != '') AS num_of_words
FROM t,LATERAL SPLIT_TO_TABLE(t.str,' ')s
GROUP BY STR;
输出:
STR num_of_words
67778 19gj5 7770 202ty524 2024 i900 3290 POC/* 8
编辑:
或者使用 REGEXP_COUNT
:
SELECT *,REGEXP_COUNT(str,'\\b\S+\\b') AS num_of_words
FROM t;