Snowflake로 시작하는 데이터 모델링
Nuno Rocha
Director of Engineering






SELECT DISTINCT category
FROM allproducts;

SELECT TRIM(category)
FROM allproducts;

SELECT TRIM(f.value)
FROM allproducts,
LATERAL FLATTEN(INPUT => SPLIT(allproducts.category, ',')) f;

CREATE OR REPLACE TABLE categories (
category_id NUMBER(10,0) PRIMARY KEY,
category VARCHAR(255)
);
INSERT INTO: 테이블에 새 행을 삽입하는 SQL 명령INSERT INTO categories (category_id, category)
___;
INSERT INTO categories (category_id, category)
SELECT
___,
___
FROM allproducts;
INSERT INTO categories (category_id, category)
SELECT
___,
TRIM(f.value)
FROM allproducts,
LATERAL FLATTEN(INPUT => SPLIT(allproducts.category, ',')) f;
INSERT INTO categories (category_id, category)
SELECT
ROW_NUMBER() OVER (ORDER BY TRIM(f.value)),
TRIM(f.value)
FROM allproducts,
LATERAL FLATTEN(INPUT => SPLIT(allproducts.category, ',')) f;
INSERT INTO categories (category_id, category)
SELECT
ROW_NUMBER() OVER (ORDER BY TRIM(f.value)),
TRIM(f.value)
FROM allproducts,
LATERAL FLATTEN(INPUT => SPLIT(allproducts.category, ',')) f
GROUP BY TRIM(f.value);

INSERT INTO: 테이블에 새 행을 삽입하는 SQL 명령TRIM: 값의 시작과 끝 공백 제거 함수LATERAL FLATTEN(INPUT => SPLIT()): 값을 여러 행으로 분리하는 Snowflake 함수ROW_NUMBER() OVER (ORDER BY): 연속 번호를 생성하는 SQL 함수GROUP BY: 동일 값을 가진 데이터를 집계하는 SQL 절-- 쿼리 결과로 엔터티 채우기
INSERT INTO table_name (column_name, other_columns)
SELECT
-- 행 번호로 고유 값 생성
ROW_NUMBER() OVER (ORDER BY TRIM(alias.value)),
TRIM(alias.value)
FROM another_table,
-- 구분자를 기준으로 텍스트 속성 분리
LATERAL FLATTEN(INPUT => SPLIT(another_table.column_name, 'delimiter_value'))alias
-- 고유값 보장을 위해 집계
GROUP BY TRIM(alias.value);
Snowflake로 시작하는 데이터 모델링