JUST DO IT!

Redshift๋ฅผ Superset์— ์—ฐ๋™ํ•˜๊ณ  ๋Œ€์‹œ๋ณด๋“œ ๋งŒ๋“ค๊ธฐ - TIL230526 ๋ณธ๋ฌธ

TIL

Redshift๋ฅผ Superset์— ์—ฐ๋™ํ•˜๊ณ  ๋Œ€์‹œ๋ณด๋“œ ๋งŒ๋“ค๊ธฐ - TIL230526

sunhokimDev 2023. 5. 26. 23:45

๐Ÿ“š KDT WEEK 8 DAY 5 TIL

  • ๋‹ค์–‘ํ•œ ์‹œ๊ฐํ™” ํˆด
  • Superset

 

๐ŸŸฅ ๋‹ค์–‘ํ•œ ์‹œ๊ฐํ™” ํˆด

= ๋Œ€์‹œ๋ณด๋“œ ํ˜น์€ BI(Business Intelligence)ํˆด

  • KPI(Key Performance Indicator), ์ง€ํ‘œ, ์ค‘์š”ํ•œ ๋ฐ์ดํ„ฐ ํฌ์ธํŠธ๋“ค์„ ๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ณ„์‚ฐ/๋ถ„์„/ํ‘œ์‹œํ•˜๋Š” ํˆด
  • ์†Œ์Šค๊ฐ€ ๋˜๋Š” ๋ฐ์ดํ„ฐ์˜ ํ’ˆ์งˆ์ด ์ค‘์š”ํ•˜๋‹ค.
  • ๋ฐ์ดํ„ฐ ๋ถ„์„์ด ์‰ฌ์›Œ์ง€๊ณ  ๋ฐ์ดํ„ฐ ๊ธฐ๋ฐ˜ ์˜์‚ฌ๊ฒฐ์ •์ด ๊ฐ€๋Šฅํ•ด์ง„๋‹ค.

 

์‹œ๊ฐํ™” ํˆด์˜ ์ข…๋ฅ˜

์‚ฌ๋žŒ๋“ค์ด ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” ํˆด : Excel, Google Spredsheet

์ „๋ฌธ์ ์ธ ํˆด : Looker(๊ตฌ๊ธ€), Tableau, Power BI, Apache Superset(์˜คํ”ˆ์†Œ์Šค), AWS Quicksight

 

  • Looker์™€ Tableau๊ฐ€ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ์ถ”์„ธ์ง€๋งŒ ๋ฐฐ์šฐ๋Š”๋ฐ ์‹œ๊ฐ„ ํ•„์š”
    • Tableau๊ฐ€ ๊ฐ€๊ฒฉ์ด ์‹ธ๊ณ  ๋” ํˆฌ๋ช…ํ•˜๋ฉฐ ๋ฌด๋ฃŒ๋ฒ„์ „๋„ ์žˆ์Œ
    • Looker๋Š” ์…€ํ”„์„œ๋น„์Šค ๋Œ€์‹œ๋ณด๋“œ๋ฅผ ๋งŒ๋“œ๋Š”๋ฐ ๋” ์ข‹์Œ

 

 

๋Œ€์‹œ๋ณด๋“œ ๋งŒ๋“ค์–ด๋ณด๊ธฐ

DB๋Š” Redshift์‚ฌ์šฉ

์ฑ„๋„๋ณ„ Monthly Active User ์ฐจํŠธ : ์ž…๋ ฅ ํ…Œ์ด๋ธ”(Dataset)์€ anlytics.user_session_summary

Monthly Cohort ์ฐจํŠธ 

> ์ฝ”ํ˜ธํŠธ(Cohort) ?

ํŠน์ • ์†์„ฑ์„ ๊ธฐ์ค€์œผ๋กœ ์‚ฌ์šฉ์ž ๊ทธ๋ฃน์„ ๋‚˜๋ˆ„๋Š” ๊ฒƒ ex) ์‚ฌ์šฉ์ž์˜ ์„œ๋น„์Šค ๋“ฑ๋ก์›”์ด ๊ฐ™์€ ์‚ฌ๋žŒ๋ผ๋ฆฌ ๋ฌถ๊ธฐ

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

MAU ์ž์ฒด ๋ฐ์ดํ„ฐ๋งŒ์œผ๋กœ๋Š” ์˜๋ฏธ๊ฐ€ ํฌ์ง€๋Š” ์•Š๊ณ , MAU ๊ธฐ๋ฐ˜์œผ๋กœ ์ฝ”ํ˜ธํŠธ ๋ถ„์„์„ ํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

 

๊ตฌ๊ธ€ ์Šคํ”„๋ ˆ๋“œ์‹œํŠธ์—์„œ ์‹œ๊ฐํ™”ํ•ด๋ณด๊ธฐ

 

Redshift์— ๊ฐ€์ง€๊ณ ์žˆ๋˜ ํ…Œ์ด๋ธ”์„ ์‚ฌ์šฉํ•˜์—ฌ MAU ํ…Œ์ด๋ธ”์„ ํ•˜๋‚˜ ๋งŒ๋“ค๊ณ , CSV ํŒŒ์ผ๋กœ ์ €์žฅํ•˜์˜€๋‹ค.

 

