TIL

Snowflake ์•Œ์•„๋ณด๊ณ , S3์—์„œ COPYํ•ด๋ณด๊ธฐ - TIL230525

sunhokimDev 2023. 5. 25. 19:59

๐Ÿ“š KDT WEEK 8 DAY 4 TIL

  • Snowflake ์•Œ์•„๋ณด๊ธฐ
  • Snowflake ๊ฐ„๋‹จ์‹ค์Šต (use AWS)
  • Data Governance

 


 

๐ŸŸฅ Snowflake

 

 

  • ๊ธ€๋กœ๋ฒŒ ํด๋ผ์šฐ๋“œ(AWS, GCP, Azure ๋“ฑ) ์œ„์—์„œ ๋ชจ๋‘ ๋™์ž‘
  • ๋ฐ์ดํ„ฐ ํŒ๋งค๋ฅผ ํ†ตํ•œ ๋งค์ถœ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ด์ฃผ๋Š” Data Sharing/Marketplace ์ œ๊ณต
  • ETL๊ณผ ๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ ํ†ตํ•ฉ ๊ธฐ๋Šฅ ์ œ๊ณต
  • ์Šคํ† ๋ฆฌ์ง€์™€ ์ปดํ“จํŒ… ์ธํ”„๋ผ๊ฐ€ ๋ณ„๋„์ธ ๊ฐ€๋ณ€ ๋น„์šฉ ๋ชจ๋ธ
  • SQL๊ธฐ๋ฐ˜์˜ ๋น…๋ฐ์ดํ„ฐ ์ €์žฅ ๋ฐ ์ฒ˜๋ฆฌ, ๋ถ„์„ ๊ฐ€๋Šฅ + ๋น„๊ตฌ์กฐํ™” ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ
  • CSV, JSON, Avro, Parquet ๋“ฑ ๋‹ค์–‘ํ•œ ํฌ๋งท ์ง€์›

 

Snowflake์˜ ์ฃผ์š” ๊ฐ์ฒด

 

1. Organizations

ํ•œ ๊ณ ๊ฐ์ด ์‚ฌ์šฉํ•˜๋Š” ๋ชจ๋“  Snowflake ์ž์›๋“ค์„ ํ†ตํ•ฉํ•˜๋Š” ์ตœ์ƒ์œ„ ๋ ˆ๋ฒจ ์ปจํ…Œ์ด๋„ˆ

ํ•˜๋‚˜ ์ด์ƒ์˜ Account๋“ค๋กœ ๊ตฌ์„ฑ๋˜์–ด ๊ตฌ์„ฑ๋œ Account๋“ค์˜ ์ ‘๊ทผ๊ถŒํ•œ, ์‚ฌ์šฉํŠธ๋ž˜ํ‚น, ๋น„์šฉ๋“ค์„ ๊ด€๋ฆฌํ•œ๋‹ค

 

2. Accounts

์ž์ฒด ์‚ฌ์šฉ์ž, ๋ฐ์ดํ„ฐ, ์ ‘๊ทผ๊ถŒํ•œ์„ ๋…๋ฆฝ์ ์œผ๋กœ ๊ฐ€์ง„๋‹ค.

ํ•˜๋‚˜์ด์ƒ์˜ Database๋“ค๋กœ ๊ตฌ์„ฑ๋œ๋‹ค.

 

3. Databases

ํ•œ Account์— ์†ํ•ด์„œ ๋ฐ์ดํ„ฐ๋“ค์„ ๋‹ค๋ฃจ๋Š” ๋…ผ๋ฆฌ์ ์ธ ์ปจํ…Œ์ด๋„ˆ

๋‹ค์ˆ˜์˜ ์Šคํ‚ค๋งˆ์™€ ๊ทธ ์†์— ์†ํ•œ ํ…Œ์ด๋ธ”, ๋ทฐ ๋“ฑ์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋‹ค.

PB๋‹จ์œ„๊นŒ์ง€ ์Šค์ผ€์ผ ๊ฐ€๋Šฅํ•˜๋ฉฐ ๋…๋ฆฝ์ ์ธ ์ปดํ“จํŒ… ๋ฆฌ์†Œ์Šค(Warehouses)๋ฅผ ๊ฐ–๊ฒŒ ๋œ๋‹ค.

ํ•˜์ง€๋งŒ Database์™€ Warehouse๋Š” ์ผ๋Œ€์ผ ๊ด€๊ณ„๋Š” ์•„๋‹ˆ๋‹ค.

 

 

