๋ฐ๋ธŒ์ฝ”์Šค_๋ฐ์ดํ„ฐ์—”์ง€๋‹ˆ์–ด๋ง

[Week8 AWS ๋ฐ์ดํ„ฐ์›จ์–ดํ•˜์šฐ์Šค] TIL 34์ผ์ฐจ Snowflake ์‚ฌ์šฉํ•˜๊ธฐ

๐Ÿช„ํ•˜๋ฃจ๐Ÿช„ 2023. 12. 1. 16:37
728x90

โ… . ์Šค๋…ธํ”Œ๋ ˆ์ดํฌ ์•Œ์•„๋ณด๊ธฐ

snowflake๋Š” ๊ตฌ์„ฑ๋„๊ฐ€ ์œ ์—ฐํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ํฐ ๊ธฐ์—…์˜ ๊ฒฝ์šฐ ํ•˜์œ„์˜ ๊ตฌ์„ฑ์„ ๊ฐ–๋Š”๋‹ค

Organization
์—ฌ๋Ÿฌ Account
์—ฌ๋Ÿฌ Database
์—ฌ๋Ÿฌ Schema

 

์ œ๊ณตํ•˜๋Š” ์„œ๋น„์Šค

Data Marketplace : ๋ฐ์ดํ„ฐ ๋งˆ์ผ“ํ”Œ๋ ˆ์ด์Šค ์ œ๊ณต

Data sharing : ๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ๊ฐ€์ง„ ๋ฐ์ดํ„ฐ์— ์•ก์„ธ์Šค ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•˜๊ณ  ์ ‘๊ทผ(Don't move)

 

๋น„์šฉ ์˜ต์…˜

Standard, Enterprise, Business, Virtual snowflake(๋ณด์•ˆ์ด ์ค‘์š”ํ•œ ๊ฒฝ์šฐ ์‚ฌ์šฉ)

On demand(ํ•„์š”ํ•  ๋•Œ๋งˆ๋‹ค ํ• ๋‹น)

Capacity Storage(์ผ์ • ์–‘์„ ๋ฏธ๋ฆฌ ํ• ๋‹น)

 

์‹ค์Šต

๋ฌด๋ฃŒ ๋ฒ„์ „์„ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ, ์ด๋ฉ”์ผ์— ์ „์†ก๋œ Dedicated Login url์„ ํ†ตํ•ด ๋กœ๊ทธ์ธ์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•œ๋‹ค.

 

1. Warehouse

์‚ฌ์šฉํ•˜๋Š” ์ปดํ“จํŒ… ์ž์›์— ํ•ด๋‹นํ•œ๋‹ค.

2. Worksheet

- ๊ณ„์ •์˜ ๊ถŒํ•œ์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

- ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ ํƒ

ํŠน์ • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๋ฐ์ดํ„ฐ ์›จ์–ดํ•˜์šฐ์Šค์—์„œ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— SQL ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๊ณต๊ฐ„์ด๋‹ค.

๊ถŒํ•œ) Account Admin์ธ ์ƒํƒœ์—์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

- ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ƒ์„ฑ

- ์Šคํ‚ค๋งˆ ์ƒ์„ฑ

- ํ…Œ์ด๋ธ” ์ƒ์„ฑ ์ˆœ์„œ

(snowflake์—์„œ๋Š” Create or Replace ํ…Œ์ด๋ธ” ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ์˜ค๋ฅ˜๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.)

- Copy ์ด์šฉํ•ด ๋ฒŒํฌ ์—…๋ฐ์ดํŠธ ์ˆ˜ํ–‰(AWS credential ์ด์šฉ)

COPY INTO ์Šคํ‚ค๋งˆ.ํ…Œ์ด๋ธ”๋ช…
FROM 's3๋ฒ„ํ‚ท์ฃผ์†Œ/ํŒŒ์ผ๋ช….csv'
credentials=(AWS_KEY_ID='์•„์ด๋””' AWS_SECRET_KEY='๋น„๋ฐ€๋ฒˆํ˜ธ')
FILE_FORMAT = (type='CSV' skip_header=1 FIELD_OPTIONALLY_ENCLOSED_BY='"');

 

Admin ๊ณ„์ •์„ ์ด์šฉํ•˜๋ฉด, ๋ณด์•ˆ์ƒ์˜ ๋…ธ์ถœ์ด ์žˆ์„ ๊ฒฝ์šฐ ์œ„ํ—˜ํ•˜๋‹ค.

๋”ฐ๋ผ์„œ IAM-์‚ฌ์šฉ์ž ์ƒ์„ฑ(S3 ReadOnlyAccess๊ถŒํ•œ๋งŒ ๋ถ€์—ฌ)ํ•œ ๋’ค, ์•ก์„ธ์Šคํ‚ค๋ฅผ ๋ฐœ๊ธ‰๋ฐ›์•„์„œ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

 