Colab์—์„œ CSVํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๋Š” ๋ชจ์Šต

 

๊ตฌ๊ธ€ ์‹œํŠธ๋กœ ๊ฐ€์ ธ์™€์„œ ์ฐจํŠธ๋ฅผ ์ƒ์„ฑํ•  ๋ฐ์ดํ„ฐ๋ฅผ ๋“œ๋ž˜๊ทธํ•˜๊ณ , ๋นจ๊ฐ„ ์› ๋ถ€๋ถ„์„ ํด๋ฆญํ•˜๋ฉด ์•„๋ž˜์ฒ˜๋Ÿผ ์ƒ์„ฑ๋œ๋‹ค.

 

๊ต‰์žฅํžˆ ๋น ๋ฅด๊ฒŒ ์ƒ์„ฑ๋œ๋‹ค.

 

Cohort ๋ฐ์ดํ„ฐ๋„ ํ”ผ๋ด‡ ์‹œ๊ฐํ™”๋ฅผ ํ•œ๋ฒˆ ํ•ด๋ณด์ž.

 

์•„๋ž˜๋Š” Cohort ํ…Œ์ด๋ธ”์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•œ SQL ์ฟผ๋ฆฌ๋ฌธ์ด๋‹ค.

CREATE TABLE analytics.cohort_summary as
 SELECT cohort_month, visited_month, cohort.userid
 FROM (
 SELECT userid, date_trunc('month', MIN(ts)) cohort_month
 FROM raw_data.user_session_channel usc
 JOIN raw_data.session_timestamp t ON t.sessionid = usc.sessionid
 GROUP BY 1
 ) cohort
 JOIN (
 SELECT DISTINCT userid, date_trunc('month', ts) visited_month
 FROM raw_data.user_session_channel usc
 JOIN raw_data.session_timestamp t ON t.sessionid = usc.sessionid
 ) visit ON cohort.cohort_month <= visit.visited_month and cohort.userid = visit.userid;

 

ํ…Œ์ด๋ธ”์—๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์ฒซ ๋ฐฉ๋ฌธํ•œ ๋‹ฌ(cohort_month) , ๋ฐฉ๋ฌธํ–ˆ๋˜ ๋‹ฌ(visited_month), ์‚ฌ์šฉ์ž ์•„์ด๋””(userid)๊ฐ€ ๊ธฐ๋ก๋œ๋‹ค.

 

์ด๊ฑธ ์•„๊นŒ์ฒ˜๋Ÿผ CSV ํŒŒ์ผ๋กœ ๋งŒ๋“ค๊ณ ..

Colab์—์„œ CSV ํŒŒ์ผ๋กœ ์ €์žฅํ•˜๋Š” ๋ชจ์Šต

 

๊ตฌ๊ธ€ ์‹œํŠธ์—์„œ ์—ด์–ด์„œ ํ”ผ๋ด‡ ํ…Œ์ด๋ธ”์„ ๋งŒ๋“ค์–ด๋ณด์ž

ํ”ผ๋ด‡ ํ…Œ์ด๋ธ”์€ ๋ฐ์ดํ„ฐ ์„ ํƒ(๋“œ๋ž˜๊ทธ) > ์‚ฝ์ž…(Insert) > ํ”ผ๋ด‡ ํ…Œ์ด๋ธ”(Pivot table)๋กœ ์„ ํƒํ•œ๋‹ค.

 

ํ”ผ๋ด‡ ํ…Œ์ด๋ธ”์„ ์ƒ์„ฑํ•˜๋Š” ๋ชจ์Šต

 

์œ„์—์„œ ๋งŒ๋“ค๊ธฐ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๊ณ  ๋‚˜๋ฉด ํ–‰, ์—ด, ๊ฐ’์„ ์–ด๋–ค ๊ฐ’์œผ๋กœ ๋„ฃ์„์ง€ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

 

ํ–‰, ์—ด, ๊ฐ’์„ ์„ค์ •ํ•ด์ฃผ๋ฉด ๋ฐ”๋กœ๋ฐ”๋กœ ์‹œ๊ฐํ™”๊ฐ€ ์™„์„ฑ๋œ๋‹ค.

 


 

๐ŸŸฆ Superset ์‚ฌ์šฉํ•˜๊ธฐ

 

Superset

 

 

  • ๋‹ค์–‘ํ•œ ํ˜•ํƒœ์˜ visualization๊ณผ ์†์‰ฌ์šด ์ธํ„ฐํŽ˜์ด์Šค ์ง€์› ๋ฐ ๊ณต์œ  ๊ฐ€๋Šฅ
  • ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ์ˆ˜์ค€์˜ ๋ณด์•ˆ๊ณผ ๊ถŒํ•œ ์ œ์–ด ๊ธฐ๋Šฅ ์ œ๊ณต
  • SQLAlchemy์™€ ์—ฐ๋™๋˜์–ด ์ด๋ฅผ ์ง€์›ํ•˜๋Š” ๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ง€์›
  • Druid.io์™€ ์—ฐ๋™ํ•˜์—ฌ ์‹ค์‹œ๊ฐ„ ์—ฐ๋™๋„ ๊ฐ€๋Šฅ
  • Flask + React JS๋กœ ๊ตฌ์„ฑ๋˜๋ฉฐ sqlite๋ฅผ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ DB๋กœ ์‚ฌ์šฉ

 

