본문으로 바로가기
본문으로 바로가기

문자열 분할을 위한 함수

참고

아래 문서 내용은 system.functions 시스템 테이블을 기반으로 자동 생성되었습니다.

alphaTokens

도입된 버전: v1.1

a-zA-Z 범위에 속하는 연속 바이트로 이루어진 부분 문자열을 선택하고, 선택된 부분 문자열로 구성된 배열을 반환합니다.

구문

alphaTokens(s[, max_substrings])

별칭: splitByAlpha

인수

  • s — 분할할 문자열입니다. String
  • max_substrings — 선택적 인수입니다. max_substrings > 0인 경우 반환되는 부분 문자열의 개수는 최대 max_substrings개이며, 그렇지 않으면 함수는 가능한 한 많은 부분 문자열을 반환합니다. Int64

반환 값

s에서 선택된 부분 문자열의 배열을 반환합니다. Array(String)

예시

사용 예시

SELECT alphaTokens('abca1abc');
┌─alphaTokens('abca1abc')─┐
│ ['abca','abc']          │
└─────────────────────────┘

arrayStringConcat

도입 버전: v1.1

배열에 나열된 값들의 문자열 표현을 구분자(separator)를 사이에 두고 연결합니다. 구분자는 선택적 매개변수이며, 지정하지 않을 경우 기본값은 빈 문자열입니다.

구문

arrayStringConcat(arr[, separator])

인수

  • arr — 연결할 배열입니다. Array(T)
  • separator — 선택적 구분자 문자열입니다. 기본값은 빈 문자열입니다. const String

반환 값

연결된 문자열을 반환합니다. String

예시

사용 예시

SELECT arrayStringConcat(['12/05/2021', '12:50:00'], ' ') AS DateString;
┌─DateString──────────┐
│ 12/05/2021 12:50:00 │
└─────────────────────┘

extractAllGroupsVertical

도입 버전: v20.5

정규 표현식을 사용하여 문자열의 모든 그룹에 대한 일치 항목을 찾고, 배열들의 배열을 반환합니다. 각 내부 배열에는 입력 문자열에서 나타나는 순서대로 각 그룹에서 일치한 조각들이 포함됩니다.

구문

extractAllGroupsVertical(s, regexp)

별칭: extractAllGroups

인수

반환 값

각 내부 배열이 하나의 일치 결과에서 캡처된 그룹들을 포함하도록, 배열의 배열을 반환합니다. 각 일치 결과는 정규식의 캡처 그룹(그룹 1, 그룹 2 등)에 대응하는 요소들로 이루어진 배열을 생성합니다. 일치하는 항목이 없으면 빈 배열을 반환합니다. Array(Array(String))

예시

사용 예시

WITH '< Server: nginx
< Date: Tue, 22 Jan 2019 00:26:14 GMT
< Content-Type: text/html; charset=UTF-8
< Connection: keep-alive
' AS s
SELECT extractAllGroupsVertical(s, '< ([\\w\\-]+): ([^\\r\\n]+)');
[['Server','nginx'],['Date','Tue, 22 Jan 2019 00:26:14 GMT'],['Content-Type','text/html; charset=UTF-8'],['Connection','keep-alive']]

ngrams

도입 버전: v21.11

UTF-8 문자열을 길이가 N인 n-그램으로 분할합니다.

구문

ngrams(s, N)

인자

반환 값

n-그램 배열을 반환합니다. Array(String)

예시

사용 예시

SELECT ngrams('ClickHouse', 3);
['Cli','lic','ick','ckH','kHo','Hou','ous','use']

reverseBySeparator

도입 버전: v26.2

지정한 구분자로 구분된 문자열에서 부분 문자열의 순서를 뒤집습니다. 이 함수는 문자열을 구분자로 분리한 다음, 생성된 파트의 순서를 뒤집고, 같은 구분자를 사용하여 다시 결합합니다. 도메인 이름, 파일 경로, 또는 구성 요소의 순서를 반대로 해야 하는 계층적 데이터를 파싱할 때 유용합니다.

예시:

  • reverseBySeparator('www.google.com')은(는) 'com.google.www'를 반환합니다.
  • reverseBySeparator('a/b/c', '/')은(는) 'c/b/a'를 반환합니다.
  • reverseBySeparator('x::y::z', '::')은(는) 'z::y::x'를 반환합니다.

문법

reverseBySeparator(string[, separator])

