SPLIT_TO_TABLE
SPLIT_TO_TABLE
문자열을 지정한 구분자로 나누고 결과를 행으로 평탄화(flatten)하는 테이블 함수예요. 구분자로 구분된 값이 든 문자열을 개별 행으로 펼치고 싶을 때 씁니다.
본문
SPLIT_TO_TABLE(<string>, <delimiter>)
string— 분할할 텍스트.delimiter— 문자열을 나누는 기준이 될 텍스트.
함수는 다음 컬럼을 반환해요.
| Column name | Data type | Description |
|---|---|---|
| SEQ | NUMBER | 입력 레코드와 연결된 고유 시퀀스 번호. 연속적이거나 정렬된 순서를 보장하지는 않아요 |
| INDEX | NUMBER | 요소의 1부터 시작하는 인덱스 |
| VALUE | VARCHAR | 평탄화된 배열 요소의 값 |
쿼리는 원본(상관) 테이블의 컬럼에도 접근할 수 있어요. 원본의 한 행이 평탄화 뷰에서 여러 행이 되면, 입력 행의 값은 함수가 만든 행 수만큼 복제돼요.
예시 — 상수 입력에 대한 간단한 예:
SELECT table1.value
FROM TABLE(SPLIT_TO_TABLE('a.b', '.')) AS table1
ORDER BY table1.value;
+-------+
| VALUE |
|-------|
| a |
| b |
+-------+
LATERAL 키워드와 함께 쓰면 splittable 테이블의 각 행에 대해 함수가 상관 테이블처럼 실행돼요.
SELECT *
FROM splittable, LATERAL SPLIT_TO_TABLE(splittable.v, '.')
ORDER BY SEQ, INDEX;
+-------+-----+-------+-------+
| V | SEQ | INDEX | VALUE |
|-------+-----+-------+-------|
| a.b.c | 1 | 1 | a |
| a.b.c | 1 | 2 | b |
| a.b.c | 1 | 3 | c |
| d | 2 | 1 | d |
| | 3 | 1 | |
+-------+-----+-------+-------+