๊ฐ„๋‹จํ•œ ๊ตฌ์กฐ

 

  • Database : ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ex) Redshift
  • Dataset :  ํ…Œ์ด๋ธ”
  • Dashboard : ํ•˜๋‚˜ ์ด์ƒ์˜ chart๋กœ ๊ตฌ์„ฑ

 

Superset์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด?

 

  1.  Docker
  2.  Preset.io์—์„œ Starter ํ”Œ๋žœ ์ด์šฉํ•˜๊ธฐ

 

Docker๋ž€?

 

ํŠน์ • ํ”„๋กœ๊ทธ๋žจ๊ณผ ํ•„์š”ํ•œ ์†Œํ”„ํŠธ์›จ์–ด๋“ค์„ ํ•˜๋‚˜์˜ ํŒจํ‚ค์ง€๋กœ ๋งŒ๋“œ๋Š” ๊ฒƒ --> Docker Image

  • Image๋Š” ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค๊ณผ ๊ณต์œ  ๊ฐ€๋Šฅ
  • ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค๊ณผ ๊ณต์œ ํ•˜๋Š” ๊ณต์œ ์†Œ = Docker Registry(Docker Hub)
  • Docker Image๋ฅผ ์‹คํ–‰์‹œํ‚จ ๊ฒƒ = Docker Container (Docker Engine ํ•„์š”)

 

Preset.io์—์„œ ํ”Œ๋žœ์„ ์ด์šฉํ•˜๋Š” ๊ฒฝ์šฐ, ์•„๋ž˜์˜ ๋งํฌ์—์„œ ๊ฐ€์ž…ํ•˜๊ณ  ์ ˆ์ฐจ๋งŒ ๋”ฐ๋ผ๊ฐ€๋ฉด ์‰ฝ๋‹ค.

https://preset.io/

 

Modern BI Powered by Open Source Apache Superset™

Powerful, easy to use data exploration and visualization platform, powered by open-source Apache Superset™. Modern business intelligence for your entire organization.

preset.io

 

๋‚˜๋Š” Docker๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์˜คํ”ˆ์†Œ์Šค Superset์„ ์‚ฌ์šฉํ•ด๋ณด๊ธฐ๋กœ ํ–ˆ๋‹ค.

 

โžก๏ธDocker Desktop ์„ค์น˜ ๋ฐ ์„ค์ •

 

https://www.docker.com/products/docker-desktop/

 

Download Docker Desktop | Docker

Docker Desktop is available to download for free on Mac, Windows, or Linux operating systems. Get started with Docker today!

www.docker.com

 

์œˆ๋„์šฐ์˜ ๊ฒฝ์šฐ Docker Desktop์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ์•„๋ž˜์˜ ์ถ”๊ฐ€ ์„ค์ •์ด ํ•„์š”ํ•˜๋‹ค.

 

1. Hyper-V(๊ฐ€์ƒ๋””๋ฐ”์ด์Šค) ์„ค์ •ํ•˜๊ธฐ

 

์œˆ๋„์šฐ ํŒŒ์›Œ์…€์„ ๊ด€๋ฆฌ์ž ๊ถŒํ•œ์œผ๋กœ ์‹คํ–‰ ํ›„, ์•„๋ž˜์˜ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•˜๊ณ  ์žฌ๋ถ€ํŒ…ํ•˜๋ฉด ๋œ๋‹ค.

Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All

 

2. WSL2 ์„ค์น˜

 

์•„๋ž˜์˜ ๋ธ”๋กœ๊ทธ๋ฅผ ์ฐธ๊ณ ํ•˜์ž

https://goddaehee.tistory.com/313

 

[ Windows ] docker desktop ์„ค์น˜ํ•˜๊ธฐ (WSL2 Ubuntu ํ™œ์šฉ)

Windows ์šฉ Docker Desktop ์„ค์น˜ํ•˜๊ธฐ ์•ˆ๋…•ํ•˜์„ธ์š”. ๊ฐ“๋Œ€ํฌ ์ž…๋‹ˆ๋‹ค. ์ด๋ฒˆ ํฌ์ŠคํŒ…์€ [ Docker Desktop ์„ค์น˜ํ•˜๊ธฐ ] ์ž…๋‹ˆ๋‹ค. : ) 0. Docker Desktop ์ด๋ž€? - Docker Desktop์„ ํ†ตํ•ด Docker๋ฅผ ๊ฐ„ํŽธํ•˜๊ฒŒ ์„ค์ •ํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

goddaehee.tistory.com

 