인수

  • string — 파트의 순서를 역순으로 만들 입력 문자열입니다. String
  • separator — 파트를 식별하는 데 사용하는 구분자 문자열입니다. 제공하지 않으면 기본값으로 '.'(점)을 사용합니다. 기본값: '.' String

반환 값

원본 문자열의 부분 문자열을 오른쪽에서 왼쪽 순서가 되도록 재배열한 뒤, 동일한 구분자로 연결한 문자열을 반환합니다. String

예시

기본 도메인 역순 변환

SELECT reverseBySeparator('www.google.com')
'com.google.www'

경로 역순

SELECT reverseBySeparator('a/b/c', '/')
'c/b/a'

사용자 정의 구분자

SELECT reverseBySeparator('x::y::z', '::')
'z::y::x'

마침표가 포함된 엣지 케이스

SELECT reverseBySeparator('.a.b.', '.')
'.b.a.'

단일 요소

SELECT reverseBySeparator('single')
'single'

빈 구분자

SELECT reverseBySeparator('abcde', '')
'edcba'

splitByChar

도입 버전: v1.1

정확히 한 글자인 상수 문자열 separator로 구분된 문자열을 부분 문자열 배열로 분할합니다. 문자열의 시작이나 끝에 separator가 나타나거나, 여러 개의 separator가 연속해서 나타나는 경우에는 빈 부분 문자열도 선택될 수 있습니다.

참고

splitby_max_substrings_includes_remaining_string 설정(기본값: 0)은 인자 max_substrings > 0인 경우 결과 배열의 마지막 요소에 남은 문자열을 포함할지 여부를 제어합니다.

다음과 같은 경우 빈 부분 문자열이 선택될 수 있습니다:

  • 문자열의 시작이나 끝에 separator가 나타나는 경우
  • 여러 개의 separator가 연속해서 나타나는 경우
  • 원래 문자열 s가 비어 있는 경우

문법

splitByChar(separator, s[, max_substrings])

인수

  • separator — 구분자는 1바이트 문자여야 합니다. String
  • s — 분할할 문자열입니다. String
  • max_substrings — 선택 사항입니다. max_substrings > 0이면 반환되는 배열에는 최대 max_substrings개의 부분 문자열만 포함하며, 그렇지 않으면 FUNCTION은 가능한 한 많은 부분 문자열을 반환합니다. 기본값은 0입니다. Int64

반환 값

선택된 부분 문자열들의 배열을 반환합니다. Array(String)

예시

사용 예시

