๐Ÿ“’ ETL

Kimdongkiยท2024๋…„ 5์›” 20์ผ

DB

๋ชฉ๋ก ๋ณด๊ธฐ
20/33

๐Ÿ“Œ ETL(Data pipeline)

  • ETL : Extract, Transform, Load
  • Data Pipeline, ETL, Data Workflow, DAG
    • ETL
    • Called DAG(Directed Acyclic Graph) in Airflow

๐Ÿ“• ETL vs. ELT

  • ETL : ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ์ดํ„ฐ ์›จ์–ดํ•˜์šฐ์Šค ์™ธ๋ถ€์—์„œ ๋‚ด๋ถ€๋กœ ๊ฐ€์ ธ์˜ค๋Š” ํ”„๋กœ์„ธ์Šค
    • ๋ณดํ†ต ๋ฐ์ดํ„ฐ ์—”์ง€๋‹ˆ์–ด๋“ค์ด ์ˆ˜ํ–‰ํ•จ
  • ELT : ๋ฐ์ดํ„ฐ ์›จ์–ดํ•˜์šฐ์Šค ๋‚ด๋ถ€ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐ์ž‘ํ•ด์„œ(๋ณดํ†ต์€ ์ข€ ๋” ์ถ”์ƒํ™”๋˜๊ณ  ์š”์•ฝ๋œ) ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ๋ฅผ ๋งŒ๋“œ๋Š” ํ”„๋กœ์„ธ์Šค
    • ๋ณดํ†ต ๋ฐ์ดํ„ฐ ๋ถ„์„๊ฐ€๋“ค์ด ๋งŽ์ด ์ˆ˜ํ–‰ํ•จ
    • ๋ฐ์ดํ„ฐ ๋ ˆ์ดํฌ ์ด์—์„œ ์ด๋Ÿฌํ•œ ์ž‘์—…๋“ค์ด ๋ฒŒ์–ด์ง€๊ธฐ๋„ ํ•œ๋‹ค.
    • ์ด๋Ÿฐ ํ”„๋กœ์„ธ์Šค ์ „์šฉ ๊ธฐ์ˆ ๋“ค์ด ์žˆ์œผ๋ฉฐ DBT๊ฐ€ ๊ฐ€์žฅ ์œ ๋ช…ํ•˜๋‹ค. : Analytics Engineering
      • DBT : Data Build Tool

๐Ÿ“• Data Lake vs. Data Warehouse

  • Data Lake
    • ๊ตฌ์กฐํ™” ๋ฐ์ดํ„ฐ + ๋น„๊ตฌ์กฐํ™” ๋ฐ์ดํ„ฐ
    • ๋ณด์กด ๊ธฐํ•œ์ด ์—†๋Š” ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ์›๋ž˜ ํ˜•ํƒœ๋Œ€๋กœ ๋ณด์กดํ•˜๋Š” ์Šคํ† ๋ฆฌ์ง€์— ๊ฐ€๊น๋‹ค.
    • ๋ณดํ†ต์€ ๋ฐ์ดํ„ฐ ์›จ์–ดํ•˜์šฐ์Šค๋ณด๋‹ค ๋ช‡๋ฐฐ๋Š” ๋” ํฐ ์Šคํ† ๋ฆฌ์ง€
  • Data Warehouse
    • ๋ณด์กด ๊ธฐํ•œ์ด ์žˆ๋Š” ๊ตฌ์กฐํ™”๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ์ฒ˜๋ฆฌํ•˜๋Š” ์Šคํ† ๋ฆฌ์ง€
    • ๋ณดํ†ต BIํˆด๋“ค(๋ฃฉ์ปค, ํƒœ๋ธ”๋กœ, ์ˆ˜ํผ์…‹...)์€ ๋ฐ์ดํ„ฐ ์›จ์–ดํ•˜์šฐ์Šค๋ฅผ ๋ฐฑ์—”๋“œ๋กœ ์‚ฌ์šฉํ•œ๋‹ค.