โžก๏ธ Docker Desktop ์„ค์ •

Superset์„ Container์—์„œ ๊ตฌ๋™ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ตœ์†Œ 8GB(์œˆ๋„์šฐ์˜ ๊ฒฝ์šฐ)์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•ด์•ผ ํ•œ๋‹ค๊ณ  ํ•œ๋‹ค.

์ด๋Š” Docker Desktop ์„ค์ •์—์„œ ๋งฅ์˜ ๊ฒฝ์šฐ ๊ฐ„๋‹จํ•˜๊ฒŒ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ์œˆ๋„์šฐ์˜ ๊ฒฝ์šฐ๋Š” ์กฐ๊ธˆ ๋‹ค๋ฅด๋‹ค.

 

์กฐ๊ธˆ ์ฐพ์•„๋ณด๋‹ˆ, ๊ธฐ๋ณธ ์„ค์ •์œผ๋กœ ์œˆ๋„์šฐ ๋ฉ”๋ชจ๋ฆฌ์˜ 80%๊ฐ€ ์žกํ˜€์žˆ๋‹ค๊ณ  ํ•œ๋‹ค.

์„ค์ •์„ ๋ฐ”๊ฟ”์ฃผ๊ณ  ์‹ถ๋‹ค๋ฉด .wslconfig ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ์ˆ˜์ •ํ•ด์•ผํ•œ๋‹ค.

 

๋ฐฉ๋ฒ•์€ ์•„๋ž˜ ๋ธ”๋กœ๊ทธ๋ฅผ ์ฐธ๊ณ ํ•˜์ž.

https://kibua20.tistory.com/63

 

WSL 2.0 Global configuration (.wslconfig) ์„ ํ†ตํ•œ ์„ฑ๋Šฅ ํ–ฅ์ƒ

WSL 2.0 ์€ ์œˆ๋„์šฐ10์—์„œ ๋ฆฌ๋ˆ…์Šค ์ปค๋„์„ ์ง์ ‘ ์˜ฌ๋ฆฐ ๊ฒƒ์œผ๋กœ ์ตœ๊ทผ์— ๊พธ์ค€ํžˆ ๊ธฐ๋Šฅ์ด ์—…๋ฐ์ดํŠธ๋˜๊ณ  ์žˆ๋‹ค. ์ตœ๊ทผ MS Build 2020 ์ปจํผ๋Ÿฐ์Šค์—์„œ๋Š” CUDA์™€ Direct ML์˜ GPU ์ปดํ“จํŒ…์„ ์ง€์›ํ•ด์„œ WSL์—์„œ AI์™€ machine learnig

kibua20.tistory.com

 

์ฐธ๊ณ ๋กœ, ๋น„์ฃผ์–ผ ์ŠคํŠœ๋””์˜ค๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ํ„ฐ๋ฏธ๋„์—์„œ code .wslconfig ๋ฅผ ํ†ตํ•ด ํŽธํ•˜๊ฒŒ ์ˆ˜์ • ๊ฐ€๋Šฅํ•˜๋‹ค. (๊ฒฝ๋กœ๋Š” ์œ„ ๋ธ”๋กœ๊ทธ์ฐธ๊ณ )

 

โžก๏ธ Superset ์˜คํ”ˆ์†Œ์Šค ๊ฐ€์ ธ์˜ค๊ธฐ

ํ„ฐ๋ฏธ๋„์—์„œ ํด๋” ํ•˜๋‚˜๋ฅผ ๋งŒ๋“ค๊ณ , ๊ทธ ์•ˆ์— git clone์„ ํ•ด๋ณด์ž.

 

git clone https://github.com/apache/superset.git

 

git clone์ด ์™„๋ฃŒ๋˜๋ฉด ์ƒ์„ฑ๋œ superset ํด๋”์— ๋“ค์–ด๊ฐ€์„œ ๋‹ค์Œ์˜ ๋ช…๋ น์–ด๋ฅผ ์ˆœ์„œ๋Œ€๋กœ ์‹คํ–‰ํ•œ๋‹ค.

๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์ „์—, Docker Desktop์ด ์‹คํ–‰๋˜์–ด ์žˆ์–ด์•ผ ํ•œ๋‹ค.

 

 docker-compose -f docker-compose-non-dev.yml pull
 docker-compose -f docker-compose-non-dev.yml up -- ์‹คํ–‰

 

์ด ๊ณผ์ •์€ ์‹œ๊ฐ„์ด ์กฐ๊ธˆ ๊ฑธ๋ฆฐ๋‹ค.

 

๊ณผ์ •์ด ์™„๋ฃŒ๋˜๋ฉด Docker Desktop์ด ์•„๋ž˜์ฒ˜๋Ÿผ ๋‚˜ํƒ€๋‚œ๋‹ค.

 

superset์ด ์ž˜ ์ปจํ…Œ์ด๋„ˆ์— ๋“ค์–ด๊ฐ„ ๋ชจ์Šต์ด๋‹ค.

 

