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

[Week8 AWS ๋ฐ์ดํ„ฐ์›จ์–ดํ•˜์šฐ์Šค] TIL 32์ผ์ฐจ - Redshift์™€ S3์‹ค์Šต

๐Ÿช„ํ•˜๋ฃจ๐Ÿช„ 2023. 11. 29. 17:33
728x90

โ… . Redshift์˜ ํŠน์ง•

1. ๊ณ ์ • ๋น„์šฉ ์˜ต์…˜

160GB~2PB๊นŒ์ง€ ๊ฐ€๋Šฅ

HDD๋Œ€์‹  SSD๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์†๋„๊ฐ€ ๋น ๋ฅธ ํŽธ(๊ทธ๋ž˜๋„ ํ”„๋กœ๋•์…˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋น„ํ•ด์„œ๋Š” ์†๋„๊ฐ€ ๋Š๋ฆผ)

์ปฌ๋Ÿผ๊ธฐ๋ฐ˜ ์Šคํ† ๋ฆฌ์ง€์ด๊ธฐ ๋•Œ๋ฌธ์— ์ปฌ๋Ÿผ๋ณ„ ์••์ถ•์ด ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์••์ถ•๋ฅ ์ด ๋†’๊ณ  ์„ฑ๋Šฅ์ด ์ข‹์€ ํŽธ

๋ฒŒํฌ ์—…๋ฐ์ดํŠธ ๊ฐ€๋Šฅ(๋ ˆ์ฝ”๋“œ๋ฅผ S3์— ์ €์žฅ ํ›„ COPY ์˜ต์…˜์œผ๋กœ ์ผ๊ด„ ์ ์žฌ)

๋ฐ์ดํ„ฐ ๊ณต์œ  ๊ธฐ๋Šฅ(AWS ํŠน์ • ๊ณ„์ •๊ณผ ํŠน์ • ๋ฐ์ดํ„ฐ๋ฅผ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋‹ค.) Snowflake๋„ ๊ฐ€๋Šฅ

๋ฐ์ดํ„ฐ ์›จ์–ดํ•˜์šฐ์Šค์ด๊ธฐ ๋•Œ๋ฌธ์— primary key uniqueness๋ฅผ ๋ณด์žฅํ•˜์ง€ ์•Š์Œ

Postgresql๊ณผ ํ˜ธํ™˜์ด ๊ฐ€๋Šฅ(JDBC/ODBC)์œผ๋กœ ์•ก์„ธ์Šค ๊ฐ€๋Šฅ

 

2. ๊ฐ€๋ณ€ ๋น„์šฉ ์˜ต์…˜(serverless)๋„ ์กด์žฌํ•œ๋‹ค.

 

3. ๋น„์šฉ

1) Dense  Storage (HDD)

์ €์žฅ์— ์ง‘์ค‘

2) Dense Compute(SSD)

๊ณ„์‚ฐ์— ์ง‘์ค‘

3) Managed Storage(SSD)

์ €์žฅ+๊ณ„์‚ฐ์— ๋ชจ๋‘ ์ง‘์ค‘

 

cf) ๋ฐ์ดํ„ฐ ์›จ์–ดํ•˜์šฐ์Šค์˜ ์„ฑ๋Šฅ์„ ๋†’์ด๋Š” ์˜ต์…˜(Auto-scaling)

Scale-up : ๋” ์ข‹์€ ์‚ฌ์–‘์˜ ์„œ๋ฒ„๋กœ ์—…๊ทธ๋ ˆ์ด๋“œ

Scale-out : ์„œ๋ฒ„๋ฅผ ํ•œ๋Œ€ ๋” ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ(๋ณดํŽธ์ ์œผ๋กœ ํ•ด๋‹น ๋ฐฉ์‹์„ ๋” ๋งŽ์ด ์‚ฌ์šฉ)

 

4. ๋‹จ์ 

์ตœ์ ํ™”๊ฐ€ ์–ด๋ ค์›€(<->BigQuery, Snowflake๋Š” ์ €์žฅ๊ณผ์ •์„ ์ž๋™์ ์œผ๋กœ ์ฒ˜๋ฆฌ)