๐Ÿ“• Data Pipeline์˜ ์ •์˜

  • ๋ฐ์ดํ„ฐ๋ฅผ ์†Œ์Šค๋กœ๋ถ€ํ„ฐ ๋ชฉ์ ์ง€๋กœ ๋ณต์‚ฌํ•˜๋Š” ์ž‘์—…
    • ์ด ์ž‘์—…์€ ๋ณดํ†ต ์ฝ”๋”ฉ(Python or Scalar) ํ˜น์€ SQL์„ ํ†ตํ•ด ์ด๋ฃจ์–ด์ง„๋‹ค.
    • ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ๋ชฉ์ ์ง€๋Š” Data Warehouse๊ฐ€ ๋œ๋‹ค.
  • ๋ฐ์ดํ„ฐ ์†Œ์Šค์˜ ์˜ˆ
    • Click stream, call data, ads performance data, transactions, sensor data...
    • More concrete examples : production datavases, log files, API, stream data(Kafka topic)
  • ๋ฐ์ดํ„ฐ ๋ชฉ์ ์ง€์˜ ์˜ˆ
    • Data Warehouse, cache System, Production Database, NoSQL, S3,...

๐Ÿ“Œ Data Pipline

๐Ÿ“• Raw Data ETL Jobs

  1. ์™ธ๋ถ€์™€ ๋‚ด๋ถ€ ๋ฐ์ดํ„ฐ ์†Œ์Šค์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ธฐ(๋งŽ์€ ๊ฒฝ์šฐ API๋ฅผ ํ†ตํ•˜๊ฒŒ ๋œ๋‹ค.)
  2. ์ ๋‹นํ•œ ๋ฐ์ดํ„ฐ ํฌ๋งท ๋ณ€ํ™˜(๋ฐ์ดํ„ฐ์˜ ํฌ๊ธฐ๊ฐ€ ์ปค์ง€๋ฉด Spark๋“ฑ์ด ํ•„์š”ํ•ด์ง„๋‹ค.)
  3. Load to Data Warehouse

-> ์ด ์ž‘์—…์€ ๋ณดํ†ต ๋ฐ์ดํ„ฐ ์—”์ง€๋‹ˆ์–ด๊ฐ€ ํ–‰ํ•œ๋‹ค.

๐Ÿ“• Summary/Report Jobs

  1. DW(ํ˜น์€ DL)๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด ๋‹ค์‹œ DW์— ์“ฐ๋Š” ETL
  2. Raw Data๋ฅผ ์ฝ์–ด์„œ ์ผ์ข…์˜ Report ํ˜•ํƒœ๋‚˜ Summaryํ˜•ํƒœ์˜ ํ…Œ์ด๋ธ”์„ ๋‹ค์‹œ ๋งŒ๋“œ๋Š” ์šฉ๋„
  3. ํŠน์ˆ˜ํ•œ ํ˜•ํƒœ๋กœ๋Š” ABํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ๋ฅผ ๋ถ„์„ํ•˜๋Š” ๋ฐ์ดํ„ฐ ํŒŒ์ดํ”„๋ผ์ธ๋„ ์กด์žฌํ•œ๋‹ค.

์š”์•ฝ ํ…Œ์ด๋ธ”์˜ ๊ฒฝ์šฐ SQL(CTAS๋ฅผ ํ†ตํ•ด)๋งŒ์œผ๋กœ ๋งŒ๋“ค๊ณ  ์ด๋Š” ๋ฐ์ดํ„ฐ ๋ถ„์„๊ฐ€๊ฐ€ ํ•˜๋Š”๊ฒƒ์ด ๋งž๋‹ค.
๋ฐ์ดํ„ฐ ์—”์ง€๋‹ˆ์–ด ๊ด€์ ์—์„œ๋Š” ์–ด๋–ป๊ฒŒ ๋ฐ์ดํ„ฐ ๋ถ„์„๊ฐ€๋“ค์ด ํŽธํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋Š” ํ™˜๊ฒฝ์„ ๋งŒ๋“ค์–ด ์ฃผ๋Š”๋ƒ๊ฐ€ ๊ด€๊ฑด์ด๋‹ค.
-> Analytics Enginner(DBT)