superset_app์˜ Port(s) ํ•ญ๋ชฉ์— ๋ณด์ด๋Š” ๋กœ์ปฌ ํ˜ธ์ŠคํŠธ ์„œ๋ฒ„ (8088:8088)์— ์ ‘์†ํ•˜๋ฉด..

 

๋กœ๊ทธ์ธ ํ™”๋ฉด์ด ๋ณด์ธ๋‹ค.

 

admin/admin ์œผ๋กœ ๋กœ๊ทธ์ธํ•ด๋ณด์ž.

 

Superset์ด ์ œ๊ณตํ•˜๋Š” UI๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์ •์ƒ์ ์œผ๋กœ ํ™”๋ฉด์ด ๋‚˜ํƒ€๋‚˜๋ฉด ์„ฑ๊ณต!

 

 

โžก๏ธRedshift Database ์—ฐ๊ฒฐํ•˜๊ธฐ

 

Preset.io๋ฅผ ์‚ฌ์šฉํ–ˆ๋“ , Docker๋ฅผ ์‚ฌ์šฉํ–ˆ๋“  ๊ฑฐ์˜ ๋น„์Šทํ•œ ๊ตฌ์„ฑ์˜ UI๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค.

 

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์—ฐ๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์˜ค๋ฅธ์ชฝ ์ƒ๋‹จ์˜ Settings ์˜ต์…˜์—์„œ Database Connections๋ฅผ ํด๋ฆญํ•˜์ž.

 

 

ํ•˜์ด๋ผ์ดํŠธ๋œ ๋ถ€๋ถ„์„ ๋ˆ„๋ฅด๋ฉด ๋œ๋‹ค.

 

๋‹ค์Œ ํ™”๋ฉด์˜ ์˜ค๋ฅธ์ชฝ ์ƒ๋‹จ์—์„œ +DATABASE ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์ถ”๊ฐ€ํ•˜์ž. 

 

Docker๋กœ ์ ‘์†ํ•œ ๊ฒฝ์šฐ ์•„๋ž˜์˜ ํ™”๋ฉด์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

 

Docker์˜ ๊ฒฝ์šฐ

 

Preset.io์˜ ๊ฒฝ์šฐ๋„ ๋น„์Šทํ•˜๊ฒŒ ๋‚˜์˜ค์ง€๋งŒ, ์ข€ ๋” ์ž์„ธํ•˜๊ฒŒ ๋‚˜์˜จ๋‹ค.

Redshift๋ฅผ ์—ฐ๊ฒฐํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด Preset.io๋Š” ํ•˜๋‹จ์— SUPPORTED DATABASES ์˜ต์…˜์—์„œ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค.

๋‚˜์ฒ˜๋Ÿผ Docker์˜ ๊ฒฝ์šฐ Redshift๊ฐ€ ์ง€์›ํ•˜๋Š” PostgreSQL์„ ์„ ํƒํ•˜๋ฉด ๋œ๋‹ค.

 

๋‹ค์Œ์œผ๋กœ ์•„๋ž˜์˜ ์ฐฝ์— ์ •๋ณด๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ๋œ๋‹ค.

  • Host : Redshift Workgroup์˜ ์—”๋“œํฌ์ธํŠธ
  • Port : Redshift ํฌํŠธ์ธ 5439
  • Database : Redshift ๋„ค์ž„์ŠคํŽ˜์ด์Šค์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ด๋ฆ„
  • Username / Password : ์ ‘์†ํ•  ์‚ฌ์šฉ์ž์˜ ์ •๋ณด (Redshift DB๊ณ„์ •)

 

์ตœํ•˜๋‹จ์˜ SQLAlchemy URL์„ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

 

์„ฑ๊ณต์ ์œผ๋กœ ์—ฐ๊ฒฐ์ด ๋œ๋‹ค๋ฉด DB๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ๋“ฑ๋ก๋œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

โžก๏ธ์—ฐ๊ฒฐํ•œ DB๋กœ Dataset(์ฐจํŠธ) ๋งŒ๋“ค๊ธฐ

 

์ƒ๋‹จ ํƒญ์—์„œ Datasets์„ ๋ˆ„๋ฅด๊ณ , ์˜ค๋ฅธ์ชฝ ์ƒ๋‹จ์˜ +DATASET ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ ์ƒ์„ฑํ•ด๋ณด์ž. 

 

Datasets์„ ๋ˆŒ๋ €์„ ๋•Œ ๋ณด์ด๋Š” ํ™”๋ฉด

 

์ƒ์„ฑ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ์•„๋ž˜์˜ ์ด๋ฏธ์ง€๊ฐ€ ๋‚˜ํƒ€๋‚œ๋‹ค.

์•„๊นŒ ์—ฐ๊ฒฐํ–ˆ๋˜ DATABASE๋ฅผ ์„ ํƒํ•˜๋ฉด ์ €์žฅ๋œ ์Šคํ‚ค๋งˆ๋“ค์ด ๋‚˜ํƒ€๋‚œ๋‹ค.