ํ•ด๋‹น ์‚ฌ์šฉ์ž ์„ ํƒ>๋ณด์•ˆ ์ž๊ฒฉ ์ฆ๋ช…> ์•ก์„ธ์Šค ํ‚ค ๋งŒ๋“ค๊ธฐ

AWS ์™ธ๋ถ€์—์„œ ์‹คํ–‰๋˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„ ํƒ

ํ•ด๋‹น ์•ก์„ธ์Šคํ‚ค๋ฅผ AWS_KEY_ID, AWS_SECRET_KEY ๋ถ€๋ถ„์— ๋ถ™์—ฌ ๋„ฃ๋Š”๋‹ค.

 

- ์—ญํ• 

Snowflake์—์„œ๋Š” Group์€ ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค.๋”ฐ๋ผ์„œ ๊ณ„์Šน์ด ๊ฐ€๋Šฅํ•œ Role์„ ์‚ฌ์šฉํ•œ๋‹ค.๋‚ด์šฉ์€ ์ €๋ฒˆ ๊ฒŒ์‹œ๊ธ€์„ ์ฐธ๊ณ ํ•˜์ž.

-- 3๊ฐœ์˜ ROLE์„ ์ƒ์„ฑํ•œ๋‹ค
CREATE ROLE analytics_users;
CREATE ROLE analytics_authors;
CREATE ROLE pii_users;
-- ์‚ฌ์šฉ์ž ์ƒ์„ฑ
CREATE USER keeyong PASSWORD='eschoi';
-- ์‚ฌ์šฉ์ž์—๊ฒŒ analytics_users ๊ถŒํ•œ ์ง€์ •
GRANT ROLE analytics_users TO USER eschoi;

-- set up analytics_users
GRANT USAGE on schema dev.raw_data to ROLE analytics_users;
GRANT SELECT on all tables in schema dev.raw_data to ROLE analytics_users;
GRANT USAGE on schema dev.analytics to ROLE analytics_users;
GRANT SELECT on all tables in schema dev.analytics to ROLE analytics_users;
GRANT ALL on schema dev.adhoc to ROLE analytics_users;
GRANT ALL on all tables in schema dev.adhoc to ROLE analytics_users;

-- set up analytics_authors(analytics_authors ๊ณ„์Šน)
GRANT ROLE analytics_users TO ROLE analytics_authors;
GRANT ALL on schema dev.analytics to ROLE analytics_authors;
GRANT ALL on all tables in schema dev.analytics to ROLE analytics_authors;

 

Snowflake์—์„œ๋„ Row level, Column level ๋ณ„๋กœ ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•  ์ˆ˜ ์žˆ์œผ๋‚˜, ์‹ค์ˆ˜ํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๋˜๋„๋ก์ด๋ฉด ์ค‘์š”ํ•œ ํ…Œ์ด๋ธ”์€ ๋”ฐ๋กœ ๋ถ„ํ• ํ•ด์„œ ํŠน์ • ์‚ฌ์šฉ์ž๋งŒ ์•ก์„ธ์Šค ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜์ž.

 

 

โ…ก. ๋ฐ์ดํ„ฐ ๊ฑฐ๋ฒ„๋„Œ์Šค๋ž€?

๋ฐ์ดํ„ฐ ํ’ˆ์งˆ ๋ณด์žฅ(๋ฐ์ดํ„ฐ ์ผ๊ด€์„ฑ ๋ณด์žฅ, ์˜๋ฏธ ์žˆ๋Š” ๋ฐ์ดํ„ฐ)๊ณผ ๊ฐœ์ธ์ •๋ณด ๊ด€๋ จ ๋ฒ•๊ทœ ์ค€์ˆ˜๋ฅผ ์œ„ํ•œ ๋ชฉ์ ์œผ๋กœ ํ•˜๋Š” ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ ํ”„๋กœ์„ธ์Šค

 

1. Object Tagging

Object๋ž€?

Snowflake๋‚ด์˜ ๊ฐ์ฒด(Organization, Account, DB, Schema, Table, View, Column)

๊ฐ ๊ฐ์ฒด๋ณ„๋กœ ํƒœ๊น…(sales, marketing, pii)ํ•˜์—ฌ ๊ด€๋ฆฌ์˜ ์šฉ์ด์„ฑ์„ ๋†’์ธ๋‹ค.

ํ•„์ˆ˜๋กœ ์‚ฌ์šฉํ•  ํ•„์š”๋Š” ์—†์œผ๋‚˜, ํŠนํžˆ ๊ฐœ์ธ์ •๋ณด์™€ ๊ด€๋ จํ•œ ๋‚ด์šฉ์„ ํƒœ๊น…ํ•˜๋ฉด ์ข‹๋‹ค.

Enterprise์—์„œ๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋ฉฐ, CREATE TAG ๋ฌธ์žฅ์„ ์ด์šฉํ•˜์—ฌ ํƒœ๊ทธ๋ฅผ ๋ถ€์—ฌํ•œ๋‹ค.

 

2. Data Classification : ๋ฐ˜์ž๋™ํ™” ํƒœ๊น…