SELECT splitByChar(',', '1,2,3,abcde');
┌─splitByChar(⋯2,3,abcde')─┐
│ ['1','2','3','abcde']    │
└──────────────────────────┘

splitByNonAlpha

도입 버전: v21.9

공백 및 문장 부호 문자를 기준으로 문자열을 부분 문자열 배열로 분할합니다.

참고

인자 max_substrings > 0인 경우 결과 배열의 마지막 요소에 남은 문자열을 포함할지 여부는 splitby_max_substrings_includes_remaining_string 설정(기본값: 0)으로 제어됩니다.

구문

splitByNonAlpha(s[, max_substrings])

인자

  • s — 분할할 문자열입니다. String
  • max_substrings — 선택 사항입니다. max_substrings > 0인 경우 반환되는 부분 문자열의 개수는 max_substrings를 넘지 않으며, 그렇지 않은 경우 가능한 한 많은 부분 문자열을 반환합니다. 기본값: 0. Int64

반환 값

s에서 선택된 부분 문자열의 배열을 반환합니다. Array(String)

예시

사용 예시

SELECT splitByNonAlpha('user@domain.com');
['user','domain','com']

splitByRegexp

도입 버전: v21.6

제공된 정규식을 구분자로 사용하여 문자열을 부분 문자열의 배열로 분할합니다. 제공된 정규식이 비어 있으면 문자열을 한 글자씩의 문자 배열로 분할합니다. 정규식과 일치하는 부분이 없으면 문자열은 분할되지 않습니다.

다음과 같은 경우 빈 부분 문자열이 생성될 수 있습니다.

  • 비어 있지 않은 정규식이 문자열의 시작 또는 끝에서 일치하는 경우
  • 비어 있지 않은 정규식 일치가 연속해서 여러 번 발생하는 경우
  • 원래 문자열은 비어 있고 정규식은 비어 있지 않은 경우
참고

splitby_max_substrings_includes_remaining_string 설정(기본값: 0)은 인자 max_substrings > 0인 경우 결과 배열의 마지막 요소에 남은 문자열을 포함할지 여부를 제어합니다.

구문

splitByRegexp(regexp, s[, max_substrings])

인수

  • regexp — 정규식(regular expression). 상수입니다. String 또는 FixedString
  • s — 분할할 문자열입니다. String
  • max_substrings — 선택적 인수입니다. max_substrings > 0인 경우 반환되는 부분 문자열 개수는 최대 max_substrings개이며, 그렇지 않으면 가능한 한 많은 부분 문자열을 반환합니다. 기본값: 0. Int64

반환 값

s에서 선택된 부분 문자열로 이루어진 배열을 반환합니다. Array(String)

예시

사용 예시

SELECT splitByRegexp('\\d+', 'a12bc23de345f');
┌─splitByRegex⋯c23de345f')─┐
│ ['a12bc23de345f']        │
└──────────────────────────┘

빈 정규식

SELECT splitByRegexp('', 'abcde');
┌─splitByRegexp('', 'abcde')─┐
│ ['a','b','c','d','e']      │
└────────────────────────────┘

splitByString

도입 버전: v1.1

여러 문자로 구성된 상수 separator로 문자열을 분할하여 부분 문자열 배열을 생성합니다. 문자열 separator가 비어 있으면 문자열 s를 한 글자씩의 문자 배열로 분할합니다.

다음과 같은 경우 빈 부분 문자열이 생성될 수 있습니다:

  • 비어 있지 않은 separator가 문자열의 시작 또는 끝에 나타나는 경우
  • 비어 있지 않은 separator가 여러 개 연속으로 나타나는 경우
  • separator는 비어 있지 않은데 원래 문자열 s가 비어 있는 경우
참고

splitby_max_substrings_includes_remaining_string (기본값: 0) 설정은 인자 max_substrings > 0인 경우 결과 배열의 마지막 요소에 남은 문자열을 포함할지 여부를 제어합니다.

구문

splitByString(separator, s[, max_substrings])

인수

  • separator — 구분자입니다. String
  • s — 분할할 문자열입니다. String
  • max_substrings — 선택적 인수입니다. max_substrings > 0인 경우 반환되는 부분 문자열의 개수는 max_substrings를 넘지 않으며, 그렇지 않은 경우 함수는 가능한 한 많은 부분 문자열을 반환합니다. 기본값: 0. Int64

반환 값

문자열 s에서 선택된 부분 문자열의 배열을 반환합니다. Array(String)

예시

사용 예시

SELECT splitByString(', ', '1, 2 3, 4,5, abcde');
┌─splitByStrin⋯4,5, abcde')─┐
│ ['1','2 3','4,5','abcde'] │
└───────────────────────────┘

구분자가 비어 있는 경우

SELECT splitByString('', 'abcde');
┌─splitByString('', 'abcde')─┐
│ ['a','b','c','d','e']      │
└────────────────────────────┘

splitByWhitespace

도입된 버전: v21.9

공백 문자로 구분된 문자열을 하위 문자열 배열로 분할합니다.

참고

설정 splitby_max_substrings_includes_remaining_string (기본값: 0)은 인수 max_substrings > 0일 때 결과 배열의 마지막 요소에 남은 문자열을 포함할지 여부를 제어합니다.

구문

splitByWhitespace(s[, max_substrings])

인자

  • s — 분할할 문자열입니다. String
  • max_substrings — 선택적인 인자입니다. max_substrings > 0이면 반환되는 부분 문자열의 개수는 max_substrings를 넘지 않으며, 그렇지 않으면 함수는 가능한 한 많은 부분 문자열을 반환합니다. 기본값은 0입니다. Int64

반환 값

s에서 선택된 부분 문자열의 배열을 반환합니다. Array(String)

예시

사용 예시

SELECT splitByWhitespace('  1!  a,  b.  ');
['1!','a,','b.']

tokens

도입된 버전: v21.11

지정된 tokenizer를 사용하여 문자열을 토큰으로 분할합니다.

사용 가능한 tokenizer:

  • splitByNonAlpha는 영숫자가 아닌 ASCII 문자를 기준으로 문자열을 분할합니다(함수 splitByNonAlpha도 참조).
  • splitByString(S)는 사용자 정의 구분 문자열 S를 기준으로 문자열을 분할합니다(함수 splitByString도 참조). 구분자는 선택적 매개변수로 지정할 수 있으며, 예를 들어 tokenizer = splitByString([', ', '; ', '\n', '\\'])와 같이 설정합니다. 각 문자열은 여러 문자로 구성될 수 있습니다(예시의 ', '). 구분자를 명시적으로 지정하지 않으면(예: tokenizer = splitByString) 기본 구분자 목록은 공백 하나 [' ']입니다.
  • ngrams(N)는 문자열을 동일한 크기의 N-gram으로 분할합니다(함수 ngrams도 참조). n-gram 길이는 1에서 8 사이의 정수인 선택적 매개변수로 지정할 수 있으며, 예를 들어 tokenizer = ngrams(3)와 같이 설정합니다. n-gram 크기를 명시적으로 지정하지 않으면(예: tokenizer = ngrams) 기본값은 3입니다.
  • sparseGrams(min_length, max_length, min_cutoff_length)는 최소 min_length, 최대 max_length(포함) 길이의 가변 길이 n-gram으로 문자열을 분할합니다(함수 sparseGrams도 참조). 별도 지정하지 않으면 min_lengthmax_length의 기본값은 각각 3과 100입니다. 매개변수 min_cutoff_length를 지정하면 길이가 min_cutoff_length 이상인 n-gram만 반환합니다. ngrams(N)과 비교하면, sparseGrams tokenizer는 가변 길이 N-gram을 생성하여 원본 텍스트를 더 유연하게 표현할 수 있습니다. 예를 들어 tokenizer = sparseGrams(3, 5, 4)는 내부적으로 입력 문자열에서 3-, 4-, 5-gram을 생성하지만, 4-gram과 5-gram만 반환합니다.
  • array는 토큰화를 수행하지 않으며, 각 행 값이 하나의 토큰이 됩니다(함수 array도 참조).

splitByString tokenizer의 경우, 토큰이 prefix code를 형성하지 않는다면 더 긴 구분자를 우선적으로 매칭하도록 하는 것이 바람직합니다. 이를 위해 구분자를 길이가 긴 순서대로 전달하면 됩니다. 예를 들어 separators = ['%21', '%']인 경우 문자열 %21abc['abc']로 토큰화되지만, separators = ['%', '%21']인 경우 ['21ac']로 토큰화됩니다(이는 원했던 결과가 아닐 가능성이 높습니다).

Syntax

tokens(value) -- 'splitByNonAlpha' tokenizer
tokens(value, 'splitByNonAlpha')
tokens(value, 'splitByString'[, separators])
tokens(value, 'ngrams'[, n])
tokens(value, 'sparseGrams'[, min_length, max_length[, min_cutoff_length]])
tokens(value, 'array')

인수

  • value — 입력 문자열입니다. String 또는 FixedString
  • tokenizer — 사용할 tokenizer입니다. 유효한 인수는 splitByNonAlpha, ngrams, splitByString, array, sparseGrams입니다. 선택적 인수이며, 명시적으로 지정하지 않으면 기본값은 splitByNonAlpha입니다. const String
  • n — 인수 tokenizerngrams인 경우에만 해당합니다. n-gram의 길이를 정의하는 선택적 매개변수입니다. 명시적으로 지정하지 않으면 기본값은 3입니다. const UInt8
  • separators — 인수 tokenizersplit인 경우에만 해당합니다. 구분자 문자열을 정의하는 선택적 매개변수입니다. 명시적으로 지정하지 않으면 기본값은 [' ']입니다. const Array(String)
  • min_length — 인수 tokenizersparseGrams인 경우에만 해당합니다. 최소 gram 길이를 정의하는 선택적 매개변수이며, 기본값은 3입니다. const UInt8
  • max_length — 인수 tokenizersparseGrams인 경우에만 해당합니다. 최대 gram 길이를 정의하는 선택적 매개변수이며, 기본값은 100입니다. const UInt8
  • min_cutoff_length — 인수 tokenizersparseGrams인 경우에만 해당합니다. 최소 cutoff 길이를 정의하는 선택적 매개변수입니다. const UInt8

Returned value

입력 문자열에서 생성된 토큰 배열을 반환합니다. Array

Examples

기본 tokenizer

SELECT tokens('test1,;\\\\ test2,;\\\\ test3,;\\\\   test4') AS tokens;
['test1','test2','test3','test4']

N그램 토크나이저

SELECT tokens('abc def', 'ngrams', 3) AS tokens;
['abc','bc ','c d',' de','def']