์ฐจํŠธ๋ฅผ ์ƒ์„ฑํ•  ์Šคํ‚ค๋งˆ์™€ ํ…Œ์ด๋ธ”์„ ์„ ํƒํ•˜๊ณ , ์˜ค๋ฅธ์ชฝ ํ•˜๋‹จ์˜ CREATE DATASET AND CREATE CHART ๋ฅผ ๋ˆ„๋ฅด์ž. 

 

Dataset์„ ์ƒ์„ฑํ•˜๋Š” ๋ชจ์Šต

 

๋‹ค์Œ ํ™”๋ฉด์œผ๋กœ ๋„˜์–ด๊ฐ€๋ฉด ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๋‹ค์–‘ํ•œ ์ข…๋ฅ˜์˜ ์ฐจํŠธ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

์›ํ•˜๋Š” ํ˜•ํƒœ์˜ ์ฐจํŠธ๋ฅผ ์„ ํƒํ•˜๊ณ  ํ•˜๋‹จ์˜ CREATE NEW CHART๋ฅผ ๋ˆŒ๋Ÿฌ ์ƒ์„ฑํ•ด๋ณด์ž. 

 

๋‚˜๋Š” Line Chart๋ฅผ ๊ณจ๋ž๋‹ค.

 

์ฐจํŠธ๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด X์ถ•๊ณผ Y์ถ•์„ ์„ค์ •ํ•˜๋Š” ํ™”๋ฉด์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

๋‚˜๋Š” MAU, ์›”๋ณ„ ์‹ค์ œ ์‚ฌ์šฉ์ž๋ฅผ ์‹œ๊ฐํ™”ํ•˜๊ธฐ ์œ„ํ•œ Line Chart๋ฅผ ๊ทธ๋ฆฌ๋ ค๊ณ  ํ•œ๋‹ค. 

 

Line Chart๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ชจ์Šต 1

 

X-AXIS๋ฅผ ๋ˆŒ๋Ÿฌ X์ถ•์˜ ์›ํ•˜๋Š” ํ•„๋“œ ๊ฐ’์„ ์ง€์ •ํ•ด๋ณด์ž.

ํƒ€์ž„์Šคํƒฌํ”„๋ฅผ ๊ฐ€์ง„ ํ•„๋“œ๋ฅผ ์ •ํ–ˆ๋”๋‹ˆ TIME GRAIN ์˜ต์…˜์„ ํ†ตํ•ด ์—ฐ, ์›”, ์ผ ๋“ฑ์„ ์ •ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

์›”๋ณ„ ์‚ฌ์šฉ์ž๋ฅผ ๊ทธ๋ฆด ๊ฒƒ์ด๋‹ˆ Month๋ฅผ ์„ ํƒํ–ˆ๋‹ค.

 

METRICS ์˜ต์…˜์œผ๋กœ Y์ถ•์— ํ•ด๋‹นํ•˜๋Š” ๊ฐ’์„ ์ง€์ •ํ•ด๋ณด์ž.

๋ณดํ†ต ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋Š”๋ฐ, ๊ธฐ๋ณธ์ ์œผ๋กœ f(x) COUNT(*) ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

ํ•˜์ง€๋งŒ ์ด ํ…Œ์ด๋ธ”์—๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์ ‘์†ํ•œ ๋ชจ๋“  ๊ธฐ๋ก์ด ๋‚จ๊ฒจ ์žˆ๊ณ , ๋‚˜๋Š” ์œ ๋‹ˆํฌํ•œ ์‚ฌ์šฉ์ž๋“ค๋กœ๋งŒ ๊ตฌ์„ฑํ•˜๊ณ  ์‹ถ๊ธฐ ๋•Œ๋ฌธ์— ํ•จ์ˆ˜์˜ ์ˆ˜์ •์ด ํ•„์š”ํ–ˆ๋‹ค.

 

ํ•จ์ˆ˜์˜ ์ˆ˜์ •์€ ์•„๋ž˜ ์ด๋ฏธ์ง€์ฒ˜๋Ÿผ CUSTOM SQL ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

 

์œ ๋‹ˆํฌํ•œ ์‚ฌ์šฉ์ž๋ฅผ ์›ํ•˜๋ฏ€๋กœ, DISTINCT๋ฅผ ์‚ฌ์šฉํ–ˆ๋‹ค.

 

๊ทธ๋ฆฌ๊ณ  CREATE CHART ๋ฒ„ํŠผ์„ ๋ˆŒ๋ €๋”๋‹ˆ ์ฐจํŠธ๊ฐ€ ์ž˜ ์ƒ์„ฑ๋œ ๊ฑธ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค!

 

MAU Chart๊ฐ€ ๊ทธ๋ ค์กŒ๋‹ค!

 

์ถ”๊ฐ€๋กœ DIMENSTIONS ์˜ต์…˜์— ํŠน์ • ํ•„๋“œ ๋ณ„๋กœ ๋ผ์ธ์„ ๋” ๊ทธ๋ฆด ์ˆ˜ ์žˆ๊ฒŒ ์„ค์ • ๊ฐ€๋Šฅํ•˜๋‹ค.

