STRTOK_SPLIT_TO_TABLE
STRTOK_SPLIT_TO_TABLE
주어진 구분자 집합으로 문자열을 토큰화하고 결과를 행으로 펼쳐요.
참고 항목:
- STRTOK, STRTOK_TO_ARRAY
본문
구문
STRTOK_SPLIT_TO_TABLE(<string> [,<delimiter_list>])
인자
필수:
string
- 토큰화할 텍스트예요.
선택:
delimiter_list
- 선택적인 구분자 집합이에요. 기본값은 단일 공백 문자예요.
출력
이 함수는 다음 열을 반환해요.
| 열 이름 | 데이터 타입 | 설명 |
|---|---|---|
| SEQ | NUMBER | 입력 레코드와 연결된 고유 시퀀스 번호예요. 시퀀스는 특정한 방식으로 빈틈이 없거나 정렬되어 있음을 보장하지 않아요. |
| INDEX | NUMBER | 요소의 1부터 시작하는 인덱스예요. |
| VALUE | VARCHAR | 펼쳐진 배열의 요소 값이에요. |
참고
쿼리는 이 함수의 데이터 소스 역할을 한 원본(상관) 테이블의 열에도 접근할 수 있어요. 원본 테이블의 단일 행이 펼쳐진 뷰에서 여러 행이 되었다면, 이 입력 행의 값은 이 함수가 만든 행 수에 맞춰 복제돼요.
예제
상수 입력에 대한 간단한 예제예요.
SELECT table1.value
FROM TABLE(STRTOK_SPLIT_TO_TABLE('a.b', '.')) AS table1
ORDER BY table1.value;
+-------+
| VALUE |
|-------|
| a |
| b |
+-------+
테이블을 만들고 데이터를 삽입해요.
CREATE OR REPLACE TABLE splittable_strtok (v VARCHAR);
INSERT INTO splittable_strtok (v) VALUES ('a b'), ('cde'), ('f|g'), ('');
SELECT * FROM splittable_strtok;
+-----+
| V |
|-----|
| a b |
| cde |
| f|g |
| |
+-----+
STRTOK_SPLIT_TO_TABLE 함수와 함께 LATERAL 키워드를 사용해 함수가 상관 테이블인 splittable_strtok 테이블의 각 행에 대해 실행되게 할 수 있어요.
SELECT *
FROM splittable_strtok, LATERAL STRTOK_SPLIT_TO_TABLE(splittable_strtok.v, ' ')
ORDER BY SEQ, INDEX;
+-----+-----+-------+-------+
| V | SEQ | INDEX | VALUE |
|-----+-----+-------+-------|
| a b | 1 | 1 | a |
| a b | 1 | 2 | b |
| cde | 2 | 1 | cde |
| f|g | 3 | 1 | f|g |
+-----+-----+-------+-------+
이 예제는 앞의 예제와 같지만 여러 구분자를 지정해요.
SELECT *
FROM splittable_strtok, LATERAL STRTOK_SPLIT_TO_TABLE(splittable_strtok.v, ' |')
ORDER BY SEQ, INDEX;
+-----+-----+-------+-------+
| V | SEQ | INDEX | VALUE |
|-----+-----+-------+-------|
| a b | 1 | 1 | a |
| a b | 1 | 2 | b |
| cde | 2 | 1 | cde |
| f|g | 3 | 1 | f |
| f|g | 3 | 2 | g |
+-----+-----+-------+-------+
한 열에 저자를, 다른 열에 저자의 일부 책 제목을 포함하는 다른 테이블을 만들어요. 테이블 데이터에서 책 제목은 쉼표나 세미콜론으로 구분될 수 있어요.
CREATE OR REPLACE TABLE authors_books_test2 (author VARCHAR, titles VARCHAR);
INSERT INTO authors_books_test2 (author, titles) VALUES
('Nathaniel Hawthorne', 'The Scarlet Letter ; The House of the Seven Gables;The Blithedale Romance'),
('Herman Melville', 'Moby Dick,The Confidence-Man');
SELECT * FROM authors_books_test2;
+---------------------+---------------------------------------------------------------------------+
| AUTHOR | TITLES |
|---------------------+---------------------------------------------------------------------------|
| Nathaniel Hawthorne | The Scarlet Letter ; The House of the Seven Gables;The Blithedale Romance |
| Herman Melville | Moby Dick,The Confidence-Man |
+---------------------+---------------------------------------------------------------------------+
LATERAL 키워드와 SPLIT_TO_TABLE 함수를 사용해 각 제목에 대해 별도의 행을 반환하는 쿼리를 실행해요. 또한 TRIM 함수를 사용해 제목 앞뒤의 공백을 제거해요. SELECT 목록에는 함수가 반환하는 고정 값(VALUE) 열이 포함돼요.
SELECT author, TRIM(value) AS title
FROM authors_books_test2, LATERAL STRTOK_SPLIT_TO_TABLE(titles, ',;')
ORDER BY author;
+---------------------+-------------------------------+
| AUTHOR | TITLE |
|---------------------+-------------------------------|
| Herman Melville | Moby Dick |
| Herman Melville | The Confidence-Man |
| Nathaniel Hawthorne | The Scarlet Letter |
| Nathaniel Hawthorne | The House of the Seven Gables |
| Nathaniel Hawthorne | The Blithedale Romance |
+---------------------+-------------------------------+
더 알아보기
- STRTOK — 문자열 토큰화
- STRTOK_TO_ARRAY — 토큰을 배열로 반환
- Snowflake 문자열 및 이진 함수