20230523 TIL - Redshift

ohyujeongยท2023๋…„ 5์›” 23์ผ
0

TIL

๋ชฉ๋ก ๋ณด๊ธฐ
24/27

๐Ÿ“– ์˜ค๋Š˜์˜ ํ•™์Šต

  • AWS Redshift

AWS Redshift

AWS์—์„œ ์ง€์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ ์›จ์–ดํ•˜์šฐ์Šค ์„œ๋น„์Šค์ด๋‹ค.
์ตœ์†Œ 160GB๋กœ ์‹œ์ž‘ํ•ด์„œ 2PB์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.
๋ ˆ์ฝ”๋“œ ๋ณ„๋กœ ์ €์žฅํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์ปฌ๋Ÿผ๋ณ„๋กœ ์ €์žฅํ•˜์—ฌ ์ปฌ๋Ÿผ๋ณ„ ์••์ถ•์ด ๊ฐ€๋Šฅํ•˜๋ฉฐ, ์ปฌ๋Ÿผ์„ ์ถ”๊ฐ€/์‚ญ์ œํ•˜๋Š”๊ฒƒ์ด ์•„์ฃผ ๋น ๋ฅด๋‹ค.

๋ฐ์ดํ„ฐ ์›จ์–ดํ•˜์šฐ์Šค

์†๋„๋ณด๋‹ค๋Š” ์ฒ˜๋ฆฌ ์šฉ๋Ÿ‰์— ์ค‘์ ์„ ๋‘” OLAP(Online Analytical Processing) DB์ด๊ธฐ ๋•Œ๋ฌธ์— ํ”„๋กœ๋•์…˜ DB๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ์ ์ ˆํ•˜์ง€ ์•Š๋‹ค. Primary key uniqueness๋ฅผ ๋ณด์žฅํ•˜์ง€ ์•Š๋Š”๋‹ค.

SQL๊ธฐ๋ฐ˜ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค

Postgresql 8.* ๊ณผ SQL์ด ํ˜ธํ™˜๋œ๋‹ค. ๋˜ํ•œ Postgresql 8.* ์„ ์ง€์›ํ•˜๋Š” ํˆด์ด๋‚˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ (JDBC/ODBC)๋กœ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

์‚ฌ์šฉ ๋น„์šฉ

์˜ˆ์ „์—๋Š” ๊ณ ์ • ๋น„์šฉ ์˜ต์…˜๋งŒ์ด ์žˆ์—ˆ์ง€๋งŒ ์ตœ๊ทผ ๊ฐ€๋ณ€๋น„์šฉ ์˜ต์…˜๋„ ์ œ๊ณต๋˜๊ณ  ์žˆ๋‹ค. (Serverless Redshift)
์•„๋ž˜ ๊ฐ€๊ฒฉํ‘œ๋Š” ๊ณ ์ •๋น„์šฉ ์˜ต์…˜ ํ…Œ์ด๋ธ”์ด๋‹ค. Dense Storage๋Š” ์ฒ˜๋ฆฌ์šฉ๋Ÿ‰์—, Dense Compute๋Š” ์ฒ˜๋ฆฌ์†๋„์— ์ค‘์ ์„ ๋‘” ๋…ธ๋“œ์ด๋‹ค. Managed Storage๋Š” ์ฒ˜๋ฆฌ์šฉ๋Ÿ‰๊ณผ ์ฒ˜๋ฆฌ์†๋„ ๋ชจ๋‘ ๋†’์€ ๋…ธ๋“œ์ด๊ณ  ๊ทธ๋งŒํผ ๊ฐ€๊ฒฉ๋„ ๊ต‰์žฅํžˆ ๋น„์‹ธ๋‹ค.

์ฒ˜์Œ AWS ๊ณ„์ •์„ ์ƒ์„ฑํ•˜๊ณ  ์ฒ˜์Œ Redshift Serverless๋ฅผ ์ด์šฉํ•œ๋‹ค๋ฉด 3๋‹ฌ๊ฐ„, ํ˜น์€ $300 ๊นŒ์ง€ ๋ฌด๋ฃŒ๋กœ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

์Šค์ผ€์ผ๋ง ๋ฐฉ์‹

