[Snowflake Partner Technical Bootcamp] 4. Service Layer

Service Layer

Intelligence Infrastructure์ธ ์™„์ „ ๊ด€๋ฆฌํ˜• ์„œ๋น„์Šค๋กœ์„œ ์ž๋™ํ™”๋ฅผ ํ†ตํ•ด ์œ„ํ—˜์„ ์ค„์ด๊ณ  ํšจ์œจ์„ฑ์„ ๊ฐœ์„ ํ•˜์—ฌ ์‚ฌ์šฉ์ž๊ฐ€ ์ค‘์š”ํ•œ ์ผ์— ๋”์šฑ ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” ๊ณ„์ธต์ด๋‹ค. Cloud Service ๊ณ„์ธต์—๋Š” ์ธ์ฆ, ๋ณด์•ˆ, ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ ๋ฐ ์ฟผ๋ฆฌ ์ตœ์ ํ™”์™€ ๊ฐ™์ด Snowflake ์ „์ฒด์—์„œ ์กฐ์ •ํ•˜๋Š” ๋ชจ๋“  ์ž‘์—…์ด ํฌํ•จ๋œ๋‹ค. Cloud Service ๊ณ„์ธต์€ ์„œ๋กœ ๋‹ค๋ฅธ ๊ฐ€์šฉ ์˜์—ญ์—์„œ ์ž‘๋™ํ•˜๊ณ  ์•ก์„ธ์Šค ๋ฐ ์‚ฌ์šฉ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์€ ์ •๋ณด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ƒํƒœ ๋น„์ €์žฅ ์ปดํ“จํŒ… ๋ฆฌ์†Œ์Šค์ด๋‹ค. DDL ๋ฐ DML๊ณผ ๊ฐ™์€ ๋ฐ์ดํ„ฐ ์ž‘์—…์„ ์œ„ํ•œ SQL ํด๋ผ์ด์–ธํŠธ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

snoflake service layer


์บ์‹ฑ ์ž๋™ํ™”

์ฟผ๋ฆฌ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š”๋ฐ ํ•„์š”ํ•œ ์ปดํ“จํŒ… ๋ฆฌ์†Œ์Šค๋Š” ์ฟผ๋ฆฌ์˜ ํฌ๊ธฐ์™€ ๋ณต์žก์„ฑ์— ๋”ฐ๋ผ ๋‹ค๋ฅด๋‹ค. ์ฟผ๋ฆฌ๊ฐ€ ๋ณต์žกํ•ด์งˆ์ˆ˜๋ก ๋” ํฐ 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