๋ ˆ์ฝ”๋“œ ๋ถ„ํฌ์— SKEW ๋ฐœ์ƒ : ์–ด๋Š ๋…ธ๋“œ์— ์ €์žฅํ•ด์•ผ ํ•˜๋Š”์ง€ ์‚ฌ์šฉ์ž๊ฐ€ ์ง€์ •ํ•œ๋‹ค. ํ•œ์ชฝ ๋…ธ๋“œ๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ชฐ๋ฆฌ๋ฉด, ํ•ด๋‹น ๋…ธ๋“œ๋งŒ ์ฒ˜๋ฆฌ ์†๋„๊ฐ€ ๋Š๋ ค์ ธ ๋ถ„์‚ฐ ์ฒ˜๋ฆฌ์˜ ํšจ์œจ์„ฑ์ด ์‚ฌ๋ผ์ง„๋‹ค.

 

5. ๋ถ„๋ฐฐ ์˜ต์…˜

Diststyle 

๋ ˆ์ฝ”๋“œ ๋ถ„๋ฐฐ๊ฐ€ ์–ด๋–ป๊ฒŒ ๋˜๋Š”์ง€๋ฅผ ์„ ํƒํ•˜๋Š” ์˜ต์…˜

  • all : ๋ชจ๋“  ๋…ธ๋“œ์— ๋ชจ๋“  ๋ ˆ์ฝ”๋“œ๋ฅผ ์ ์žฌ(ํ•˜๋‚˜์˜ ๋ ˆ์ฝ”๋“œ๊ฐ€ ๋ชจ๋“  ๋…ธ๋“œ์— ์ €์žฅ)
  • even : round-robin ๋ฐฉ์‹์œผ๋กœ ํ•˜๋‚˜์”ฉ ๋Œ์•„๊ฐ€๋ฉฐ ๋ ˆ์ฝ”๋“œ์— ์ ์žฌ(ํ•˜๋‚˜์˜ ๋ ˆ์ฝ”๋“œ๊ฐ€ ํ•˜๋‚˜์˜ ๋…ธ๋“œ์— ์ €์žฅ)
  • key : ํŠน์ • ์ปฌ๋Ÿผ์˜ ๊ฐ’์„ ๊ธฐ์ค€์œผ๋กœ ์ ์žฌ(๋ณดํ†ต, unique column ๊ธฐ์ค€)
    • distkey

Sortkey

๋…ธ๋“œ ๋‚ด์—์„œ ์–ด๋–ค ์ปฌ๋Ÿผ์„ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌํ•˜๋Š”์ง€

๋ณดํ†ต TIMESTAMP์˜ ์ปฌ๋Ÿผ์„ ์‚ฌ์šฉ

 

์ ์šฉ

Create Table(
...
)DISTSTYLE ์Šคํƒ€์ผ์ด๋ฆ„ DISTKEY(์ปฌ๋Ÿผ๋ช…) SORTKEY(์ปฌ๋Ÿผ๋ช…);

๋ณดํ†ต DISTKEY์—๋Š” ์ž์ฃผ ์กฐํšŒํ•˜๋Š” ์ปฌ๋Ÿผ์„ ๊ธฐ์ค€์œผ๋กœ ํ•˜๋Š”๋ฐ, ๋ ˆ์ฝ”๋“œ ๋ถ„ํฌ์— SKEW๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ, 

 

 

โ…ก. ๋ฐ์ดํ„ฐ ์›จ์–ดํ•˜์šฐ์Šค์˜ ๋ฒŒํฌ ์—…๋ฐ์ดํŠธ ๋ฐฉ์‹

1. ๋Œ€์šฉ๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ(csv, json, sql)๋ฅผ ์••์ถ•๋ฅ ์ด ๋†’์€ parquet ํŒŒ์ผ๋กœ ๋งŒ๋“ ๋‹ค.

cf) Parquet์€ ๋ถ„์‚ฐํ˜• ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ์‹œ์Šคํ…œ์„ ์œ„ํ•œ ์—ด ์ง€ํ–ฅ ํ˜•์‹์˜ ํŒŒ์ผ ํฌ๋งท ์ค‘ ํ•˜๋‚˜์ด๋‹ค.