Snowflake๊ฐ€ ์ž์ฒด์ ์œผ๋กœ ๋‚ด์šฉ์„ ๋ณด๊ณ  ๊ฐœ์ธ์ •๋ณด์™€ ๊ด€๋ จ๋œ ๋‚ด์šฉ์„ ์ž๋™ ํƒœ๊น…ํ•˜๋Š” ๊ธฐ๋Šฅ

Enterprise์—์„œ๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋ฉฐ,

Analyze : ๊ฐœ์ธ์ •๋ณด๋‚˜ ๋ฏผ๊ฐ์ •๋ณด์˜ ์นผ๋Ÿผ์„ ๋ถ„๋ฅ˜

Review : ๋ฐ์ดํ„ฐ ์—”์ง€๋‹ˆ์–ด๊ฐ€ Analyze ๋œ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๊ณ  ์ˆ˜์ •

Apply : ์ˆ˜์ •๋œ ํƒœ๊ทธ๋ฅผ System Tag๋กœ ์ ์šฉ(privacy_category์™€ Sementic_category๊ฐ€ ์žˆ๋‹ค.)

 

Privacy_category(์ƒ์œ„๋ ˆ๋ฒจ)

  • Identifier : ๊ฐœ์ธ ์‹๋ณ„์ž
  • Quasi_identifier : ๊ฐœ์ธ ์ค€์‹๋ณ„์ž(์—ฌ๋Ÿฌ ๊ฐœ ๋ชจ์ด๋ฉด ๊ฐœ์ธ ์‹๋ณ„ ๊ฐ€๋Šฅ)
  • Sensitive : ๋ฏผ๊ฐ์ •๋ณด

Semantic_category(ํ•˜์œ„๋ ˆ๋ฒจ)

 

3. Tag based Masking Policies

ํ•ด๋‹น ํƒœ๊ทธ๋ณ„๋กœ ์•ก์„ธ์Šค ๊ถŒํ•œ์„ ๋‹ค๋ฅด๊ฒŒ ๊ฐ€์ ธ๊ฐ€๋Š” ๊ฒƒ

Enterprise์—์„œ๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋ฉฐ, Tag์— ์•ก์„ธ์Šค ๊ถŒํ•œ์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

4. Access History

์นผ๋Ÿผ๋ณ„๋กœ ์กฐํšŒ, ์ƒ์„ฑ, ์ˆ˜์ • ๋“ฑ์„ ์ถ”์ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ(๋ณด์•ˆ ๋“ฑ์˜ ๊ฐ์‚ฌํ•  ๋•Œ ์‚ฌ์šฉ)

Enterprise์—์„œ๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ๋กœ๊ทธ์ธ, ์ฟผ๋ฆฌ, ํ…Œ์ด๋ธ”, ๋ทฐ, ๋ฐ์ดํ„ฐ ์กฐ์ž‘์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

 

5. Object Dependencies

ELT ์ˆ˜ํ–‰ ์‹œ ์›๋ณธ ํ…Œ์ด๋ธ”์˜ ํƒœ๊ทธ๊ฐ€ ์กฐ์ธ ์—ฐ์‚ฐ ๋“ฑ์˜ ์ˆ˜ํ–‰ ํ›„ ์ƒ์„ฑ๋œ ์ƒˆ๋กœ์šด ํ…Œ์ด๋ธ”์—๋„ ๋™์ผํ•ด์•ผ ํ•œ๋‹ค.(๊ฐœ์ธ์ •๋ณด๋กœ ๋ถ„๋ฅ˜๋œ ์นผ๋Ÿผ ๋“ฑ์€ ์ „ํŒŒ๋˜์ง€ ๋ชปํ•˜๋„๋ก ํ•ด์•ผ ํ•˜๋ฏ€๋กœ)

๊ณ„์Šน๊ด€๊ณ„๋ฅผ ๋ช…ํ™•ํžˆ ํ•  ์ˆ˜ ์žˆ์œผ๋ฉด, ์˜ํ–ฅ๋ ฅ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์›๋ณธ ํ…Œ์ด๋ธ” ๋ณ€๊ฒฝ ์‹œ ์œ ์˜ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค.

ํ…Œ์ด๋ธ”์ด๋‚˜ ๋ทฐ๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ๊ฒฝ์šฐ ์˜ํ–ฅ์„ ์ž๋™์œผ๋กœ ์‹๋ณ„ํ•ด ์ค€๋‹ค.

 

 

โ…ข. ์ถ”๊ฐ€๊ธฐ๋Šฅ

1. Market place(ETL)

์™ธ๋ถ€ ๋ฐ์ดํ„ฐ ์†Œ์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

2. Data sharing

์–ด๋–ค DB๊ฐ€ ๊ณต์œ ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

3. Activity

Query History, Copy History, Task History(์ฃผ๊ธฐ์ ์œผ๋กœ ์‹คํ–‰๋˜๋Š” ๋ช…๋ น)๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

 

728x90