Introduction to Data Modeling in 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 command to insert new rows into a table.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 command to insert new rows into a tableTRIM
: SQL function to remove spaces at the start and end of of valuesLATERAL FLATTEN(INPUT => SPLIT())
: Snowflake function to split values into a rowsROW_NUMBER() OVER (ORDER BY)
: SQL function to generate a sequential numberGROUP BY
: SQL clause to aggregate data that have the same values-- Fill a entity with data from a query result
INSERT INTO table_name (column_name, other_columns)
SELECT
-- Generate a unique value using the row number
ROW_NUMBER() OVER (ORDER BY TRIM(alias.value)),
TRIM(alias.value)
FROM another_table,
-- Split a text attribute value based on a delimiter
LATERAL FLATTEN(INPUT => SPLIT(another_table.column_name, 'delimiter_value'))alias
-- Aggregate the data to ensure uniqueness of values
GROUP BY TRIM(alias.value);
Introduction to Data Modeling in Snowflake