2. A Cron job or Schedular(ex. Airflow)๋ฅผ ํ™œ์šฉํ•ด์„œ ๋Œ€์šฉ๋Ÿ‰ ์Šคํ† ๋ฆฌ์ง€(S3)์— ์—…๋กœ๋“œํ•œ๋‹ค.

3. ๋ฒŒํฌ ์—…๋ฐ์ดํŠธ : ๋Œ€์šฉ๋Ÿ‰ ์Šคํ† ๋ฆฌ์ง€์— ์ €์žฅ๋œ ํŒŒ์ผ์„ COPY SQL๋กœ Redshift๋กœ ํ•œ ๋ฒˆ์— ๋ณต์‚ฌํ•œ๋‹ค.

 

 

โ…ข. ์ง€์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ ํƒ€์ž…

๋‹ค๋ฅธ ๊ฑด Postgresql๊ณผ ๋™์ผ(char, varchar, text, json์€ ๋‹ค๋ฆ„)

Postgresql์˜ ๊ฒฝ์šฐ char, varchar, text๋Š” utf-8 ๊ธฐ์ค€(ํ•œ ๊ธ€์ž๋Š” ํ•œ char)

Redshift์˜ ๊ฒฝ์šฐ byte๋‹จ์œ„(์–ธ์–ด์— ๋”ฐ๋ผ ๋‹ค๋ฆ„. ํ•œ์ค‘์ผ=3byte, ์˜๋ฌธ=1byte). ์–ธ์–ด์— ๋”ฐ๋ผ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” ํ˜•์‹์ด ๋‹ค๋ฆ„

Json์˜ ๊ฒฝ์šฐ Redshift์—์„œ ์ œ๊ณตํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— Char๋กœ ๋ฐ›์•„์™€์„œ ์ดํ›„์— ํ•จ์ˆ˜๋กœ Parsing์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•œ๋‹ค.

 

๊ณ ๊ธ‰ ๋ฐ์ดํ„ฐ ํƒ€์ž…

  1. GEOMETRY:๊ณต๊ฐ„ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ. ์ง€๋ฆฌ์ ์ธ ํ˜•์ƒ์ด๋‚˜ ๊ณต๊ฐ„ ๋ฐ์ดํ„ฐ๋ฅผ ๋‚˜ํƒ€๋‚ด๊ธฐ ์œ„ํ•œ ๊ฒƒ์œผ๋กœ, ํฌ์ธํŠธ, ๋ผ์ธ, ํด๋ฆฌ๊ณค ๋“ฑ์˜ ๋‹ค์–‘ํ•œ ์ง€์˜ค๋ฉ”ํŠธ๋ฆฌ ํƒ€์ž…์„ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๊ณ , ์ง€๋„์ƒ์˜ ์œ„์น˜๋ฅผ ์ €์žฅํ•˜๊ฑฐ๋‚˜ ์ง€๋ฆฌ์ ์ธ ์˜์—ญ์„ ์ •์˜ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ.
  2. GEOGRAPHY: GEOMETRY๋ณด๋‹ค, ๋” ๋„“์€ ์ง€๋ฆฌ์  ์˜์—ญ์„ ๋‹ค๋ฃฌ๋‹ค. ์ง€๊ตฌ์ƒ์˜ ์œ„์น˜๋กœ ํ‘œํ˜„ํ•˜๋ฉฐ, ๊ฒฝ์œ„๋„ ์ขŒํ‘œ๋ฅผ ์‚ฌ์šฉ.
  3. HLLSKETCH: HyperLogLog(ํ•˜์ดํผ๋กœ๊ทธ๋กœ๊ทธ) ์Šค์ผ€์น˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฒƒ์œผ๋กœ ๋Œ€๋Ÿ‰์˜ ๊ณ ์œ ํ•œ ๊ฐ’์„ ์นด์šดํŠธํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ํ™•๋ฅ ์ ์ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜. ๋Œ€์šฉ๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ ์„ธํŠธ์—์„œ ๊ณ ์œ ํ•œ ๊ฐ’์„ ์ถ”์ •ํ•˜๋Š” ๋ฐ ํšจ๊ณผ์ ์ด๋ฉฐ, ์ฃผ๋กœ ๋Œ€๊ทœ๋ชจ ๋ฐ์ดํ„ฐ ๋ถ„์„ ๋ฐ ์ง‘๊ณ„ ์ž‘์—…์—์„œ ์‚ฌ์šฉ.
  4. SUPER: ์‚ฌ์šฉ์ž ์ •์˜ ๋ฐ์ดํ„ฐํ˜•์„ ๋งŒ๋“ค ๋•Œ ์‚ฌ์šฉ๋˜๋Š” ์ผ์ข…์˜ placeholder(์ž๋ฆฌ ํ‘œ์‹œ์ž)

 

 