Snowflake ๋น„์šฉ๊ตฌ์กฐ

  • ์ปดํ“จํŒ… ๋น„์šฉ : ํฌ๋ ˆ๋”ง
  • ์Šคํ† ๋ฆฌ์ง€ ๋น„์šฉ : TB ๋‹น ๊ณ„์‚ฐ
  • ๋„คํŠธ์›Œํฌ ๋น„์šฉ : ๋™์ผ์ง€์—ญ + ๋™์ผํด๋ผ์šฐ๋“œ ์™ธ ๋ฐ์ดํ„ฐ ์ „์†ก์‹œ TB๋‹น ๊ณ„์‚ฐ

 

Snowflake ์Šคํƒ ๋‹ค๋“œ(๋ฌด๋ฃŒ) ์‹œ์ž‘ํ•˜๊ธฐ

 

https://signup.snowflake.com/

 

Snowflake Trial

 

signup.snowflake.com

Snowflake ๊ฐ€์ž… ํ›„ ๋‹ค์Œ์— ๋กœ๊ทธ์ธํ•  ๋•Œ๋Š” Snowflake๊ฐ€ ์ค€ ๋กœ๊ทธ์ธ ๋งํฌ๋กœ ์ ‘์†ํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฑธ ์žŠ์ง€๋ง์ž.

 

 


 

๐ŸŸฆ Snowflake ์‹ค์Šต

 

Snowflake์—์„œ ์Šคํ‚ค๋งˆ ์ƒ์„ฑํ•˜๊ธฐ

 

์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์Šคํ‚ค๋งˆ ์ƒ์„ฑ์„ ํ•ด๋ณด๊ฒ ๋‹ค.

SQL๋ฌธ์„ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ์›Œํฌ์‹œํŠธ์—์„œ ์ž‘์—…ํ•ด์•ผํ•œ๋‹ค.

 

๋‹ค์Œ์€ Snowflake์— ๋กœ๊ทธ์ธํ•˜๋ฉด ์ฒ˜์Œ ๋ณผ ์ˆ˜ ์žˆ๋Š” ํ™”๋ฉด์ด๋‹ค.

 

์ž์ฃผ๋ณด๊ฒŒ๋  Snowflake ๋Œ€์‹œ๋ณด๋“œ

์กฐ์‹ฌํ•ด์•ผํ•  ์ ์€, DB ์ƒ์„ฑ๊ณผ ๊ฐ™์€ ๋ช…๋ น์€ ACCOUNTADMIN ์œ ์ €๋งŒ ๊ฐ€๋Šฅํ•˜๋‹ค.

์™ผ์ชฝ ์ƒ๋‹จ์˜ ์œ ์ €๊ฐ€ ACCOUNTADMIN์ธ์ง€ ํ™•์ธํ•˜๊ณ  Worksheets๋ฅผ ์ด์šฉํ•˜์ž.


Worksheets > ์˜ค๋ฅธ์ชฝ ์ƒ๋‹จ์˜ ํŒŒ๋ž€ + ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜์—ฌ ์ƒˆ๋กœ์šด ์›Œํฌ์‹œํŠธ๋ฅผ ์ƒ์„ฑํ•˜๋ฉด ์•„๋ž˜ ํ™”๋ฉด์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์ƒˆ๋กœ ์ƒ์„ฑํ•œ ์›Œํฌ์‹œํŠธ์— SQL ๋ช…๋ น๋ฌธ์„ ์ž…๋ ฅํ•œ ๋ชจ์Šต

์ฒ˜์Œ ์ƒ์„ฑ๋œ ์›Œํฌ์‹œํŠธ๋Š” ์ƒ์„ฑ๋œ ๋‚ ์งœ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ด๋ฆ„์ด ์ง€์–ด์ง„๋‹ค.

์ด๋ฆ„์„ ํด๋ฆญํ•˜๋ฉด ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ๋‚˜๋Š” Setup-Env๋กœ ์ง€์–ด์คฌ๋‹ค.

 

Snowflake์—์„œ AWS ์ ‘๊ทผํ•˜๊ธฐ

 

Snowflake์—์„œ๋„ Redshift์ฒ˜๋Ÿผ COPY ์ปค๋งจ๋“œ๋ฅผ ํ†ตํ•ด AWS S3์˜ ๋ฐ์ดํ„ฐ๋ฅผ ํ…Œ์ด๋ธ”์— ์ €์žฅํ•  ์ˆ˜ ์žˆ๋‹ค.

