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:移除值開頭與結尾空白的 SQL 函式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 資料建模入門