โ…ฃ. Redshift ์ƒ์„ฑํ•˜๊ธฐ

free trial๋ฅผ ์ง€์›ํ•˜๋Š” Redshift serverless(๊ฐ€๋ณ€์˜ต์…˜)์„ ์ด์šฉํ•˜์ž.

(use default settings๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ„ํŽธํ•˜๊ฒŒ ์„ธํŒ…ํ•˜์˜€๋‹ค.)

 

์ด์ œ AWS redshift์™€ colab์„ ์—ฐ๊ฒฐํ•ด ๋ณด์ž.

๋‘ ๊ฐ€์ง€ ์ž‘์—…์ด ํ•„์š”ํ•œ๋ฐ, AWS์˜ ์—”๋“œํฌ์ธํŠธ ์ •๋ณด๋ฅผ ํ™•์ธํ•˜๊ณ (Hostname, port, DBname) Access ๊ถŒํ•œ์„ ์„ค์ •ํ•ด์•ผ ํ•œ๋‹ค.

 

1. AWS ์—”๋“œํฌ์ธํŠธ

- ํผ๋ธ”๋ฆญ ์•ก์„ธ์Šค ์„ค์ •

Serverless ๋Œ€์‹œ๋ณด๋“œ> ์ž‘์—…๊ทธ๋ฃน> ๋„คํŠธ์›Œํฌ ๋ฐ ๋ณด์•ˆ>ํŽธ์ง‘>ํผ๋ธ”๋ฆญ์•ก์„ธ์Šค๊ฐ€๋Šฅ ์ฒดํฌ

ํผ๋ธ”๋ฆญ ์•ก์„ธ์Šค ์„ค์ •

 

- VPC ๋ณด์•ˆ ๊ทธ๋ฃน ์„ค์ • ๋ณ€๊ฒฝ

ํ˜„์žฌ๋Š” ๊ฐ™์€ VPC ๋‚ด์˜ ์„œ๋น„์Šค์—๋งŒ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•œ๋ฐ, ์™ธ๋ถ€์—์„œ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๊ฒŒ ์„ค์ •ํ•ด ๋ณด์ž.

Serverless ๋Œ€์‹œ๋ณด๋“œ>์ž‘์—…๊ทธ๋ฃน>๋„คํฌ์›Œํฌ ๋ฐ ๋ณด์•ˆ> VPC ๋ณด์•ˆ ๊ทธ๋ฃน> ์ธ๋ฐ”์šด๋“œ ๊ทœ์น™> ์ธ๋ฐ”์šด๋“œ ๊ทœ์น™ ํŽธ์ง‘

 

๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ธ๋ฐ”์šด๋“œ ๊ทœ์น™์„ ์ถ”๊ฐ€ํ•œ๋‹ค.

์ธ๋ฐ”์šด๋“œ ๊ทœ์น™ ์ถ”๊ฐ€(5439)

 

- ์•ค๋“œํฌ์ธํŠธ ๋ณต์‚ฌ

Serverless ๋Œ€์‹œ๋ณด๋“œ> ์ž‘์—…๊ทธ๋ฃน> ์•ค๋“œ ํฌ์ธํŠธ ๋ณต์‚ฌ

์•ค๋“œํฌ์ธํŠธ ํ™•์ธ

 

 

2. Access ๊ถŒํ•œ ์„ค์ •

admin ๊ณ„์ •์œผ๋กœ ์ ‘๊ทผํ•˜๊ฑฐ๋‚˜, IAM์˜ ๊ถŒํ•œ์„ ์„ค์ •ํ•œ ์ƒˆ ๊ณ„์ •์œผ๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.