ํ•˜์ง€๋งŒ Snowflake์—์„œ AWS์— ์ ‘๊ทผํ•˜๋ ค๋ฉด AWS์˜ ์•ก์„ธ์Šค ํ‚ค๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

S3 read๋งŒ ๊ฐ€๋Šฅํ•œ ์‚ฌ์šฉ์ž๋ฅผ ํ•˜๋‚˜ ์ƒˆ๋กœ๋งŒ๋“ค์–ด ์•ก์„ธ์Šค ํ‚ค๋ฅผ ์ƒ์„ฑํ•ด๋ณด์ž.

 

AWS IAM > Users ์—์„œ ์ƒˆ๋กœ์šด ์‚ฌ์šฉ์ž๋ฅผ ๋งŒ๋“ค์–ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ถŒํ•œ์„ ์—ฐ๊ฒฐํ•œ๋‹ค.

 

S3ReadOnlyAccess ๊ถŒํ•œ ๋ถ€์—ฌ

 

S3๋ฅผ readํ•  ์ˆ˜ ์žˆ๋Š” ์‚ฌ์šฉ์ž๋ฅผ ๋งŒ๋“ค์—ˆ์œผ๋‹ˆ ์ด์ œ ํ•ด๋‹น ์‚ฌ์šฉ์ž์˜ ์•ก์„ธ์Šค ํ‚ค๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•œ๋‹ค.

 

IAM > ์‚ฌ์šฉ์ž > ํ•ด๋‹น ์‚ฌ์šฉ์ž > ๋ณด์•ˆ ์ž๊ฒฉ ์ฆ๋ช… > ์•ก์„ธ์Šค ํ‚ค ๋งŒ๋“ค๊ธฐ > AWS ์™ธ๋ถ€์—์„œ ์‹คํ–‰๋˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ > ์ƒ์„ฑ

 

์•ก์„ธ์Šค ํ‚ค์™€ ๋น„๋ฐ€ ์•ก์„ธ์Šค ํ‚ค๊ฐ€ ์ƒ์„ฑ๋œ ๋ชจ์Šต

 

์ด์ œ ๋งŒ๋“ค์–ด์ง„ Key๋ฅผ ํ†ตํ•ด COPY ์ปค๋งจ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด๋ณด์ž.

 

Snowflake์—์„œ COPY ์ปค๋งจ๋“œ ์‚ฌ์šฉํ•˜๊ธฐ

Snowflake์—์„œ COPY ์ปค๋งจ๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์‚ฌ์šฉํ•œ๋‹ค.

 

COPY INTO ํ…Œ์ด๋ธ”์ด๋ฆ„
FROM 's3://sunho-test-bucket/test_data/session_timestamp.csv' -- ์ ‘๊ทผํ•  ์œ„์น˜
credentials=(AWS_KEY_ID='*****' AWS_SECRET_KEY='*****') -- AWS ์•ก์„ธ์Šค ํ‚ค
FILE_FORMAT = (type='CSV' skip_header=1 FIELD_OPTIONALLY_ENCLOSED_BY='"'); -- CSV์˜ ๊ฒฝ์šฐ

Redshift์™€ COPY ๋ช…๋ น์–ด๊ฐ€ ์กฐ๊ธˆ ๋‹ค๋ฅธ ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

 

์•„๋ž˜ ์ด๋ฏธ์ง€๋Š” Snowflake ์›Œํฌ์‹œํŠธ์— COPY ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•œ ๋ชจ์Šต์ด๋‹ค.

 

์ •์ƒ์ ์œผ๋กœ ์‹คํ–‰๋˜์—ˆ๋‹ค.

 

AWS ์•ก์„ธ์Šค ํ‚ค์™€ ๋น„๋ฐ€ ์•ก์„ธ์Šค ํ‚ค๋Š” ๋ฐœ๊ธ‰๋ฐ›์€ ํ‚ค๋ฅผ ๋ณต์‚ฌํ•ด์„œ ๋ถ™์—ฌ๋„ฃ๊ธฐ๋งŒ ํ•˜๋ฉด ๋œ๋‹ค.

 


๐ŸŸง Data Governance

ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ ์ ์žฌ์ ์†Œ์— ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์‚ฌ์šฉ๋จ์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•œ ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ ํ”„๋กœ์„ธ์Šค

