雪花中的制表符缩进是否有特殊字符?

问题描述

我需要计算雪花字符串中的单词。 问题是单词之间有空格, 以品种计数。

例如:

str = '67778        19gj5  7770 202ty524 2024       i900      3290 POC/*'

我想得到字数 - 8。

我尝试了什么:

array_size(split(str,' '))

返回 27 :(

array_size(split(str,'\t'))

返回 1。

有什么想法吗?

解决方法

替代解决方案:

  1. 使用 regex_replace 用一个空格替换所有出现的多个空格
  2. 使用单个空格作为分隔符拆分字符串(即您最初尝试的)
,

这是@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_TABLECOUNT_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;