Snowflake๋‚˜ BigQuery ๊ฐ™์€ ๊ฒฝ์šฐ, ํŠน๋ณ„ํžˆ ์šฉ๋Ÿ‰์ด ์ •ํ•ด์ ธ์žˆ์ง€ ์•Š๊ณ  ์ฟผ๋ฆฌ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•œ ๋ฆฌ์†Œ์Šค์— ํ•ด๋‹นํ•˜๋Š” ๋น„์šฉ์„ ์ง€๋ถˆํ•˜๋Š” ๋ฐ ๋ฐ˜ํ•ด Redshift๋Š” ์šฉ๋Ÿ‰์ด ๋ถ€์กฑํ•ด์งˆ ๋•Œ๋งˆ๋‹ค ์ƒˆ๋กœ์šด ๋…ธ๋“œ๋ฅผ ์ถ”๊ฐ€(Scale Out)ํ•˜๊ฑฐ๋‚˜ ๋…ธ๋“œ๋ฅผ ์—…๊ทธ๋ ˆ์ด๋“œ(Scale Up)ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์Šค์ผ€์ผ๋ง์„ ํ•œ๋‹ค. ์ด๋ฅผ Resizing์ด๋ผ๊ณ  ๋ถ€๋ฅด๋ฉฐ Auto Scaling ์˜ต์…˜์„ ์„ค์ •ํ•˜๋ฉด ์ž๋™์œผ๋กœ ์ด๋ฃจ์–ด์ง„๋‹ค.

Snowflake๋‚˜ BigQuery์™€ Redshift๋ฅผ ๋น„๊ตํ•ด๋ดค์„ ๋•Œ ์ „์ž๊ฐ€ ๋” ํƒ„๋ ฅ์ ์œผ๋กœ ์Šค์ผ€์ผํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ธฐ์ˆ ์ด๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ์ง€๋งŒ, ๋น„์šฉ์˜ ์˜ˆ์ธก์ด ๋ถˆ๊ฐ€ํ•˜๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค.

๋ ˆ์ฝ”๋“œ ๋ถ„๋ฐฐ์™€ ์ €์žฅ๋ฐฉ์‹

Redshift๊ฐ€ 2๋Œ€ ์ด์ƒ์˜ ๋…ธ๋“œ๋กœ ๊ตฌ์„ฑ๋˜๋ฉด ๋ ˆ์ฝ”๋“œ๋“ค์€ ๋ถ„์‚ฐ์ €์žฅ๋˜์–ด์•ผ ํ•˜๊ณ , ์–ด๋–ป๊ฒŒ ๋ถ„์‚ฐ ์ €์žฅ๋˜์–ด์•ผ ํ•˜๋Š”์ง€ ์‚ฌ์šฉ์ž๊ฐ€ ์ •ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.
๊ทธ๋Ÿฌ๊ธฐ ์œ„ํ•ด์„œ๋Š” Diststyle , Distkey , Sortkey ์ด 3๊ฐ€์ง€์˜ ํ‚ค์›Œ๋“œ๋ฅผ ์•Œ์•„์•ผ ํ•œ๋‹ค.

Diststyle : ๋ ˆ์ฝ”๋“œ ๋ถ„๋ฐฐ๊ฐ€ ์–ด๋–ป๊ฒŒ ์ด๋ฃจ์–ด์ง€๋Š” ์ง€ ๊ฒฐ์ •ํ•œ๋‹ค. All, Even, Key ์˜ต์…˜์ด ์žˆ์œผ๋ฉฐ All์€ ๋ชจ๋“  ๋…ธ๋“œ์—๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„๋ฐฐํ•˜๊ณ , Even์€ ๋…ธ๋“œ๋ฅผ ๋Œ๋ฉด์„œ ๊ณ ๋ฅด๊ฒŒ ๋ถ„๋ฐฐํ•˜๊ณ , Key๋Š” ์„ ํƒํ•œ key ๊ฐ’์— ๋”ฐ๋ผ ๋ถ„๋ฐฐํ•œ๋‹ค.