๋ฐ์ดํ„ฐ ํ’ˆ์งˆ ๋ณด์žฅ๊ณผ ๋ฐ์ดํ„ฐ ๊ด€๋ จ ๋ฒ•๊ทœ ์ค€์ˆ˜๋ฅผ ๋ชฉ์ ์œผ๋กœ ํ•จ

  • ๋ฐ์ดํ„ฐ ๊ธฐ๋ฐ˜ ๊ฒฐ์ •์—์„œ์˜ ์ผ๊ด€์„ฑ
  • ๋ฐ์ดํ„ฐ๋ฅผ ์ด์šฉํ•œ ๊ฐ€์น˜ ๋งŒ๋“ค๊ธฐ > Citizen data scientist๊ฐ€ ๋” ํšจ์œจ์ ์œผ๋กœ ์ผํ•  ์ˆ˜ ์žˆ๊ฒŒํ•จ
  • ๋ฐ์ดํ„ฐ ๊ด€๋ จ ๋ฒ•๊ทœ ์ค€์ˆ˜ > ์ ์ ˆํ•œ ๊ถŒํ•œ ์„ค์ •๊ณผ ๋ณด์•ˆ ํ”„๋กœ์„ธ์Šค

 

Data Governance ๊ด€๋ จ ์„œ๋น„์Šค

Enterprise ๋ ˆ๋ฒจ์—์„œ๋งŒ ๊ฐ€๋Šฅ(๋ฌด๋ฃŒ๋ฒ„์ „์ธ ์Šคํƒ ๋‹ค๋“œ๋Š” ๋ถˆ๊ฐ€)

 

Object Tagging

๋ฌธ์ž์—ด(ํƒœ๊ทธ)์„ Snowflake ๊ฐ์ฒด์— ์ง€์ • ๊ฐ€๋Šฅํ•˜๋‹ค.

Object : Organization๋ถ€ํ„ฐ DB, ์œ ์ €, ํ…Œ์ด๋ธ”, ์ •์ฑ…๊นŒ์ง€ Snowflake์˜ ๋ชจ๋“  ๊ฐ์ฒด

 

ํƒœ๊ทธ๋Š” ๊ตฌ์กฐ๋ฅผ ๋”ฐ๋ผ ๊ณ„์Šน๋œ๋‹ค. ex) ๊ฐœ์ธ์ •๋ณด์™€ ๊ด€๋ จ๋œ ๋ฐ์ดํ„ฐ ๋ฌถ๊ธฐ

 

Snowflake์˜ ๊ตฌ์กฐ. ์ด ์•ˆ์˜ ๋ชจ๋“  ๊ฒƒ๋“ค์ด Snowflake ๊ฐ์ฒด์ด๋‹ค.

 

Data Classification

 

Snowflake๊ฐ€ ํ…Œ์ด๋ธ”์— ์žˆ๋Š” ์ปฌ๋Ÿผ์„ ๋ณด๊ณ  ์•Œ์•„์„œ ํƒœ๊ทธ๋ฅผ ๋‹ฌ์•„์ฃผ๋Š” ์„œ๋น„์Šค

์‹๋ณ„์ž(Identifier)์™€ ์ค€์‹๋ณ„์ž(Quasi_identifier)๋ฅผ ๊ตฌ๋ถ„ํ•ด์ฃผ์ง€๋งŒ, ์˜์–ด(US)๋งŒ ๊ฐ€๋Šฅ

 

์ ์šฉ ๋‹จ๊ณ„

  • Analyze : ์ ์šฉ๋œ ํ…Œ์ด๋ธ”์˜ ๊ฐœ์ธ์ •๋ณด๋‚˜ ๋ฏผ๊ฐ์ •๋ณด๊ฐ€ ์žˆ๋Š” ์ปฌ๋Ÿผ์„ ๋ถ„๋ฅ˜
  • Review : ์‚ฌ๋žŒ์ด ๋ถ„๋ฅ˜๋œ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๊ณ  ๋ฆฌ๋ทฐํ•˜๊ณ  ํŽธ์ง‘
  • Apply : ์ตœ์ข… ๊ฒฐ๊ณผ๋ฅผ System Tag๋กœ ๋ถ„๋ฅ˜ํ•˜์—ฌ ์ €์žฅ

 

Tag based Masking Policies