ํ•ด๋‹น ์‹ค์Šต์—์„œ๋Š” admin๊ณ„์ •์œผ๋กœ ์ ‘๊ทผํ•˜๋„๋ก ํ•œ๋‹ค.

1) Admin Userid/password

Serverless ๋Œ€์‹œ๋ณด๋“œ > ๋„ค์ž„์ŠคํŽ˜์ด์Šค > ์ž‘์—… > Edit admin credential ์„ ํƒ

 

์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ ์•”ํ˜ธ๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋‹ค์Œ์˜ ๊ณผ์ •์„ ์„ ํƒํ•œ๋‹ค.

admin, password ์ง€์ •

2) Admin + IAM์„ ํ†ตํ•ด ๋‹ค๋ฅธ Account ๊ณ„์ • ๋งŒ๋“ค๊ธฐ

 

 

โ…ค. Colab์— ์—ฐ๊ฒฐํ•˜๊ธฐ

!pip install ipython-sql==0.4.1
!pip install SQLAlchemy==1.4.49

%load_ext sql
%sql postgresql://์–ด๋“œ๋ฏผ๊ณ„์ •๋ช…:๋น„๋ฐ€๋ฒˆํ˜ธ@endpoint๋ถ™์—ฌ๋„ฃ๊ธฐ

%%sql
SQL๋ฌธ์žฅ์‹คํ–‰

 

 

 

โ…ฅ. Redshift ์ดˆ๊ธฐ ์„ค์ •ํ•˜๊ธฐ

0. db์„ค์ •, ์ •๋ณด ํ™•์ธ

โ…ฃ ๊ณผ์ •์—์„œ dev ์ด๋ฆ„์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์ƒ์„ฑํ•˜์˜€๋‹ค.

๋‹ค์Œ์— ์ƒ์„ฑํ•  ๊ฒƒ๋“ค์— ๋Œ€ํ•œ ๋ชจ๋“  ์ •๋ณด๋Š” ํŠน์ • ํ…Œ์ด๋ธ”์— ๊ธฐ๋ก๋˜์–ด ์žˆ๋‹ค.

pg_namespace ์ƒ์„ฑ๋œ ์Šคํ‚ค๋งˆ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๊ฐ€์ง„ ํ…Œ์ด๋ธ”
(schema์ด๋ฆ„, ํ•ด๋‹น ์Šคํ‚ค๋งˆ๋ฅผ ์†Œ์œ ํ•œ ์‚ฌ๋žŒ, ๊ถŒํ•œ์„ ๊ฐ€์ง„ ์‚ฌ์šฉ์ž์˜ id, ์‚ฌ์šฉ์ž์˜ ๊ถŒํ•œ ์ •๋ณด)
pg_user ์ƒ์„ฑ๋œ ์‚ฌ์šฉ์ž์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๊ฐ€์ง„ ํ…Œ์ด๋ธ”
pg_group ์ƒ์„ฑ๋œ ๊ทธ๋ฃน์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๊ฐ€์ง„ ํ…Œ์ด๋ธ”
SVV_ROLES ์ƒ์„ฑ๋œ ์—ญํ• ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๊ฐ€์ง„ ํ…Œ์ด๋ธ”

 

๋ณดํ†ต ์‚ฌ์šฉ์ž, ํ…Œ์ด๋ธ”์ด ๊ต‰์žฅํžˆ ๋งŽ์•„์ง€๋ฏ€๋กœ ๊ทธ๋ฃน-์Šคํ‚ค๋งˆ ๋ณ„๋กœ ์ ‘๊ทผ๊ถŒํ•œ์„ ์ œ์–ดํ•œ๋‹ค.

1. Schema

ํ…Œ์ด๋ธ”์„ ์ €์žฅํ•˜๋Š” ํด๋”์˜ ์—ญํ• ๋กœ, ๋ณดํ†ต ๋‹ค์Œ์˜ 4๊ฐœ์˜ ์Šคํ‚ค๋งˆ๊ฐ€ ๊ธฐ๋ณธ์œผ๋กœ ์žˆ๋‹ค.