Distkey : Diststyle ์ด key์ธ ๊ฒฝ์šฐ, ๋ ˆ์ฝ”๋“œ๊ฐ€ ์–ด๋–ค ์ปฌ๋Ÿผ์„ ๊ธฐ์ค€์œผ๋กœ ๋ฐฐํฌ๋˜๋Š” ์ง€ ๋‚˜ํƒ€๋‚ธ๋‹ค. key๋ฅผ ์ž˜๋ชป ์„ ํƒํ–ˆ์„ ๊ฒฝ์šฐ ๋ ˆ์ฝ”๋“œ ๋ถ„ํฌ์— Skew๊ฐ€ ๋ฐœ์ƒ, ์ฆ‰ ํŠน์ • ๋…ธ๋“œ์—๋งŒ ์ง‘์ค‘ํ•ด์„œ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ถ„๋ฐฐ๋˜๋Š” ๊ฒฝ์šฐ ๋ถ„์‚ฐ์ฒ˜๋ฆฌ์˜ ํšจ์œจ์„ฑ์ด ์‚ฌ๋ผ์ง€๋ฏ€๋กœ ์ฃผ์˜ํ•ด์•ผ ํ•œ๋‹ค.
BigQuery๋‚˜ Snowflake์˜ ๊ฒฝ์šฐ ์‹œ์Šคํ…œ์ด ์•Œ์•„์„œ ์„ ํƒํ•ด์ฃผ๋ฏ€๋กœ ์ด๋Ÿฐ ์†์„ฑ์„ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง€์ •ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค...

Sortkey : ๋ ˆ์ฝ”๋“œ๊ฐ€ ํ•œ ๋…ธ๋“œ ๋‚ด์—์„œ ์–ด๋–ค ์ปฌ๋Ÿผ์„ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌ๋˜๋Š” ์ง€ ๋‚˜ํƒ€๋‚ธ๋‹ค. ์ด๋Š” ๋ณดํ†ต ํƒ€์ž„์Šคํƒฌํ”„ ํ•„๋“œ๊ฐ€ ๋œ๋‹ค.

๋ ˆ์ฝ”๋“œ ๋ถ„๋ฐฐ์™€ ์ €์žฅ๋ฐฉ์‹ ์˜ˆ์‹œ

CREATE TABLE my_table (
 column1 INT,
 column2 VARCHAR(50),
 column3 TIMESTAMP,
 column4 DECIMAL(18,2)
) DISTSTYLE KEY DISTKEY(column1) SORTKEY(column3);

my_table ์˜ ๋ ˆ์ฝ”๋“œ๋“ค์€ column1 ์˜ ๊ฐ’์„ ๊ธฐ์ค€์œผ๋กœ ๋ถ„๋ฐฐ๋˜๊ณ , ๊ฐ™์€ ๋…ธ๋“œ์•ˆ์—์„œ๋Š” column3 ์˜ ๊ฐ’์„ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌ๋œ๋‹ค.

๋ฒŒํฌ ์—…๋ฐ์ดํŠธ ๋ฐฉ์‹

๋ฐ์ดํ„ฐ ํŒŒ์ดํ”„๋ผ์ธ ํ”„๋ ˆ์ž„์›Œํฌ์ธ Airflow๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”์ถœํ•˜์—ฌ S3์— ์—…๋กœ๋“œํ•˜๊ณ , ์—…๋กœ๋“œ๋œ ํŒŒ์ผ์„ ์ฝ์–ด Redshift๋กœ ํ•œ๋ฒˆ์— ๋ณต์‚ฌํ•˜๋Š” workflow๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

Redshift๊ฐ€ S3๋กœ๋ถ€ํ„ฐ ํŒŒ์ผ์„ ์ฝ์„ ๋•Œ๋Š” S3์— ๋Œ€ํ•œ ์ฝ๊ธฐ ๊ถŒํ•œ์ด ํ•„์š”ํ•˜๋‹ค. ๋”ฐ๋ผ์„œ S3 ์ฝ๊ธฐ๊ฐ€ ๊ฐ€๋Šฅํ•œ IAM Role์„ ์ƒ์„ฑํ•ด์ฃผ์–ด Redshift์— ์ ์šฉํ•˜๋Š” ์ ˆ์ฐจ๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

S3์— ์—…๋กœ๋“œํ•  ๋•Œ๋Š” ์ปฌ๋Ÿผ ๊ธฐ๋ฐ˜ ์ €์žฅํฌ๋งท์ธ parquet(ํŒŒ์ผ€์ด)๋ฅผ ์ฃผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค.
์ฐธ๊ณ 
https://www.databricks.com/kr/glossary/what-is-parquet


๐Ÿ“ ์ฃผ์š”๋ฉ”๋ชจ์‚ฌํ•ญ


๐Ÿ˜ต ๊ณต๋ถ€ํ•˜๋ฉด์„œ ์–ด๋ ค์› ๋˜ ๋‚ด์šฉ

profile
๊ฑฐ์นœ ๋Œ์ด ๋‹ค๋“ฌ์–ด์ ธ ์กฐ๊ฐ์ด ๋˜๋“ฏ

0๊ฐœ์˜ ๋Œ“๊ธ€