๋ถ€์—ฌ๋œ Tag์— ์•ก์„ธ์Šค ๊ถŒํ•œ์„ ์ง€์ •ํ•ด์ฃผ๋Š” ์„œ๋น„์Šค

๋ณดํ†ต ๊ฐœ์ธ์ •๋ณด์™€ ๊ฐ™์€ ํƒœ๊ทธ์— ๋ถ€์—ฌํ•˜๋Š” ์šฉ๋„๋กœ ๋งŽ์ด ์‚ฌ์šฉ๋œ๋‹ค.

 

Access History

๋ฐ์ดํ„ฐ ์ ‘๊ทผ์— ๋Œ€ํ•œ ๊ฐ์‚ฌ ์ถ”์ ์„ ์ œ๊ณตํ•˜์—ฌ ๋ณด์•ˆ๊ณผ ๊ทœ์ •์„ ์ค€์ˆ˜ํ•˜๊ธฐ ์œ„ํ•œ ์„œ๋น„์Šค

  • ์ž ์žฌ์ ์ธ ๋ณด์•ˆ ์œ„๋ฐ˜์ด๋‚˜ ๋ฌด๋‹จ ์•ก์„ธ์Šค ์‹œ๋„์˜ ์กฐ์‚ฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ์บก์ฒ˜๋œ ์ •๋ณด์—๋Š” ์‚ฌ์šฉ์ž ์‹ ์›, IP ์ฃผ์†Œ, ํƒ€์ž„์Šคํƒฌํ”„ ๋“ฑ ์„ธ๋ถ€์ •๋ณด๋ฅผ ํฌํ•จํ•œ๋‹ค.
  • DB ๋กœ๊ทธ์ธ, ์‹คํ–‰๋œ ์ฟผ๋ฆฌ, ํ…Œ์ด๋ธ” ๋ฐ ๋ทฐ ์•ก์„ธ์Šค, ๋ฐ์ดํ„ฐ ์กฐ์ž‘ ์ž‘์—… ๋“ฑ์„ ์ด๋ฒคํŠธ๋กœ ์ถ”์ ํ•œ๋‹ค.

 

Object Dependencies

ํ…Œ์ด๋ธ” ์ด๋ฆ„์ด๋‚˜ ์ปฌ๋Ÿผ ๋“ฑ์„ ๋ณ€๊ฒฝ ๋˜๋Š” ์‚ญ์ œํ•˜๋Š” ๊ฒฝ์šฐ ์ด๋กœ ์ธํ•œ ์˜ํ–ฅ์„ ์‹๋ณ„ํ•ด์ฃผ๋Š” ์„œ๋น„์Šค

๋ฐ์ดํ„ฐ ๊ฑฐ๋ฒ„๋„Œ์Šค์™€ ์‹œ์Šคํ…œ ๋ฌด๊ฒฐ์„ฑ ์œ ์ง€๋ฅผ ๋ชฉ์ ์œผ๋กœ ํ•œ๋‹ค.

ex) ์ค‘์š”ํ•œ ๋งค์ถœ์ง€ํ‘œ์™€ ๊ด€๋ จ๋œ ์ปฌ๋Ÿผ์„ ๋ณ€๊ฒฝํ•˜๋ ค๋Š” ๊ฒฝ์šฐ ์–ด๋–ค ์˜ํ–ฅ์ด ์žˆ๋Š”์ง€ ๋ณด๊ณ 

 

๋˜ํ•œ ๊ณ„์Šน ๊ด€๊ณ„ ๋ถ„์„ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•˜์—ฌ ๋” ์„ธ๋ฐ€ํ•œ ๋ณด์•ˆ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

ex) ์–ด๋–ค ํ…Œ์ด๋ธ”์˜ ๊ฐœ์ธ์ •๋ณด ์ปฌ๋Ÿผ์ด ์ƒˆ๋กœ์šด ํ…Œ์ด๋ธ”์„ ๋งŒ๋“ค๋•Œ ์‚ฌ์šฉ๋œ๋‹ค > ๊ฐœ์ธ์ •๋ณด ์ปฌ๋Ÿผ์˜ ๊ถŒํ•œ ๋ฐ ํƒœ๊ทธ ๊ณ„์Šน

 

Snowflake์˜ ์ค‘์š”ํ•œ ๊ธฐ๋Šฅ ์ค‘ ํ•˜๋‚˜๋ผ๊ณ  ํ•œ๋‹ค.