- row_data : ETL ๊ณผ์ •์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ชจ๋‘ ์ €์žฅ

- analytics : row_data์—์„œ ๋ฐ์ดํ„ฐ ํ™œ์šฉ์— ํ•„์š”ํ•œ ํ…Œ์ด๋ธ”, ํ…Œ์ด๋ธ” ์กฐ์ธ ๋“ฑ์˜ ๊ฒฐ๊ณผ๋ฅผ ์ €์žฅ

- adhoc : ๊ฐœ๋ฐœ/ํ…Œ์ŠคํŠธ์šฉ ํ…Œ์ด๋ธ”์ด ์ €์žฅ

- pii : ๊ฐœ์ธ์ •๋ณด ๊ด€๋ จ ํ…Œ์ด๋ธ”์ด ์ €์žฅ (์•ก์„ธ์Šค ํ•  ์ˆ˜ ์žˆ๋Š” ์‚ฌ๋žŒ์€ ์ตœ์†Œํ™” + ์ ‘๊ทผํ•œ ์‚ฌ๋žŒ ๋กœ๊น…=์ถ”์  ๊ฐ€๋Šฅํ•˜๊ฒŒ)

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

CREATE SCHEMA raw_data;
CREATE SCHEMA analytics;
CREATE SCHEMA adhoc;
CREATE SCHEMA pii;

 

2. ๊ทธ๋ฃน/์‚ฌ์šฉ์ž ์ƒ์„ฑ

- ์‚ฌ์šฉ์ž ์ƒ์„ฑ

CREATE USER ์‚ฌ์šฉ์ž์ด๋ฆ„ PASSWORD '๋น„๋ฐ€๋ฒˆํ˜ธ';

 

- ๊ทธ๋ฃน ์ƒ์„ฑ(์ƒ์† ๋ถˆ๊ฐ€)

๋ณดํ†ต ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ด๋ฆ„์œผ๋กœ ๊ทธ๋ฃน์„ ์ƒ์„ฑํ•˜๊ณ  ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•œ๋‹ค.

XXX_users : read

XXX_authors : read/write

pii_users: admin(๊ฐœ์ธ์ •๋ณด ์ ‘๊ทผ)

CREATE GROUP ๊ทธ๋ฃน์ด๋ฆ„;

 

- ๊ทธ๋ฃน์— ์‚ฌ์šฉ์ž ์ถ”๊ฐ€

ALTER GROUP ๊ทธ๋ฃน์ด๋ฆ„ ADD USER ์‚ฌ์šฉ์ž์ด๋ฆ„;

 

- ๊ทธ๋ฃน์— ์Šคํ‚ค๋งˆ/ํ…Œ์ด๋ธ” ์ ‘๊ทผ ๊ถŒํ•œ ์ง€์ •

GRANT SELECT, INSERT, UPDATE, DELETE ON SCHEMA ์Šคํ‚ค๋งˆ์ด๋ฆ„ TO ๊ทธ๋ฃน์ด๋ฆ„;
or
GRANT SELECT, INSERT, UPDATE, DELETE ON TABLE ํ…Œ์ด๋ธ”์ด๋ฆ„ TO ๊ทธ๋ฃน์ด๋ฆ„;

 

3. ์—ญํ• 

๊ทธ๋ฃน์˜ ๊ฒฝ์šฐ, ๊ณ„์Šน์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ชจ๋“  ๊ถŒํ•œ์„ ์ง€์ •ํ•ด์•ผ ํ•œ๋‹ค.

์—ญํ• ์˜ ๊ฒฝ์šฐ ์ƒ์†(๊ณ„์Šน)์ด ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ•œ ์—ญํ• ์— ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ๋ชจ๋‘ ์ƒˆ๋กœ์šด ์—ญํ• ์— ๋ถ€์—ฌํ•˜์—ฌ ํ•„์š”ํ•œ ์—ญํ• ๋งŒ ์ถ”๊ฐ€๋กœ ์ง€์ •ํ•˜๋ฉด ๋œ๋‹ค.

- ์—ญํ•  ์ƒ์„ฑ

CREATE ROLE ์—ญํ• ์ด๋ฆ„;

 