๋‚˜๋Š” ์ฑ„๋„๋ณ„๋กœ ๋ผ์ธ์„ ์ถ”๊ฐ€๋กœ ๋” ๊ตฌ์„ฑํ•ด๋ณด์•˜๋‹ค.

 

์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ผ์ธ์ด ์ƒ์„ฑ๋˜์—ˆ๋‹ค.

 

 

โžก๏ธ Superset์œผ๋กœ Cohort Pivot Table ์ƒ์„ฑํ•˜๊ธฐ

 

์ด๋ฒˆ์—๋Š” ์ด์ „์— ์ƒ์„ฑํ•œ Cohort ํ…Œ์ด๋ธ”์„ ์‚ฌ์šฉํ•˜์—ฌ, Pivot Table๋ฅผ ์ƒ์„ฑํ•ด๋ณด์ž.

๋‚ด๊ฐ€ ์ƒ์„ฑํ–ˆ๋˜ cohort_summary ํ…Œ์ด๋ธ”์•ˆ์—๋Š” Monthly Active User๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์‚ฌ์šฉ์ž์˜ ์›”๋ณ„ ์ž”์กด์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๊ณ  ์žˆ๋‹ค.

 

 

์œ„์—์„œ ์„ค๋ช…ํ–ˆ๋˜ ๋ฐฉ๋ฒ•์œผ๋กœ Dataset์„ ์ƒˆ๋กœ ์ƒ์„ฑํ•œ๋‹ค.

 

pivot์„ ๊ฒ€์ƒ‰ํ•˜์—ฌ ์‰ฝ๊ฒŒ Pivot Table์„ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค.

 

pivot์„ ๊ฒ€์ƒ‰ํ•˜์—ฌ Pivot Table์„ ์„ ํƒํ•˜๊ณ  ์ฐจํŠธ๋ฅผ ์ƒ์„ฑํ•˜์ž.

 

cohort_month : ์‚ฌ์šฉ์ž๊ฐ€ ์ฒ˜์Œ ๋ฐฉ๋ฌธํ–ˆ๋˜ ๋‚ ์งœ(์›”)

visited_month : ์‚ฌ์šฉ์ž๊ฐ€ ๋ฐฉ๋ฌธํ–ˆ๋˜ ๋‚ ์งœ(์›”)

 

์•„๋ž˜ ์ด๋ฏธ์ง€์—๋Š” ์ž˜๋ ธ์ง€๋งŒ ์ด๋ ‡๊ฒŒ ์„ค์ •ํ•ด์ฃผ์—ˆ๋‹ค.

 

  • Column : visited_month
  • Rows : cohort_month
  • TIME GRAIN : month
  • METRICS : COUNT(*)

 

์‚ฌ์šฉ์ž๊ฐ€ ์ฒ˜์Œ ๋ฐฉ๋ฌธํ–ˆ๋˜ ๋‹ฌ์„ ๊ธฐ์ค€์œผ๋กœ ๋‹ค์Œ ๋‹ฌ์—๋„ ์ ‘์†ํ–ˆ๋Š”์ง€ ์‰ฝ๊ฒŒ ์•Œ ์ˆ˜ ์žˆ๋Š” ์ฐจํŠธ๊ฐ€ ์™„์„ฑ๋˜์—ˆ๋‹ค.

 

์™„์„ฑ๋œ Pivot Table์˜ ๋ชจ์Šต

 

์ด๋ฒˆ์—๋Š” Column์„ cohort_month๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ช‡ ๊ฐœ์›”์ด๋‚˜ ์ฐจ์ด๋‚˜๋Š”์ง€ ์‰ฝ๊ฒŒ ์•Œ์•„๋ณผ ์ˆ˜ ์žˆ๋„๋ก ๋ฐ”๊ฟ”๋ณด๊ฒ ๋‹ค.

CUSTOM SQL์— DATEDIFF(์‰ฝ๊ฒŒ ์‹œ๊ฐ„๊ณผ ์‹œ๊ฐ„์„ ๋บ„ ์ˆ˜ ์žˆ๋Š” ํ•จ์ˆ˜)๋ฅผ ์ด์šฉํ•  ๊ฒƒ์ด๋‹ค.

 

DATEDIFF(๊ตฌ๋ถ„์ž, Start-Date, End-Date) ํ˜•์‹์„ ์‚ฌ์šฉํ•œ๋‹ค.

 

Column์„ ์ˆ˜์ •ํ•˜๋Š” ๊ฒฝ์šฐ, ์ˆ˜์ •ํ•˜๋˜ ์ฐฝ ์œ„์ชฝ์— ์ด๋ฆ„์„ ๋ฐ”๊ฟ€ ์ˆ˜๊ฐ€ ์žˆ๋‹ค.

์ด ๋ถ€๋ถ„์„ ์ˆ˜์ •ํ•ด์ฃผ์ง€ ์•Š๊ณ  ์ˆ˜์ •ํ•˜๊ธฐ ์ „์˜ ์ด๋ฆ„์„ ๊ณ„์† ์‚ฌ์šฉํ•˜๋ฉด, ์ฐจํŠธ๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ์ถœ๋ ฅ๋˜์ง€ ์•Š๋Š”๋‹ค.