๐Ÿ“• Production Data Jobs

  1. DW๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด ๋‹ค๋ฅธ Storage(๋งŽ์€ ๊ฒฝ์šฐ ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ)๋กœ ์“ฐ๋Š” ETL
  • Summary ์ •๋ณด๊ฐ€ ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์—์„œ ์„ฑ๋Šฅ ์ด์œ ๋กœ ํ•„์š”ํ•œ ๊ฒฝ์šฐ
  • ํ˜น์€ ML Model์—์„œ ํ•„์š”ํ•œ feature๋“ค์„ ๋ฏธ๋ฆฌ ๊ณ„์‚ฐํ•ด๋‘๋Š” ๊ฒฝ์šฐ
  1. ์ด ๊ฒฝ์šฐ ํ”ํ•œ ํƒ€๊ฒŸ ์Šคํ† ๋ฆฌ์ง€
  • Cassandra/HBase/DynamoDB์™€ ๊ฐ™์€ NoSQL
  • MySQL๊ณผ ๊ฐ™์€ ๊ด€๊ณ„ํ˜• DB(OLTP)
  • Redis/Memcache์™€ ๊ฐ™์€ cache
  • ElasticSearch์™€ ๊ฐ™์€ ๊ฒ€์ƒ‰์—”์ง„

๐Ÿ“Œ Data Pipline์„ ๋งŒ๋“ค ๋•Œ ๊ณ ๋ คํ•  ์ 

๐Ÿ“• Best Practices (1)

  • ๊ฐ€๋Šฅํ•˜๋ฉด ๋ฐ์ดํ„ฐ๊ฐ€ ์ž‘์„ ๊ฒฝ์šฐ ๋งค๋ฒˆ ๋ชจ๋‘ ๋ณต์‚ฌํ•ด์„œ ํ…Œ์ด๋ธ”์„ ๋งŒ๋“ค๊ธฐ(Full Refresh)
  • Incremental update๋งŒ์ด ๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด, ๋Œ€์ƒ ๋ฐ์ดํ„ฐ์†Œ์Šค๊ฐ€ ๊ฐ–์ถ”์–ด์•ผํ•  ๋ช‡๊ฐ€์ง€ ์กฐ๊ฑด์ด ์žˆ๋‹ค.
    • ๋ฐ์ดํ„ฐ ์†Œ์Šค๊ฐ€ Production DB Table์ด๋ผ๋ฉด ๋‹ค์Œ ํ•„๋“œ๊ฐ€ ํ•„์š”ํ•˜๋‹ค.
      • Created(๋ฐ์ดํ„ฐ ์—…๋ฐ์ดํŠธ ๊ด€์ ์—์„œ ํ•„์š”ํ•˜์ง€๋Š” ์•Š๋‹ค.)
      • Modeified
      • Deleted
        -> ๋ฐ์ดํ„ฐ ์†Œ์Šค๊ฐ€ API๋ผ๋ฉด ํŠน์ • ๋‚ ์งœ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ƒˆ๋กœ ์ƒ์„ฑ๋˜๊ฑฐ๋‚˜ ์—…๋ฐ์ดํŠธ๋œ ๋ ˆ์ฝ”๋“œ๋“ค์„ ์ฝ์–ด์˜ฌ ์ˆ˜ ์žˆ์–ด์•ผํ•œ๋‹ค.

๐Ÿ“• Best Practices (2)

  • Idempotency(๋ฉฑ๋“ฑ์„ฑ)์„ ๋ณด์žฅํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค.
    • ๋™์ผํ•œ ์ž…๋ ฅ ๋ฐ์ดํ„ฐ๋กœ ๋ฐ์ดํ„ฐ ํŒŒ์ดํ”„๋ผ์ธ์„ ๋‹ค์ˆ˜ ์‹คํ–‰ํ•ด๋„ ์ตœ์ข… ํ…Œ์ด๋ธ”์˜ ๋‚ด์šฉ์ด ๋‹ฌ๋ผ์ง€์ง€ ์•Š์•„์•ผ ํ•œ๋‹ค.
      -> ์ค‘๋ณต ๋ฐ์ดํ„ฐ๊ฐ€ ์ƒ๊ธฐ์ง€ ์•Š์•„์•ผํ•จ
    • ์ค‘์š”ํ•œ ํฌ์ธํŠธ๋Š” Critical Point๋“ค์ด ๋ชจ๋‘ One Atomic Action์œผ๋กœ ์‹คํ–‰์ด ๋˜์–ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.
    • SQL์˜ Transaction์ด ๊ผญ ํ•„์š”ํ•œ ๊ธฐ์ˆ ์ด๋‹ค.