- ์—ญํ•  ๋ถ€์—ฌ(์‚ฌ์šฉ์ž, ๊ทธ๋ฃน, ์—ญํ• )

GRANT ROLE ์—ญํ•  TO ์‚ฌ์šฉ์ž or ๊ทธ๋ฃน or ์—ญํ• ;

 

โ…ฆ. ๋ฒŒํฌ ์—…๋ฐ์ดํŠธ ํ•˜๊ธฐ( at raw_data ์Šคํ‚ค๋งˆ )

๐Ÿ“raw_data ์Šคํ‚ค๋งˆ์— COPY๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•ด์„œ 3๊ฐœ์˜ ํ…Œ์ด๋ธ”์„ ํ†ต์งธ๋กœ ๋ณต์‚ฌํ•ด ๋ณด์ž.

 

1. CSV ํŒŒ์ผ์„ AWS S3 ๋ฒ„ํ‚ท์— ์—…๋กœ๋“œ

1) S3 ๋ฒ„ํ‚ท ์ƒ์„ฑ

AmazonS3> ๋ฒ„ํ‚ท> ๋ฒ„ํ‚ท ๋งŒ๋“ค๊ธฐ์—์„œ Redshift์™€ ๋™์ผํ•œ ์ง€์—ญ์— ๋ฒ„ํ‚ท์„ ํ•˜๋‚˜ ์ƒ์„ฑํ•œ๋‹ค.(๋‚˜๋จธ์ง€ ๊ตฌ์„ฑ์€ ๊ธฐ๋ณธ ๊ตฌ์„ฑ์„ ์„ ํƒํ•˜์˜€๋‹ค.)

S3 ๋ฒ„ํ‚ท ์ƒ์„ฑ

2) ํŒŒ์ผ ์—…๋กœ๋“œ 

๐Ÿงบtest_s3bucket

    ๐Ÿ“test

        ๐Ÿ“channel.csv

        ๐Ÿ“session_timestamp.csv

        ๐Ÿ“session_transaction.csv

        ๐Ÿ“user_session_channel.csv

 

์—…๋กœ๋“œ๋œ ํŒŒ์ผ์— ์ ‘๊ทผํ•˜๋ฉด, S3 URL์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ ํ•ด๋‹น ์ฃผ์†Œ๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.

 

2. ๊ถŒํ•œ ์„ค์ •

1) Redshift๊ฐ€ S3์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” IAM ์ƒ์„ฑ

IAM> ์—ญํ• > ์—ญํ• ์ƒ์„ฑ

์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ์—”ํ‹ฐํ‹ฐ ์œ ํ˜• - AWS ์„œ๋น„์Šค, ์‚ฌ์šฉํ•˜๋ก€ - Redshift(Customizable) ์„ ํƒ

IAM ์—ญํ•  ์ƒ์„ฑ

 

AmazonS3FullAccess๊ณผ ๊ฐ™์€ ๊ถŒํ•œ์„ ์ถ”๊ฐ€ํ•œ๋‹ค.

์—ญํ•  ์ด๋ฆ„์€ redshift.read.s3๋กœ ๋ช…๋ช…ํ•œ๋‹ค.

์—ญํ•  ๊ถŒํ•œ(์ •์ฑ…) ์ถ”๊ฐ€

 

 

2) Redshift์— ์—ญํ• ๋ถ€์—ฌ

Serverless๋Œ€์‹œ๋ณด๋“œ> ๋„ค์ž„์ŠคํŽ˜์ด์Šค ์„ ํƒ> ๋ณด์•ˆ ๋ฐ ์•”ํ˜ธํ™”> IAM ์—ญํ• ๊ด€๋ฆฌ

ํ•ด๋‹น ํŽ˜์ด์ง€์—์„œ IAM ์—ญํ•  ์—ฐ๊ฒฐ์„ ์„ ํƒํ•œ๋‹ค(์•„๊นŒ ์ƒ์„ฑํ•œ redshift.read.s3 ์—ญํ• ์— ์—ฐ๊ฒฐ)

IAM ์—ญํ•  ์—ฐ๊ฒฐ

 