์ด๋ฆ„์„ ๊ผญ ๋ฐ”๊ฟ”์ฃผ์ž. ๋‚˜๋Š” My column์ด๋ผ๊ณ  ๋งŒ๋“ค์—ˆ๋‹ค.

 

์•„๋ž˜ ์ด๋ฏธ์ง€๋ฅผ ๋ณด๋ฉด, Column์ด ์ •์ƒ์ ์œผ๋กœ ์ˆ˜์ •๋œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์ƒˆ๋กœ์šด Pivot Table์ด ์ž˜ ์ƒ์„ฑ๋˜์—ˆ๋‹ค.

 


 

๐ŸŸฉ Superset ๋Œ€์‹œ๋ณด๋“œ ๋งŒ๋“ค๊ณ  ํŽธ์ง‘ํ•˜๊ธฐ

 

๋งŒ๋“ค์—ˆ๋˜ ์ฐจํŠธ๋ฅผ ์ €์žฅ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ ์ €์žฅํ–ˆ๋‹ค๋ฉด, Superset ์œ„์ชฝ ํƒญ Charts์— ๋‹ด๊ฒจ์žˆ์„ ๊ฒƒ์ด๋‹ค.

๋‚ด๊ฐ€ ๋งŒ๋“ค์—ˆ๋˜ ์ฐจํŠธ๋ฅผ ์ฐพ์•„ ๋ถˆ๋Ÿฌ์˜ค๋ฉด ํ–‰๊ณผ ์—ด์„ ์ˆ˜์ •ํ•˜๋˜ ํ™”๋ฉด์œผ๋กœ ๋Œ์•„์˜ฌ ์ˆ˜ ์žˆ๋‹ค.

 

๋‚˜๋Š” OWNER๋ฅผ Superset Admin ํ•„ํ„ฐ๋กœ ํ•ด์„œ ๋ฐ”๋กœ ์ฐพ์•˜๋‹ค.

 

๋Œ€์‹œ๋ณด๋“œ์— ๋„ฃ์„ ์ฐจํŠธ์˜ ์ด๋ฆ„์„ ํด๋ฆญํ•˜์—ฌ ๋“ค์–ด๊ฐ€์„œ, ์˜ค๋ฅธ์ชฝ ์ƒ๋‹จ์˜ SAVE ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด์ž.

 

๋Œ€์‹œ๋ณด๋“œ์— ๋„ฃ๊ธฐ ์œ„ํ•ด ADD TO DASHBOARD์— ๋‚ด๊ฐ€ ์›ํ•˜๋Š” ์ด๋ฆ„์œผ๋กœ ๋„ฃ๊ณ ,

SAVE & GO TO DASHBOARD ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ ๋Œ€์‹œ๋ณด๋“œ์— ์ €์žฅํ•œ๋‹ค.

 

Save ๋ฒ„ํŠผ์„ ๋ˆŒ๋ €์„ ๋•Œ ํ™”๋ฉด

 

๋‚˜๋Š” ๋งŒ๋“ค์—ˆ๋˜ ๋‘ ๊ฐœ์˜ ์ฐจํŠธ๋ฅผ KPI Dashboard๋ผ๋Š” ๋Œ€์‹œ๋ณด๋“œ์— ๋„ฃ์—ˆ๋‹ค.

์˜ค๋ฅธ์ชฝ ์ƒ๋‹จ์˜ EDIT DASHBOARD ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ ํฌ๊ธฐ ์กฐ์ ˆ๊ณผ ์œ„์น˜๋ฅผ ์กฐ์ ˆํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๋‘ ๊ฐœ์˜ ์ฐจํŠธ๊ฐ€ ๋Œ€์‹œ๋ณด๋“œ์— ๋“ค์–ด์˜จ ๋ชจ์Šต

 

์ฐจํŠธ๋ฅผ ๋“œ๋ž˜๊ทธํ•˜์—ฌ ํฌ๊ธฐ ๋ฐ ์œ„์น˜ ์กฐ์ ˆ์„ ์ž์œ ๋กญ๊ฒŒ ํ•  ์ˆ˜ ์žˆ๊ณ ,

์˜ค๋ฅธ์ชฝ ํƒญ์˜ LAYOUT ELEMENTS๋ฅผ ํ†ตํ•ด ํ…์ŠคํŠธ๋‚˜ ๊ตฌ๋ถ„์ž(Divider)๋ฅผ ๋„ฃ์„ ์ˆ˜๋„ ์žˆ๋‹ค

 

LAYOUT ELEMENTS๋ฅผ ์„ ํƒํ•˜๋‹ˆ ์—ฌ๋Ÿฌ ์˜ต์…˜์ด ์žˆ๋‹ค.

 

๋Œ€์‹œ๋ณด๋“œ๊ฐ€ ์™„์„ฑ๋˜์—ˆ๋‹ค!