๐Ÿ“• Best Practices (3)

  • ๋ฐ์ดํ„ฐ ํŒŒ์ดํ”„๋ผ์ธ์˜ ์ž…๋ ฅ๊ณผ ์ถœ๋ ฅ์„ ๋ช…ํ™•ํžˆ ํ•˜๊ณ  ๋ฌธ์„œํ™” ํ•ด์•ผํ•จ
    • ๋น„์ฆˆ๋‹ˆ์Šค ์˜ค๋„ˆ ๋ช…์‹œ : ๋ˆ„๊ฐ€ ์ด ๋ฐ์ดํ„ฐ๋ฅผ ์š”์ฒญํ–ˆ๋Š”์ง€๋ฅผ ๊ธฐ๋ก์œผ๋กœ ๋‚จ๊ฒจ์•ผ ํ•œ๋‹ค.
    • ๋ฐ์ดํ„ฐ ์นดํƒˆ๋กœ๊ทธ๋กœ ๋“ค์–ด๊ฐ€์„œ ๋ฐ์ดํ„ฐ ๋””์Šค์ปค๋ฒ„๋ฆฌ์— ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค.
      -> ๋ฐ์ดํ„ฐ ๋ฆฌ๋‹ˆ์ง€๊ฐ€ ์ค‘์š”ํ•ด์ง„๋‹ค. ์ด๊ฑธ ์ดํ•ดํ•˜์ง€ ๋ชปํ•˜๋ฉด ๋งŽ์€ ์ข…๋ฅ˜์˜ ์‚ฌ๊ณ ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

๐Ÿ“• Best Practices (4)

  • ์ฃผ๊ธฐ์ ์œผ๋กœ ๋ถˆํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋“ค์„ ์‚ญ์ œํ•œ๋‹ค.

๐Ÿ“• Best Practices (5)

  • ๋ฐ์ดํ„ฐ ํŒŒ์ดํ”„๋ผ์ธ ์‚ฌ๊ณ ์‹œ ๋งˆ๋‹ค ์‚ฌ๊ณ  ๋ฆฌํฌํŠธ(post-mortem)์“ฐ๊ธฐ
    • ๋ชฉ์ ์€ ๋™์ผํ•œ ํ˜น์€ ์•„์ฃผ ๋น„์Šทํ•œ ์‚ฌ๊ณ ๊ฐ€ ๋˜ ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ์„ ๋ง‰๊ธฐ ์œ„ํ•จ์ด๋‹ค.

๐Ÿ“• Best Practices (6)

  • ์ค‘์š” ๋ฐ์ดํ„ฐ ํŒŒ์ดํ”„๋ผ์ธ์˜ ์ž…๋ ฅ๊ณผ ์ถœ๋ ฅ์„ ์ฒดํฌํ•˜๊ธฐ
    • ์•„์ฃผ ๊ฐ„๋‹จํ•˜๊ฒŒ ์ž…๋ ฅ ๋ ˆ์ฝ”๋“œ์˜ ์ˆ˜์™€ ์ถœ๋ ฅ ๋ ˆ์ฝ”๋“œ์˜ ์ˆ˜๊ฐ€ ๋ช‡๊ฐœ์ธ์ง€ ์ฒดํฌํ•˜๋Š” ๊ฒƒ๋ถ€ํ„ฐ ์‹œ์ž‘
    • Summary Table์„ ๋งŒ๋“ค์–ด๋‚ด๊ณ  Primary key๊ฐ€ ์กด์žฌํ•œ๋‹ค๋ฉด Primary key uniqueness๊ฐ€ ๋ณด์žฅ๋˜๋Š”์ง€ ์ฒดํฌํ•˜๋Š” ๊ฒƒ์ด ํ•„์š”ํ•˜๋‹ค.
    • ์ค‘๋ณต ๋ ˆ์ฝ”๋“œ ์ฒดํฌ

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