3. COPY ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•ด์„œ row_data ์Šคํ‚ค๋งˆ์— ํ…Œ์ด๋ธ”์„ ๋ณต์‚ฌ

๋‹ค์Œ ์ฃผ์†Œ์—์„œ Redshift์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๊ตฌ๋ฌธ๋“ค์„ ์ฐธ๊ณ ํ•ด ๋ณด์ž.

 

COPY - Amazon Redshift

์ด ํŽ˜์ด์ง€์— ์ž‘์—…์ด ํ•„์š”ํ•˜๋‹ค๋Š” ์ ์„ ์•Œ๋ ค ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์‹ค๋ง์‹œ์ผœ ๋“œ๋ ค ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ์ž ๊น ์‹œ๊ฐ„์„ ๋‚ด์–ด ์„ค๋ช…์„œ๋ฅผ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ๋ง์”€ํ•ด ์ฃผ์‹ญ์‹œ์˜ค.

docs.aws.amazon.com

1) ํ…Œ์ด๋ธ” ์ƒ์„ฑ

์šฐ์„ , COPY ํ•  ํ…Œ์ด๋ธ”์„ ์ƒ์„ฑํ•œ๋‹ค.(์นผ๋Ÿผ ๋“ฑ์„ ์ง€์ •)

2) ๋ฒŒํฌ ์—…๋ฐ์ดํŠธ

COPY ์Šคํ‚ค๋งˆ.ํ…Œ์ด๋ธ”์ด๋ฆ„ 
[ ์ปฌ๋Ÿผ๋ชฉ๋ก ]
FROM 'S3์—…๋กœ๋“œ๋œํŒŒ์ผ S3 URI'
credentials 'aws_iam_role=IAM ARN ๋ถ™์—ฌ๋„ฃ๊ธฐ'
delimiter ',' dateformat 'auto' timeformat 'auto' IGNOREHEADER 1 removequotes;

 

- S3์—…๋กœ๋“œ๋œ ํŒŒ์ผ S3 URI

S3๋ฒ„ํ‚ท์˜ ํŒŒ์ผ์˜ ์ฃผ์†Œ๋ฅผ ์ž…๋ ฅํ•œ๋‹ค.

- IAM ARN๋ถ€๋ถ„

IAM> ์—ญํ• > redshift.read.s3์„ ํƒ> ARN ๋ณต์‚ฌ ํ›„ ๋ถ™์—ฌ ๋„ฃ๊ธฐ๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค.

IAM ARN ํ™•์ธ

- ๋งˆ์ง€๋ง‰ ๋ฌธ์žฅ

delimiter ', ' : csv ํŒŒ์ผ์ด๋ฏ€๋กœ ์ฝค๋งˆ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๊ตฌ๋ถ„

IGNOREHEADER 1 : ์ฒซ ๋ฒˆ์งธ ์ค„์€ ํ—ค๋”์ด๋ฏ€๋กœ ๋ฌด์‹œํ•œ๋‹ค.

dateformat 'auto' timeformat 'auto' : date, time ํ˜•์‹์€ ์—ฌ๋Ÿฌ ํ˜•์‹ ์ค‘ redshift๊ฐ€ ์ž๋™ ์ง€์ •ํ•˜๋„๋ก ํ•œ๋‹ค.

removequotes : ๋”ฐ์˜ดํ‘œ ์ œ๊ฑฐ

 

4. COPY ์—๋Ÿฌ

COPY ๊ณผ์ • ์ค‘ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด,

stl_load_errors ํ…Œ์ด๋ธ”์˜ ์ œ์ผ ์ตœ๊ทผ ๋ ˆ์ฝ”๋“œ๋ฅผ ํ™•์ธํ•˜์—ฌ ์–ด๋–ค ์ปฌ๋Ÿผ์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋Š”์ง€ ํ™•์ธํ•ด ๋ณด์ž.

SELECT *
FROM stl_load_errors
ORDER BY starttime DESC;

 

 

โ…ง. (at analytics ์Šคํ‚ค๋งˆ ) CTAS ์‚ฌ์šฉํ•˜๊ธฐ

CREATE TABLE analytics.mau_summary AS
SELECT ~
FROM ~

 

 

 

 

728x90