[Snowflake Partner Technical Bootcamp] 4. Service Layer
Service Layer
Intelligence Infrastructure์ธ ์์ ๊ด๋ฆฌํ ์๋น์ค๋ก์ ์๋ํ๋ฅผ ํตํด ์ํ์ ์ค์ด๊ณ ํจ์จ์ฑ์ ๊ฐ์ ํ์ฌ ์ฌ์ฉ์๊ฐ ์ค์ํ ์ผ์ ๋์ฑ ์ง์คํ ์ ์๋๋ก ๋์์ฃผ๋ ๊ณ์ธต์ด๋ค. Cloud Service ๊ณ์ธต์๋ ์ธ์ฆ, ๋ณด์, ๋ฐ์ดํฐ ๊ด๋ฆฌ ๋ฐ ์ฟผ๋ฆฌ ์ต์ ํ์ ๊ฐ์ด Snowflake ์ ์ฒด์์ ์กฐ์ ํ๋ ๋ชจ๋ ์์ ์ด ํฌํจ๋๋ค. Cloud Service ๊ณ์ธต์ ์๋ก ๋ค๋ฅธ ๊ฐ์ฉ ์์ญ์์ ์๋ํ๊ณ ์ก์ธ์ค ๋ฐ ์ฌ์ฉ ๊ฐ๋ฅ์ฑ์ด ๋์ ์ ๋ณด๋ฅผ ์ฌ์ฉํ๋ ์ํ ๋น์ ์ฅ ์ปดํจํ ๋ฆฌ์์ค์ด๋ค. DDL ๋ฐ DML๊ณผ ๊ฐ์ ๋ฐ์ดํฐ ์์ ์ ์ํ SQL ํด๋ผ์ด์ธํธ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํ๋ค.
์บ์ฑ ์๋ํ
์ฟผ๋ฆฌ๋ฅผ ์ฒ๋ฆฌํ๋๋ฐ ํ์ํ ์ปดํจํ ๋ฆฌ์์ค๋ ์ฟผ๋ฆฌ์ ํฌ๊ธฐ์ ๋ณต์ก์ฑ์ ๋ฐ๋ผ ๋ค๋ฅด๋ค. ์ฟผ๋ฆฌ๊ฐ ๋ณต์กํด์ง์๋ก ๋ ํฐ Virtual Warehouse๊ฐ ํ์ํ๊ฒ ๋๋ค. ์คํ ์ค์ธ ๊ฐ Warehouse๋ ์ฟผ๋ฆฌ๊ฐ Warehouse์์ ์ฒ๋ฆฌ๋ ๋ ์ก์ธ์ค ๋๋ ํ ์ด๋ธ ๋ฐ์ดํฐ์ ์บ์๋ฅผ ๋ณด์ ํ๊ณ ์๋ค. ์ด๋ ๊ฒ ๋๋ฉด ๋์ผํ ์ฟผ๋ฆฌ ์์ ์ ์ํํ ๋ ํ ์ด๋ธ์์ ๋ฐ์ดํฐ๋ฅผ ์ฝ๋ ๊ฒ์ด ์๋ ์บ์์์ ์ฝ์ ์ ์๊ธฐ ๋๋ฌธ์ ํ์ ์ฟผ๋ฆฌ์ ์ฑ๋ฅ์ด ํฅ์๋๋ค. ์ด๋ฌํ ์บ์์ ํฌ๊ธฐ๋ Warehouse์ ์ปดํจํ ๋ฆฌ์์ค์ ์ํด ๊ฒฐ์ ๋๋ค.
์์์ ์ค๋ช ํ ์ฟผ๋ฆฌ ์ฒ๋ฆฌ ๋ฐฉ์์ ๋์ํํ๋ฉด ์๋์ ๊ฐ๋ค. ๋ฉํ๋ฐ์ดํฐ ์บ์๋ ์ฟผ๋ฆฌ์ ๋ํ ์ต์ ํต๊ณ์ ๋ณด(Metadata)๋ฅผ ์ ์งํ๊ณ ์๊ณ ์ด์ ๋ํ ๊ฒฐ๊ณผ๋ฅผ ๊ฒฐ๊ณผ ์บ์๊ฐ ์ต๋ 24์๊ฐ ๋์ ์ ์งํ๊ณ ์๋ค. ์ดํ ๋ฐ์ดํฐ ๋ณ๊ฒฝ์ด ๋ฐ์ํ์ง ์์ ํ ์ด๋ธ์ ๋ํด ๋์ผ ์ฟผ๋ฆฌ๊ฐ ๋ฐ์ํ๋ฉด ํ ์ด๋ธ์์ ๋ฐ์ดํฐ๋ฅผ ์ฝ๋ ๊ฒ์ด ์๋ ์บ์์์ ์ฝ์ ์ ์๊ธฐ ๋๋ฌธ์ ์ฟผ๋ฆฌ ์๊ฐ์ ํฌ๊ฒ ์ค์ด๋ ๋ฑ ํ์ ์ฟผ๋ฆฌ์ ์ฑ๋ฅ์ด ํฅ์๋๋ค.
์๋ก์ด ์ฌ์ฉ์์ ์ฟผ๋ฆฌ๋ฅผ ์ํํ๊ธฐ ์ํด Warehouse๊ฐ Storage Layer์ ์ ์ฅ๋์ด ์๋ ํ ์ด๋ธ์์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด๋ค์ด๊ฒ ๋๋ค.
ํ์ง๋ง ๋์ผํ ์ฟผ๋ฆฌ ์ํ ๊ฒฐ๊ณผ๋ ์ปดํจํ ์์ด ์บ์ฑ๋ ๊ฒฐ๊ณผ์ ์ ๋ฐํํ๊ณ ํด๋น ๊ฒฐ๊ณผ๊ฐ์ Result Cache๊ฐ 24์๊ฐ๋์ ๊ฐ์ง๊ณ ์๊ธฐ ๋๋ฌธ์ ๋น ๋ฅธ ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ ธ์ฌ ์ ์๊ฒ ๋๋ค.
์ดํ ๋ณ๊ฒฝ๋ ์ฟผ๋ฆฌ๋ฅผ ์ํํ ๋๋ ์ง์ ๋ ์ฟผ๋ฆฌ์ ๋ฐ์ดํฐ๊ฐ ํ์ํ ๋๋ง๋ค ์๊ฒฉ ๋์คํฌ ์คํ ๋ฆฌ์ง์์ ๊ฒ์๋์ด SSD ๋ฐ ๋ฉ๋ชจ๋ฆฌ์ ์บ์๋์ด ์๊ฒฉ ๋์คํฌ Read๋ฅผ ์ต์ํ ํ๋ค.
Elastic Performance (SPEED UP์ ์ํ ๊ธฐ๋ฅ)
snowflake์์๋ ์๋์ ๋ํ ํผํฌ๋จผ์ค๋ฅผ ์ฌ๋ฆฌ๊ธฐ ์ํด ์ฌ๋ฌ ๊ธฐ๋ฅ๋ค์ ์ ๊ณตํ๋ค.
Auto Clustering vs Re Clustering
Auto Clustering์ ํ ์ด๋ธ์ ์์ฑํ ๋ ํด๋ฌ์คํฐ๋ง ํค๋ก ์ค์ ๋ ์ปฌ๋ผ์ ๊ธฐ์ค์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ํ์ฌ ์ฟผ๋ฆฌ ์ฑ๋ฅ์ ํฅ์์ํค๋ ๊ธฐ์ ์ด๋ค. ์ผ๋ฐ์ ์ผ๋ก ํ ์ด๋ธ์ ์ ์ฅ๋ ๋ฐ์ดํฐ๋ ํด๋ฌ์คํฐ๋ง ํค๋ก ์ค์ ๋ ์ปฌ๋ผ์ ๊ธฐ์ค์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ถํ ํ ๋ค ๋ง์ดํฌ๋ก ํํฐ์ ๋จ์๋ก ์ ์ฅ๋๋ค. Snowflake๋ ํด๋ฌ์คํฐ๋ง ์ ๋ณด๋ฅผ ํ์ฉํด์ ์ฟผ๋ฆฌ๋ฅผ ์ํํ ๋ ๋ง์ดํฌ๋ก ํํฐ์ ์ ๋ถํ์ํ ์ค์บ์ ๋ฐฉ์งํ์ฌ ์ฟผ๋ฆฌ์ ์ฑ๋ฅ์ ํฅ์์ํจ๋ค. Auto Clustering์ ์ฌ์ฉํ๋ฉด ํด๋ฌ์คํฐ๋ง ๋ ํ ์ด๋ธ์ ์ํ๋ฅผ ์ง์์ ์ผ๋ก ๋ชจ๋ํฐ๋งํ๊ณ ์๋ค๊ฐ ๋ฐ์ดํฐ์ ๋ณ๊ฒฝ์ด ์ผ์ด๋ ๋ ๋ค์ Clustering์ด ํ์ํ๋ค๊ณ ํ๋จ๋๋ฉด ์๋(Auto)์ผ๋ก Clusteringํ๊ฒ ๋๋ค. ๋ง์ฝ ํด๋ฌ์คํฐ๋ง ํค๋ฅผ ๋ช ์์ ์ผ๋ก ์ง์ ํ์ง ์์๋ค๋ฉด Snowflake์์ ํ ์ด๋ธ์ ์ฒซ๋ฒ์งธ ์ปฌ๋ผ์ด ๊ธฐ๋ณธ ํด๋ฌ์คํฐ๋ง ํค๋ก ์ค์ ํ๊ฒ ๋๋ค.
-- col1, col2 ์ปฌ๋ผ์ ํด๋ฌ์คํฐ ํค๋ก ์ง์
> CREATE TABLE my_table (col1 STRING, col2 INTERGER, col3 DATE) CLUSTER BY (col1, col2);
ํด๋ฌ์คํฐ๋ง ๋ ํ ์ด๋ธ์ด ์ ์๋ ํ ํญ์ ํด๋ฌ์คํฐ๋ง์ด ์ผ์ด๋๊ฒ ๋๋ ๊ฒ์ ์๋๋ค. Snowflake๋ ๋ฐ์ดํฐ์ ๋ณ๊ฒฝ์ด ๋ฐ์ํ๊ณ ํด๋ฌ์คํฐ๋ง์ด ํ์ํ๋ค๊ณ ํ๋จ์ด ๋ ๋ ๋ค์ ํด๋ฌ์คํฐ๋ง ํ๊ฒ ๋๋ค. ์ด๋ฌํ ์์ ์ ALTER TABLE โฆ SUSPEND / RESUME RECLUSTER๋ฅผ ์ฌ์ฉํ์ฌ ์ธ์ ๋ ์ง ํด๋ฌ์คํฐ๋ง ๋ ํ ์ด๋ธ์ ๋ํ Auto Clustering์ ์ผ์ ์ค์งํ๊ณ ๋ค์ ์์ํ ์ ์๋ค. ์ผ์ ์ค์ง๋๋ฉด ํ ์ด๋ธ์ ํด๋ฌ์คํฐ๋ง ์ํ์ ์๊ด ์์ด ์๋์ผ๋ก Re Clustering ๋์ง ์์ผ๋ฏ๋ก ๊ด๋ จ ํฌ๋ ๋ง ๋น์ฉ์ด ๋ฐ์ํ์ง ์๋๋ค.
์ด๋ฌํ ๋ฐฉ์์ Auto Clustering์๋ ํ๊ณ๊ฐ ์๋ค. ์๋ก์ด ๋ฐ์ดํฐ์ ์ ์ ๊ณผ ๋ค์ํ๊ณ ๋ณต์กํ ์ฟผ๋ฆฌ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐ ํ์ฌ์ ํด๋ฌ์คํฐ ํค๋ก ๋ค์ ํด๋ฌ์คํฐ๋ง์ ํด๋ ๋ ๋์ ์ฟผ๋ฆฌ ์ฑ๋ฅ ๊ฐ์ ์ ์ด๋ค๋ด์ง ๋ชปํ๋ค๊ณ ํ๋จ์ด ๋๋ฉด ์ฌ์ฉ์๊ฐ ์์๋ก ๋ค๋ฅธ ์ปฌ๋ผ์ ํด๋ฌ์คํฐ ํค๋ก ์ง์ ํด ํด๋ฌ์คํฐ๋ง ํ ์ ์๋ค. ์ด๋ฌํ ๋ฐฉ์์ Re Clustering์ด๋ผ๊ณ ํ๋ค.
Re Clustering์ ํด๋ฌ์คํฐ๋ง ๋ ํ ์ด๋ธ์์ ์ฟผ๋ฆฌ๊ฐ ์ถฉ๋ถํ ๋น ๋ฅด์ง ์๊ณ ์์ฃผ ํํฐ๋ง ๋๋ ์กฐ๊ฑด ์ปฌ๋ผ์ด ์๋ ํ ์ด๋ธ์ ๋ํ์ฌ ์ต์ ์ ํด๋ฌ์คํฐ๋ง์ ์ ์งํ๊ธฐ ์ํด ํ ์ด๋ธ์ ์ฃผ๊ธฐ์ /์ ๊ธฐ์ ์ผ๋ก Re Clustering ํ๋ ์์ ์ ๋งํ๋ค. ํ ์ด๋ธ์ ๋ฐ์ดํฐ๊ฐ Re Clustering ๋ ๋๋ง๋ค ํ ์ด๋ธ์ Clustering Key๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ์ด ๋ฌผ๋ฆฌ์ ์ผ๋ก ๊ทธ๋ฃนํ๋์ด ์๋ก์ด Micro-Partition์ ์์ฑํ๊ฒ ๋๋ค. ๋ ๊ฐ ์ด์์ ์ปฌ๋ผ์ ๋ํ Clustering Key๋ฅผ ์ง์ ํ ์ ์์ผ๋ฉฐ ์ด๋ฌํ Clustering Key์ ๋ฐ๋ผ ๊ทธ๋ฃนํํ์ฌ ์ ์ฅํ๊ฒ ๋๋ค.
์๋์ ์๋ฅผ ๋ณด๋ฉฐ ์ดํดํด๋ณด์. ํ ์ด๋ธ์ Re Clustering ํด์ Micro-Partition ์ค์บ์ ์ค์ฌ ์ฟผ๋ฆฌ ์ฑ๋ฅ์ ํฅ์์ํค๋ ์์์ด๋ค.
๋ฐ์ดํฐ๊ฐ ๋ค์ด์จ ์์์ ๋ฐ๋ผ Micro-Partition 1~4์ ๊ฑธ์ณ ํด๋ฌ์คํฐ๋ง ๋๋ค. ๊ธฐ์กด ์ฟผ๋ฆฌ๋ Micro-Partition 1, 2, 3์ ์ค์บํด์ผ ํ๋ค. ์ดํ date์ type ์ปฌ์ผ๋ก Re Clustering Key๋ฅผ ์ ์ํ๊ณ Re Clustering์ ์ํํ๋ฉด ์๋ก์ด Micro-Partition (5~8)์ด ์์ฑ๋๋ค. Re Clustering ์ดํ ์์ ์ํํ ๋์ผํ ์ฟผ๋ฆฌ๋ ์ด์ ๊ณผ ๋ค๋ฅด๊ฒ Micro-Partition 5๋ง ์ค์บํ๊ฒ ๋์ด ๋ ๋น ๋ฅธ ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ ธ์ฌ ์ ์๊ฒ ๋๋ค.
AUTO CLUSTERING | RE CLUSTERING |
---|---|
DML ์์ ์ด ๋น๋ฒํ๊ฒ ์ผ์ด๋ ํ์ฌ ํํฐ์ ๋ ๊ตฌ์กฐ๊ฐ ๋นํจ์จ์ ์ธ ๊ฒฝ์ฐ | DML ์์ ์ด ๋น๋ฒํ๊ฒ ์ผ์ด๋ ํ์ฌ ํํฐ์ ๋ ๊ตฌ์กฐ๊ฐ ๋นํจ์จ์ ์ธ ๊ฒฝ์ฐ |
Micro-Partition์ ์ง๋จํ์ฌ ์ฌ๊ตฌ์ฑ | ์ง์ Clustering Key๋ฅผ ์ง์ ํ ์ ์์ |
๋ฐฑ๊ทธ๋ผ์ด๋์์ SERVERLESS๋ก ์๋ Re Clustering | Multi Column์ ๋ํ Cluster Key ์ง์ ๊ฐ๋ฅ |
Re Clustering ๋๋ ๋์ DML ์ํ ๊ฐ๋ฅ | TB ๋จ์๊ฐ ๋๋ ํ ์ด๋ธ์ ๋ํด์ ๊ถ๊ณ |
SEARCH OPTIMIZATION
Search Optimization(๊ฒ์ ์ต์ ํ)์ RDBMS์ ์ธ๋ฑ์ฑ ๊ธฐ๋ฅ๊ณผ ๋น์ทํ๋ค. ์ฝ๊ฒ ๋งํด์ ์ฟผ๋ฆฌ ์กฐํ ์กฐ๊ฑด ๋ณ๋ก ์ธ๋ฑ์ค๋ฅผ ์์ฑํด์ ์ฟผ๋ฆฌ ์ฑ๋ฅ์ ๋์ด๋ ๊ธฐ์ ์ด๋ค. ์ต์ ์ ์ฟผ๋ฆฌ ์๋ต ์๋๋ฅผ ๋ณด์ฅํ๊ธฐ ์ํด SEARCH OPTIMIZATION
ํค์๋๋ฅผ ํตํด ํน์ ์ฟผ๋ฆฌ ์กฐ๊ฑด์ ๋ํ ์ปฌ๋ผ์ ์ง์ ํ์ฌ ์ฟผ๋ฆฌ ์ฑ๋ฅ์ ํฅ์ ์ํค๋ ๊ฒ์ ๋ชฉํ๋ก ํ๋ค.
Search Optimization์ ๋ค์๊ณผ ๊ฐ์ ์ฌ์ฉ์๋ฅผ ๋์์ผ๋ก ํน์ ์ ํ์ ์ฟผ๋ฆฌ ์ฑ๋ฅ์ ํฌ๊ฒ ํฅ์ ์ํค๋ ๊ฒ์ ๋ชฉํ๋ก ํ๋ค.
- ๊ณ ๋๋ก ์ ํ์ ์ธ ์กฐ๊ฑด์ ์ ์ฌ์ฉํ์ฌ ๋น ๋ฅธ ์ฑ๋ฅ์ ์๋ต์ด ํ์ํ ๋น์ฆ๋์ค ์ฌ์ฉ์
- ๋ฐฉ๋ํ ์์ ๋ฐ์ดํฐ ๋ด์์ ํน์ ์๋ธ ์งํฉ์ ์ฐพ๋ ๋ถ์๊ฐ
- ๊ด๋ฒ์ํ ๊ฒ์ ์กฐ๊ฑด(equality, IN, ARRAY_CONTAINS, ARRAYS_OVERLAP ๋ฑ) ์ธํธ๋ฅผ ๋์์ผ๋ก ๊ฒ์ํ๋ ๋ฐ์ดํฐ ์ดํ๋ฆฌ์ผ์ด์
Search Optimization ์๋น์ค๋ ํด๋น ํ ์ด๋ธ๊ณผ ์ปฌ๋ผ์ ๋ํ Search Access Path(๊ฒ์ ์ก์ธ์ค ๊ฒฝ๋ก)๋ฅผ ์์ฑํ์ฌ ์ฟผ๋ฆฌ ์๋๋ฅผ ๋ณด์ฅํ๋ ๋ฐฉ์์ด๋ค. ์ด๋ ๋ฐฑ๊ทธ๋ผ์ด๋์์ SERVERLESS๋ก ์ํ๋๋ฉฐ ๊ฒ์ ์ก์ธ์ค ๊ฒฝ๋ก ์์ฑ ๋ฐ ์ ์ง ๊ด๋ฆฌ๋ฅผ ๋ด๋นํ๊ฒ ๋๋ค.
Search Optimization์ ์ฌ์ฉํ๋ฉด ํด๋น ์ฟผ๋ฆฌ์ ์ฌ์ฉ๋๋ ํ ์ด๋ธ๊ณผ ์ปฌ๋ผ์ ๋ํ ๊ฒ์ ์ต์ ํ๋ฅผ ๊ตฌ์ฑํ ์ ์๋ค. Search Optimization ์๋น์ค๋ ํด๋น ํ ์ด๋ธ๊ณผ ์ด์ ๋ํ Search Access Path(๊ฒ์ ์ก์ธ์ค ๊ฒฝ๋ก)๋ฅผ ์์ฑํ๊ฒ ๋๊ณ ์ด๋ ๋ฐฑ๊ทธ๋ผ์ด๋์์ SERVERLESS ํ๊ฒฝ์ผ๋ก ์ํ๋๋ค. ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์คํ๋๋ ์ ์ง ๊ด๋ฆฌ ์๋น์ค๋ Search Access Path(๊ฒ์ ์ก์ธ์ค ๊ฒฝ๋ก) ์์ฑ ๋ฐ ์ ์ง ๊ด๋ฆฌ๋ฅผ ๋ด๋นํ๋ค. ์๋ ์์๋ฅผ ์ดํด๋ณด์.
> ALTER TABLE t1 ADD SEARCH OPTIMIZATION ON EQUALITY(col1), RANGE(col2), ORDER(col3);
์ ์ฟผ๋ฆฌ๋ t1
ํ
์ด๋ธ์์ col1
์ด์์์ ๋๋ฑ ์กฐ๊ฑด ๊ฒ์, col2
์ด์์์ ๋ฒ์ ๊ฒ์, col3
์ด์์์ ์ ๋ ฌ ๊ฒ์์ ๋ํด Search Optimization์ ์ ์ฉํ๋ค.
Search Optimization์ด ์ ์ฉ๋ ํ ์ด๋ธ์์ index๋ฅผ ์ฌ์ฉํ ์ ์๋ ์กฐํ ์ฟผ๋ฆฌ๋ฌธ ์์์ด๋ค.
-- col1 ์ด์์ ๋๋ฑ ์กฐ๊ฑด ๊ฒ์
> SELECT * FROM t1 WHERE col1 = 'value';
-- col2 ์ด์์ ๋ฒ์ ์กฐ๊ฑด ๊ฒ์
> SELECT * FROM t1 WHERE col2 > 10 AND col2 < 20;
-- col3 ์ด์์ ์ ๋ ฌ ์กฐ๊ฑด ๊ฒ์
> SELECT * FROM t1 ORDER BY col3;
์ ์ฟผ๋ฆฌ๋ค์ ๊ฐ๊ฐ col1
, col2
, col3
์ด์์์ ๊ฒ์์ ๋ํด Search Optimization์ด ์ ์ฉ๋์ด ์์ผ๋ฏ๋ก index๋ฅผ ์ฌ์ฉํ์ฌ ๋น ๋ฅธ ๊ฒ์์ ์ํํ ์ ์๋ค.
๋ค์์ ๊ฐ์ ๋๋ฑ ์กฐ๊ฑด ๊ฒ์์ผ์ง๋ผ๋ ์ฌ์ฉ ๋ฐฉ์์ ๋ฐ๋ผ index๋ฅผ ๋ค๋ฅด๊ฒ ์ค์ ํ ์๋ ์๋ ์์์ด๋ค.
์ปฌ๋ผ col1 ,col2, col3 ์ ๋ํ Equality ๊ฒ์์ ์ฌ์ฉํ์ฌ ๊ฒ์์ ์ต์ ํ
> ALTER TABLE t1 ADD SEARCH OPTIMIZATION ON EQUALITY(col1, col2, col3);
-- ์กฐ๊ฑด์ ์ col1, col2๋ง ์์ผ๋ฉด ์ต์ ์ ์ฑ๋ฅ ๋์ค์ง ์์
์์ ์ฟผ๋ฆฌ๋ ์กฐ๊ฑด๋ฌธ์ col1
, col2
, col3
์ปฌ๋ผ์ ๋ชจ๋ ์ฌ์ฉํด์ผ ์ต์ ์ ์ฑ๋ฅ์ ๋ฝ์๋ผ ์ ์๋ค.
ON ์ ์์ ๋์ผํ ๊ฒ์ ๋ฐฉ๋ฒ์ ๋ ๋ฒ ์ด์ ์ง์ ํ ์๋ ์๋ค.
> ALTER TABLE t1 ADD SEARCH OPTIMIZATION ON EQUALITY(col1), EQUALITY(col2, col3);
-- ์กฐ๊ฑด์ ์ col1๋ง ์์ด๋ ๋์ง๋ง col2๋ง ์์ผ๋ฉด ์ต์ ์ ์ฑ๋ฅ ๋์ค์ง ์์
์์ ์ฟผ๋ฆฌ๋ ์กฐ๊ฑด๋ฌธ์ col2
์ปฌ๋ผ๋ง ์ฌ์ฉํ๊ฒ ๋๋ค๋ฉด ์ต์ ์ ์ฑ๋ฅ์ด ๋์ค์ง ์๋๋ค. ๋ฐ๋ผ์ ์ฟผ๋ฆฌ ์ฑ๋ฅ์ ํฅ์ ์ํค๊ธฐ ์ํ ์ ์ ํ Search Optimization ์ค์ ์ด ์ค์ํ๋ค.
SEARCH OPTIMIZATION ์๋น์ค ๋น์ฉ ๊ด๋ฆฌ
SEARCH OPTIMIZATION ์๋น์ค๋ ์คํ ๋ฆฌ์ง ๋ฐ ์ปดํจํ ๋ฆฌ์์ค ๋น์ฉ์ ์ํฅ์ ๋ฏธ์น๋ค.
- ์คํ ๋ฆฌ์ง ๋ฆฌ์์ค : SEARCH OPTIMIZATION ์๋น์ค๋ ๊ฒ์ ์ต์ ํ๊ฐ ํ์ฑํ๋ ๊ฐ ํ ์ด๋ธ์ ๋ํ ๊ณต๊ฐ์ด ํ์ํ ๊ฒ์ ์ก์ธ์ค ๊ฒฝ๋ก(Search Access Path)์ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ์์ฑํ๋ค. ๊ฒ์ ์ก์ธ์ค ๊ฒฝ๋ก์ ์คํ ๋ฆฌ์ง ๋น์ฉ์ ์ฌ๋ฌ ์์ธ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋ค. ์๋ฅผ ๋ค๋ฉด ๋ชจ๋ ์ปฌ๋ผ์ด ๊ฒ์ ์ก์ธ์ค ๊ฒฝ๋ก๋ฅผ ์ฌ์ฉํ๋ ๋ฐ์ดํฐ ํ์ ์ ๊ฐ์ง๊ณ ์๊ณ ๊ฐ ์ปฌ๋ผ์ ๋ชจ๋ ๋ฐ์ดํฐ ๊ฐ์ด ๊ณ ์ ํ ๊ฒฝ์ฐ ํ์ํ ์คํ ๋ฆฌ์ง๋ ์๋ณธ ํ ์ด๋ธ์ ํฌ๊ธฐ๋งํผ ์ปค์ง ์ ์๋ค.
- ์ปดํจํ ๋ฆฌ์์ค : ๊ธฐ๋ณธ์ ์ผ๋ก ํ ์ด๋ธ์ Search Optimization์ ์ถ๊ฐํ๋ฉด ๋ฆฌ์์ค๊ฐ ์๋ชจ๋๊ณ ์ด๋ฅผ ์ ์งํ๊ธฐ ์ํ ๋ฆฌ์์ค๋ ๋ค๋ฐ๋ฅธ๋ค. ๋ํ ํ ์ด๋ธ์ ๋ํ ๋ฐ์ดํฐ ๋ณ๊ฒฝ ์ฌํญ์ด ๋ง์ ๋ ๋ ๋ง์ ๋ฆฌ์์ค๊ฐ ์๋ชจ๋๋ค.
โป Auto Clustering์ ๊ฒ์ ์ต์ ํ๋ฅผ ํตํด ํ ์ด๋ธ์ ์ฟผ๋ฆฌ ๋๊ธฐ ์๊ฐ์ ๊ฐ์ ํ๋ ๋์์ ๊ฒ์ ์ต์ ํ์ ์ ์ง ๊ด๋ฆฌ ๋น์ฉ์ ๋์ฑ ์ฆ๊ฐ ์ํฌ ์ ์๋ค. ํ ์ด๋ธ์ ๋ณ๋๋ฅ ์ด ๋์ ๊ฒฝ์ฐ Auto Clustering์ ํ์ฑํํ๊ณ ํ ์ด๋ธ์ ๋ํ ๊ฒ์ ์ต์ ํ๋ฅผ ๊ตฌ์ฑํ๋ ํ ์ด๋ธ์ด ๊ฒ์ ์ต์ ํ์ฉ์ผ๋ก ๊ตฌ์ฑ๋ ๊ฒฝ์ฐ๋ณด๋ค ์ ์ง ๊ด๋ฆฌ ๋น์ฉ์ด ๋์์ง ์ ์๋ค.
Snowflake๋ ์ฌ์ฉํ ์ค์ ๋ฆฌ์์ค์ ๋ํด์๋ง ๊ณ์ ์ ์๊ธ์ ์ฒญ๊ตฌํ์ฌ ํจ์จ์ ์ธ ํฌ๋ ๋ง ์ฌ์ฉ์ ๋ณด์ฅํ๋ค. ํ์ง๋ง ๋ฌด๋ถ๋ณํ ์ฌ์ฉ์ผ๋ก ๊ณผ๋ํ ์๊ธ(1์ด ๋จ์๋ก ๊ณ์ฐ)์ด ์ฒญ๊ตฌ๋ ์ ์์ผ๋ฏ๋ก ์ฒ์์ ๋ช ๊ฐ์ ํ ์ด๋ธ์๋ง ๊ฒ์ ์ต์ ํ๋ฅผ ์ถ๊ฐํ๋ ๋ฑ ๊ฒ์ ์ต์ ํ๋ฅผ ์ฌ์ฉํ๋๋ฐ ๋ฐ์ํ๋ ์ด์ ๊ณผ ์๊ธ์ ๋ฉด๋ฐํ ๋ชจ๋ํฐ๋ง ํ ๊ฒ์ ๊ถ์ฅํ๋ค.
๋น์ฉ ์ถ์
SYSTEM$ESTIMATE_SEARCH_OPTIMIZATION_COSTS ํจ์๋ฅผ ํตํด ๋น์ฉ์ ์์ธกํ ์ ์๋ค. ์ด๋ฅผ ํตํด ํ ์ด๋ธ์ ๊ฒ์ ์ต์ ํ๋ฅผ ์ถ๊ฐํ๊ณ ๊ฒ์ ์ต์ ํ๋ฅผ ์ํด ํน์ ์ปฌ๋ผ์ ๊ตฌ์ฑํ๋ ๋น์ฉ์ ์ถ์ ํ๋ค. ์๋๋ ํ ์ด๋ธ์ ๋ํ ๊ฒ์ ์ต์ ํ ๋น์ฉ์ ์์ธกํ๋ ์ฟผ๋ฆฌ์ด๋ค.
-- ํน์ ํ
์ด๋ธ์ ๋ํ ๊ฒ์ ์ต์ ํ ๋น์ฉ ์์ธก
> SYSTEM$ESTIMATE_SEARCH_OPTIMIZATION_COSTS('<table_name>')
> SELECT SYSTEM$ESTIMATE_SEARCH_OPTIMIZATION_COSTS('TABLE_WITH_SEARCH_OPT');
+---------------------------------------------------------------------------+
| SYSTEM$ESTIMATE_SEARCH_OPTIMIZATION_COSTS('TABLE_WITH_SEARCH_OPT') ย ย ย ย |
|---------------------------------------------------------------------------|
| { ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย |
| ย "tableName" : "TABLE_WITH_SEARCH_OPT", ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย |
| ย "searchOptimizationEnabled" : true, ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย |
| ย "costPositions" : [ { ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย |
| ย ย "name" : "BuildCosts", ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย |
| ย ย "computationMethod" : "NotAvailable", ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย |
| ย ย "comment" : "Search optimization is already enabled." ย ย ย ย ย ย ย ย |
| ย }, { ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย |
| ย ย "name" : "StorageCosts", ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย |
| ย ย "costs" : { ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย |
| ย ย ย "value" : 0.052048, ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย |
| ย ย ย "unit" : "TB" ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย |
| ย ย }, ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย |
| ย ย "computationMethod" : "Measured" ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย |
| ย }, { ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย |
| ย ย "name" : "Benefit", ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย |
| ย ย "computationMethod" : "NotAvailable", ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย |
| ย ย "comment" : "Currently not supported." ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย |
| ย }, { ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย |
| ย ย "name" : "MaintenanceCosts", ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย |
| ย ย "costs" : { ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย |
| ย ย ย "value" : 30.248, ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย |
| ย ย ย "unit" : "Credits", ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย |
| ย ย ย "perTimeUnit" : "MONTH" ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย |
| ย ย }, ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย |
| ย ย "computationMethod" : "EstimatedUpperBound", ย ย ย ย ย ย ย ย ย ย ย ย ย |
| ย ย "comment" : "Estimated from historic change rate over last ~11 days." |
| ย } ] ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย |
| } ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย |
+---------------------------------------------------------------------------+
๊ฐ ์์ฑ์ ๋ํด ์์๋ณด์.
Property | Description |
---|---|
tableName | ํ ์ด๋ธ ๋ช |
searchOptimizationEnabled | ํ ์ด๋ธ์ ๋ํ ๊ฒ์ ์ต์ ํ ์ค์ ์ฌ๋ถ |
costPositions | ํ ์ด๋ธ์ ๊ฒ์ ์ต์ ํ๋ฅผ ์ถ๊ฐํ๋ ์์ ๋น์ฉ ์ค๋ช |
costPositions์ name ๊ฐ์ฒด | Description |
---|---|
BuildCosts | ํ ์ด๋ธ์ ๋ํ ๊ฒ์ ์ก์ธ์ค ๊ฒฝ๋ก๋ฅผ ๋น๋ํ๋ ์์ ๋น์ฉ |
StorageCosts | ํ ์ด๋ธ์ ๊ฒ์ ์ก์ธ์ค ๊ฒฝ๋ก์ ํ์ํ ์คํ ๋ฆฌ์ง ๊ณต๊ฐ์ ์์ ํฌ๊ธฐ(TB) |
Benefit | ํ์ฌ ๋น์ฉ ์ ๋ณด๊ฐ ํฌํจ๋์ด ์์ง ์์ |
MaintenanceCosts | ํ ์ด๋ธ์ ๋ํ ๊ฒ์ ์ก์ธ์ค ๊ฒฝ๋ก ์ ์ง๋ณด์์ ์์ ๋น์ฉ |
์ผ๋ฐ์ ์ผ๋ก ๋น์ฉ์ ๋ค์์ ๋น๋กํ๋ค.
- ๊ธฐ๋ฅ์ด ํ์ฑํ๋ ํ ์ด๋ธ ์์ ํด๋น ํ ์ด๋ธ์ ๊ณ ์ ๊ฐ ์
- ํ ์ด๋ธ์์ ๋ณ๊ฒฝ๋๋ ๋ฐ์ดํฐ์ ์
๋น์ฉ ์ ๊ฐ
๊ฒ์ ์ต์ ํ๋ฅผ ํ์ฑํํ ํ ์ด๋ธ์ ์ ์คํ๊ฒ ์ ํํ์ฌ ๋น์ฉ์ ์ ์ดํ ์ ์๋ค. ๋น์ฉ์ ์ค์ด๊ธฐ ์ํ ๋ค์๊ณผ ๊ฐ์ ์์ ์ ๊ถ์ฅํ๋ค.
- DML ์์
์ผ๊ด ์ฒ๋ฆฌ ๊ถ์ฅ
- DELETE : ํ ์ด๋ธ์ด ๊ฐ์ฅ ์ต๊ทผ ๊ธฐ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๊ฒฝ์ฐ ์ค๋๋ ๋ฐ์ดํฐ๋ฅผ ์ญ์ ํ์ฌ ํ ์ด๋ธ์ ๋ค๋ฌ์ ๋ ๊ฒ์ ์ต์ ํ ์๋น์ค์์ ์ ๋ฐ์ดํธ๋ฅผ ๊ณ ๋ คํด์ผ ํ๋ค. ์ฆ DELETE ๋น๋๋ฅผ ์ค์์ผ๋ก์จ ๋น์ฉ์ ์ ๊ฐํ ์ ์๋ค.
- INSERT, UPDATE, MERGE : ํ ์ด๋ธ์์ ์ด๋ฌํ ์ ํ์ DML ์์ ์ ์ผ๊ด ์ฒ๋ฆฌํ๋ฉด ๊ฒ์ ์ต์ ํ ์๋น์ค์ ์ ์ง ๊ด๋ฆฌ ๋น์ฉ์ ์ ๊ฐํ ์ ์๋ค.
- ์ ์ฒด ํ ์ด๋ธ์ RE CLUSTERING ํ๋ ๊ฒฝ์ฐ RE CLUSTERING ํ๊ธฐ ์ ์ SEARCH OPTIMIZATION ์์ฑ์ ์ญ์ ํ ๋ค์ RE CLUSTERING ํ ํ ํ ์ด๋ธ์ SEARCH OPTIMIZATION ์์ฑ์ ๋ค์ ์ถ๊ฐํ๋ค.
3. Materialized View
Materialized View๋ ๋ฐ๋ณต์ ์ธ ์ฟผ๋ฆฌ ์ฐ์ฐ์ ์๊ฐ๊ณผ ๋น์ฉ์ ๋ญ๋นํ์ง ์๋๋ก ์์ฃผ ์ฌ์ฉํ๋ ์์ธก ๋ฐ ์ง๊ณ๋ฅผ ๋ฏธ๋ฆฌ ์ ์ฅํ๋ ๊ณ์ฐ๋ ๋ฐ์ดํฐ ์ธํธ์ด๋ค. ๋ฐ์ดํฐ๊ฐ ๋ฏธ๋ฆฌ ๊ณ์ฐ๋์ด ์ ์ฅ๋๊ธฐ ๋๋ฌธ์ Materialized View์ ์ฟผ๋ฆฌ๋ฅผ ์คํํ๋ ๊ฒ์ด ๊ธฐ๋ณธ ํ ์ด๋ธ์ ๋ํด ์ฟผ๋ฆฌ๋ฅผ ์คํํ๋ ๊ฒ๋ณด๋ค ๋น ๋ฅด๋ค. Materialized View๋ ์ผ๋ฐ์ ์ผ๋ก ๋ฐ๋ณต๋๋ ์ฟผ๋ฆฌ ํจํด์ผ๋ก ๊ตฌ์ฑ๋ ์ํฌ๋ก๋์ ๋ํ ์ฟผ๋ฆฌ ์ฑ๋ฅ์ ๊ฐ์ ํ๋๋ก ์ค๊ณ๋์๋ค. ๋น์ฉ์ด ๋ง์ด ๋๋ ์ง๊ณ, ํ๋ก์ ์ ๋ฐ ์ ํ ์์ , ํนํ ์์ฃผ ์คํ๋๋ ๋๊ท๋ชจ ๋ฐ์ดํฐ ์ธํธ์์ ์คํ๋๋ ์์ ์๋๋ฅผ ๋์ผ ์ ์๋ค. ๋ํ ์์ Storage Layer์์ ์ค๋ช ํ๋ ๊ฒ์ฒ๋ผ Snowflake ์ธ๋ถ์ ์๋ External Table(์ธ๋ถ ํ ์ด๋ธ)์ ๋ํ ์ฟผ๋ฆฌ ์กฐํ๋ ๊ทธ ์๋๊ฐ ๋๋ฆฌ๋ค๋ ๋จ์ ์ด ์์๋ค. ๊ทธ๋ฌ๋ ์ด๋ ์ธ๋ถ ํ ์ด๋ธ์ ๊ธฐ๋ฐ์ผ๋ก ํ๋ Materialized View๋ก ์ฟผ๋ฆฌ ์ฑ๋ฅ์ ํฅ์ ์ํฌ ์ ์๋ค. ์๋ ๊ทธ๋ฆผ์ ์ธ๋ถ ํ ์ด๋ธ์ ๊ธฐ๋ฐ์ผ๋ก Materialized View๋ฅผ ์์ฑํ๋ ์์์ด๋ค.
Materialized View ๋ฅผ ์์ฑํ๋ ๊ตฌ๋ฌธ์ ์๋์ ๊ฐ๋ค.
> CREATE MATERIALIZED VIEW my_mv
COMMENT='Test View'
AS
SELECT col1, col2 FROM my_table;
Materialized View์ ์ฅ์
- ๋์ผํ subquery ๊ฒฐ๊ณผ๋ฅผ ๋ฐ๋ณต์ ์ผ๋ก ์ฌ์ฉํ๋ ์ฟผ๋ฆฌ์ ์ฑ๋ฅ์ ํฅ์ ์ํฌ ์ ์๋ค.
- Materialized View๋ฅผ ํตํด ์ก์ธ์ค ๋ ๋ฐ์ดํฐ๋ ๊ธฐ๋ณธ ํ ์ด๋ธ์์ ์ํ๋ DML์ ์์ ์๊ด ์์ด ํญ์ ์ต์ ์ํ๋ฅผ ์ ์งํ๋ค. ๋ง์ฝ MV๊ฐ ์ต์ ์ํ๊ฐ ๋๊ธฐ ์ ์ ์ฟผ๋ฆฌ๊ฐ ์คํ๋๋ฉด Snowflake๋ MV๋ฅผ ์ ๋ฐ์ดํธํ๊ฑฐ๋ MV์ ์ต์ ๋ถ๋ถ์ ์ฌ์ฉํ๊ณ ๊ธฐ๋ณธ ํ ์ด๋ธ์์ ํ์ํ ์ต์ ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ํ๋ค.
- Materialized View๋ฅผ ์์ฑํ ํ ๋ฐฑ๊ทธ๋ผ์ด๋ ํ๋ก์ธ์ค๋ Materialized View์ ๋ฐ์ดํฐ๋ฅผ ์๋์ผ๋ก ์ ์ง ๊ด๋ฆฌํ๋ค.
ํ ์ด๋ธ, Regular View ๋ฐ ์บ์๋ ๊ฒฐ๊ณผ์์ ๋น๊ต
Materialized View๋ ํ ์ด๋ธ๊ณผ ์ ์ฌํ๊ธฐ๋ ํ๊ณ ํฅํ ์ฌ์ฌ์ฉ์ ์ํด ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํ๋ค๋ ์ ์์ ์บ์๋ ๊ฒฐ๊ณผ์๋ ์ ์ฌํ ํน์ง์ ๊ฐ์ง๊ณ ์๋ค. Snowflake๋ ์ฟผ๋ฆฌ๊ฐ ์คํ๋ ํ ์ผ์ ์๊ฐ ๋์ ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ์บ์ํ๋ค. ๋ฐ๋ผ์ ๋์ผํ ์ฟผ๋ฆฌ๊ฐ ์ฌ์คํ๋๋ฉด Snowflake๋ ์ฟผ๋ฆฌ๋ฅผ ๋ค์ ์คํํ์ง ์๊ณ ๋์ผํ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ ์ ์๋ค. ์ด์ ๋ํ ๋ด์ฉ์ ์์ Compute Layer์์ ๋ค๋ฃจ์๋ค.
์ด์ฒ๋ผ Materialized View์ ์บ์๋ ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ ๋ชจ๋ ์ฟผ๋ฆฌ ์ฑ๋ฅ ์ด์ ์ ์ ๊ณตํ๋ค. Materialized View๋ ์บ์๋ ๊ฒฐ๊ณผ๋ณด๋ค ์ ์ฐํ์ง๋ง ๋๋ฆฌ๊ณ โ์บ์โ ๋๋ฌธ์ ํ ์ด๋ธ๋ณด๋จ ๋น ๋ฅด๋ค. Regular View๋ ๋ฐ์ดํฐ๋ฅผ ์บ์ํ์ง ์์ผ๋ฏ๋ก ์บ์๋ฅผ ํตํด ์ฑ๋ฅ์ ํฅ์ ์ํฌ ์๋ ์๋ค. ํ์ง๋ง ๊ฒฝ์ฐ์ ๋ฐ๋ผ Regular View๋ Snowflake๊ฐ ๋ณด๋ค ํจ์จ์ ์ธ ์ฟผ๋ฆฌ ๊ณํ์ ์์ฑํ๋ ๋ฐ ๋์์ด ๋๋ค.
์๋์ ํ๋ ํ ์ด๋ธ, Regular View, ์บ์๋ ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ ๋ฐ Materialized View ๊ฐ์ ์ ์ฌ์ ๊ณผ ์ฐจ์ด์ ์ ๋ณด์ฌ์ค๋ค.
Materialized View์ ๋ํ ๊ธฐ๋ณธ ํ ์ด๋ธ ๋ณ๊ฒฝ์ ์ํฅ
Snowflake์์ ๊ธฐ๋ณธ ํ ์ด๋ธ์ ๋ํ ๋ณ๊ฒฝ ์ฌํญ์ ํด๋น ํ ์ด๋ธ์ ๊ธฐ๋ฐ์ผ๋ก ํ๋ Materialized View์ ์ ์ฉ๋์ง ์๋๋ค. ๋ง์ฝ ๊ธฐ๋ณธ ํ ์ด๋ธ์ ์ปฌ๋ผ์ด ์ถ๊ฐ๋์ด๋ Materialized View์ ์ ๋ฐ์ดํธ ๋์ง ์๋๋ค. ๋ฐ๋ผ์ ๊ธฐ๋ณธ ํ ์ด๋ธ์ด ๋ณ๊ฒฝ๋์ด ๊ธฐ์กด ์ปฌ๋ผ์ด ๋ณ๊ฒฝ๋๊ฑฐ๋ ์ญ์ ๋๋ฉด Materialized View๋ ๋ค์ ์๋กญ๊ฒ ์์ฑํด์ผ ํ๋ค. ๋ํ ๊ธฐ๋ณธ ํ ์ด๋ธ์ด ์ญ์ ๋๋ฉด Materialized View๊ฐ ์ผ์ ์ค์ง๋์ง๋ง ์๋์ผ๋ก ์ญ์ ๋์ง๋ ์๋๋ค. ์ด๋ฌํ ์ด์ ๋ก ์ง์ Materialized View๋ฅผ ์ญ์ ํด์ผ ํ๋ค.
4. Query Acceleration
Query Acceleration ์๋น์ค๋ ์์ Warehouse ์ฌ์ด์ฆ๋ฅผ ์ฌ์ฉํ๋ฉด์๋ ํน์ ์ฟผ๋ฆฌ ์ฒ๋ฆฌ์ ๋ํ ๋ณ๋ ฌ๋๋ฅผ ๋์ฌ์ ์ฟผ๋ฆฌ ์ฒ๋ฆฌ ์๊ฐ์ ๋จ์ถ ์ํค๋ ๊ธฐ๋ฅ์ด๋ค. ์๋ฅผ ๋ค๋ฉด XS ์ฌ์ด์ฆ์ Warehouse(์๋ฒ 1๋)๊ฐ ์๋ค๊ณ ๊ฐ์ ํ์ ๋ ํน์ ์ฟผ๋ฆฌ๋ฅผ ์ํํ ๋๋ง n๋๋ก ํ์ฅ(Scale Out)์ด ๊ฐ๋ฅํ๋ค.
- Warehouse๋ฅผ ์๋์ผ๋ก Size Up ํ์ง ์๊ณ ์ฟผ๋ฆฌ ๋ฐํ์ ์ถ์
- Warehouse์ ๋ฏธ์น๋ โoversizedโ ์ฟผ๋ฆฌ์ ์ํฅ ๊ฐ์
- ์ค๋ฒ์ฌ์ด์ง Warehouse์ ๋ํ ๋น์ฉ ๋ฌธ์ ํด๊ฒฐ
- ๊ฐ์ฅ ํฐ Warehouse ํฌ๊ธฐ ์ด์์ผ๋ก ์ฑ๋ฅ ํ์ฅ
Query Acceleration ์ ์ค์ ํ๋ ๋ฐฉ๋ฒ์ ๊ฐ๋จํ๋ค. Warehouse๋ฅผ ์์ฑํ ๋ enable_query_acceleration
์ค์ ์ฌ๋ถ์ query_acceleration_max_scale_factor
ํค์๋๋ฅผ ์ค์ ํด์ฃผ๋ฉด ๋๋ค. ์ด๋ Warehouse๋ณ๋ก ํ์ฑํ๊ฐ ๊ฐ๋ฅํ๋ค.
> CREATE warehouse my_wh WITH
enable_query_acceleration = TRUE -- Query Acceleration ํ์ฑํ
query_acceleration_max_scale_factor = 3; -- Default 8
๋ณ๋ ฌํ๋ก ์ฑ๋ฅ ํฅ์์ด ๊ฐ๋ฅํ ์ฟผ๋ฆฌ์ ๋ํด Warehouse ์์ง์ ๋์ ์ผ๋ก ์๋์ผ๋ก ํ์ฅ์ํฌ ์ ์๊ณ ์ต๋ max_scale_factor ๋งํผ Scale Out์ ์ํํ๊ธฐ ๋๋ฌธ์ ์ฌ์ฉ์๊ฐ ์ง์ ์ฟผ๋ฆฌ๋ณ๋ก Warehouse์ ๋ํ ํฌ๊ธฐ๋ฅผ ์กฐ์ ํ ํ์ ์์ด SCALE FACTOR(0~100)๋ง ์ง์ ํด์ฃผ๋ฉด ๋๋ค.
5. Snowpipe
S3์ ๊ฐ์ ์ธ๋ถ ํด๋ผ์ฐ๋ ์ ์ฅ์(Stage)์์ Snowflake๋ก ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ ๋ฐฉ๋ฒ์ Bulk Load ๋ฐฉ์๊ณผ Continuous ๋ฐฉ์์ด ์๋ค. ๊ทธ ์ค Continuous ๋ฐฉ์์ผ๋ก ๊ฐ์ ธ์ฌ ๋ ์ฌ์ฉํ๋ Snowpipe์ ๋ํด ์์๋ณด์. Stage์์ ํ์ผ(๋ฐ์ดํฐ)๋ฅผ ๊ฐ์งํ๋ ๋ฐฉ์์ ์๋์ ๊ฐ์ด ๋๊ฐ์ง๋ก ๋๋์ด์ง๋ค.
- ํด๋ผ์ฐ๋ ๋ฉ์์ง์ ํตํ Snowpipe ์๋ํ
- Snowpipe REST End Point ํธ์ถ
ํด๋ผ์ฐ๋ ๋ฉ์์ง์ ํตํ Snowpipe ์๋ํ
S3๋ ๋ฐ์ดํฐ์ ์ง์์ ์ฒ๋ฆฌ๋ฅผ ์ํด ์ด๋ฒคํธ ์๋ฆผ ์ต์ ์ ์ฌ์ฉํ์ฌ ์๋ก์ด ๋ฐ์ดํฐ๊ฐ ๋ค์ด์ค๋ฉด SQS์ Notification์ ์ฃผ๋ ๊ธฐ๋ฅ์ด ์๋ค. Snowpipe๋ ๊ทธ Notification์ ๋ณด๊ณ ์๋ค๊ฐ ์๋ก ๋ค์ด์จ ๋ฐ์ดํฐ๋ง Snowflake๋ก ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๊ฒ ๋๋ค. ์ฆ, ์ผ์ ์ ๋ฐ๋ผ COPY ๋ฌธ์ ์๋์ผ๋ก ์คํํ๋ ๋ฐฉ์์ด ์๋ ์ฌ์ฉ์๊ฐ ๋ช ๋ถ ๋ด์ ์ฌ์ฉํ ์ ์๋๋ก ๋ง์ดํฌ๋ก ๋ฐฐ์น๋ก ๋ฐ์ดํฐ๋ฅผ Load ํ ์ ์๊ฒ ๋๋ค. Snowpipe๋ ์ง์ ๋ ํ์ดํ ์ค๋ธ์ ํธ์ ์ ์๋ ๋งค๊ฐ ๋ณ์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก Continuous Serverless ๋ฐฉ์์ผ๋ก ๋์ ํ ์ด๋ธ์ Load ๋๋ ํ์ ํ์ผ์ ๋ณต์ฌํด์ ํ์ผ(๋ฐ์ดํฐ)๋ฅผ ๊ฐ์ ธ์จ๋ค.
Snowpipe REST End Point ํธ์ถ
์ฃผ๋ก ์ดํ๋ฆฌ์ผ์ด์ ์์ ์๋ํ๋ ๋ฐฉ์์ผ๋ก ํ์ดํ ์ค๋ธ์ ํธ์ ์ด๋ฆ๊ณผ ํ์ผ(๋ฐ์ดํฐ)์ ์ด๋ฆ ๋ชฉ๋ก์ ์ฌ์ฉํ์ฌ REST End Point๋ฅผ ํธ์ถํ๋ค. ํ์ดํ ์ค๋ธ์ ํธ๊ฐ ์ฐธ์กฐํ๋ Stage(S3)์์ ๋ชฉ๋ก๊ณผ ์ผ์นํ๋ ์ ๋ฐ์ดํฐ ํ์ผ์ด ๋ฐ๊ฒฌ๋๋ฉด ์ด๋ฅผ Load ํ ์ ์๋๋ก ํ์ ์ถ๊ฐํ๋ค. ์ด๋๋ ๋ง์ฐฌ๊ฐ์ง๋ก ํ์ดํ์ ์ ์๋ ๋งค๊ฐ ๋ณ์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ์์ Snowflake ํ ์ด๋ธ๋ก ๋ฐ์ดํฐ๋ฅผ Load ํ๋ค.
์์ ๊ณผ์ ์ ๊ฐ๋ตํ๊ฒ ์ค๋ช ํ์๋ฉด ๋ฐ์ดํฐ ํ์ผ์ ๋ด๋ถ(Snowflake) ๋๋ ์ธ๋ถ(Amazon S3, ํ์ฌ*2023๋ 3์ ๊ธฐ์ค ํ๊ตญ์ Amazon๋ง ์ง์) Stage์ ๋ณต์ฌ ๋๋ค. ํด๋ผ์ด์ธํธ๋ ์์งํ ํ์ผ ๋ชฉ๋ก๊ณผ ์ ์๋ ํ์ดํ๋ฅผ ์ฌ์ฉํ์ฌ InsertFiles End Point๋ฅผ ํธ์ถํ๊ฒ ๋๋ค. End Point๋ ์ด๋ฌํ ํ์ผ์ ์์ง ํ๋ก ์ด๋ ์ํค๊ณ Snowflake์ Virtual Warehouse๋ ์ง์ ๋ ํ์ดํ์ ์ ์๋ ๋งค๊ฐ ๋ณ์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ์์ ๋๊ธฐ ์ค์ธ ํ์ผ์ ๋ฐ์ดํฐ๋ฅผ ๋์ ํ ์ด๋ธ๋ก Load ํ๊ฒ ๋๋ค.
๋ฐ์ดํฐ ํ์ผ Load ์์
๊ฐ ํ์ดํ ์ค๋ธ์ ํธ์ ๋ํด Snowflake๋ Load ๋๊ธฐ ์ค์ธ ๋ฐ์ดํฐ ํ์ผ์ ์์๋ฅผ ์ง์ ํ๋ ๋จ์ผ ํ๋ฅผ ์ค์ ํ๋ค. Stage์์ ์ ๋ฐ์ดํฐ ํ์ผ์ด ๋ฐ๊ฒฌ๋๋ฉด Snowflake๋ ํด๋น ํ์ผ์ ํ์ ์ถ๊ฐํ๊ฒ ๋๋ค. ๊ทธ๋ฌ๋ ์ฌ๋ฌ ํ๋ก์ธ์ค๊ฐ ํ์์ ํ์ผ์ ๊ฐ์ ธ์ค๋ฏ๋ก ์ผ๋ฐ์ ์ผ๋ก Snowpipe๋ ๋ ์ค๋๋ ํ์ผ์ ๋จผ์ Loadํ์ง๋ง Staging ๋ ์์๋๋ก ํ์ผ์ด Load ๋๋ค๋ ๋ณด์ฅ์ ์๋ค.
๋ฐ์ดํฐ ์ค๋ณต
Snowpipe๋ ๊ฐ ํ์ดํ ์ค๋ธ์ ํธ์ ์ฐ๊ฒฐ๋ ํ์ผ Load ๋ฉํ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ์ฌ ํ ์ด๋ธ์์ ๋์ผํ ํ์ผ(์ค๋ณต ๋ฐ์ดํฐ)์ด ๋ค์ Load ๋๋ ๊ฒ์ ๋ฐฉ์งํ๋ค. ์ด ๋ฉํ๋ฐ์ดํฐ๋ฅผ ํตํด Load ๋ ๊ฐ ํ์ผ์ ๊ฒฝ๋ก ๋ฐ ํ์ผ ๋ช ์ ์ ์ฅํ๊ณ ๋์ค์ ์์ ๋ ๋์ผํ ์ด๋ฆ์ ํ์ผ์ด Load ๋๋ ๊ฒ์ ๋ฐฉ์งํ๋ค.
Leave a comment