๐ 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
๐ 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
- ์ธ๋ถ์ ๋ด๋ถ ๋ฐ์ดํฐ ์์ค์์ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ธฐ(๋ง์ ๊ฒฝ์ฐ API๋ฅผ ํตํ๊ฒ ๋๋ค.)
- ์ ๋นํ ๋ฐ์ดํฐ ํฌ๋งท ๋ณํ(๋ฐ์ดํฐ์ ํฌ๊ธฐ๊ฐ ์ปค์ง๋ฉด Spark๋ฑ์ด ํ์ํด์ง๋ค.)
- Load to Data Warehouse
-> ์ด ์์
์ ๋ณดํต ๋ฐ์ดํฐ ์์ง๋์ด๊ฐ ํํ๋ค.
๐ Summary/Report Jobs
- DW(ํน์ DL)๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด ๋ค์ DW์ ์ฐ๋ ETL
- Raw Data๋ฅผ ์ฝ์ด์ ์ผ์ข
์ Report ํํ๋ Summaryํํ์ ํ
์ด๋ธ์ ๋ค์ ๋ง๋๋ ์ฉ๋
- ํน์ํ ํํ๋ก๋ ABํ
์คํธ ๊ฒฐ๊ณผ๋ฅผ ๋ถ์ํ๋ ๋ฐ์ดํฐ ํ์ดํ๋ผ์ธ๋ ์กด์ฌํ๋ค.
์์ฝ ํ
์ด๋ธ์ ๊ฒฝ์ฐ SQL(CTAS๋ฅผ ํตํด)๋ง์ผ๋ก ๋ง๋ค๊ณ ์ด๋ ๋ฐ์ดํฐ ๋ถ์๊ฐ๊ฐ ํ๋๊ฒ์ด ๋ง๋ค.
๋ฐ์ดํฐ ์์ง๋์ด ๊ด์ ์์๋ ์ด๋ป๊ฒ ๋ฐ์ดํฐ ๋ถ์๊ฐ๋ค์ด ํธํ๊ฒ ํ ์ ์๋ ํ๊ฒฝ์ ๋ง๋ค์ด ์ฃผ๋๋๊ฐ ๊ด๊ฑด์ด๋ค.
-> Analytics Enginner(DBT)
๐ Production Data Jobs
- DW๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด ๋ค๋ฅธ Storage(๋ง์ ๊ฒฝ์ฐ ํ๋ก๋์
ํ๊ฒฝ)๋ก ์ฐ๋ ETL
- Summary ์ ๋ณด๊ฐ ํ๋ก๋์
ํ๊ฒฝ์์ ์ฑ๋ฅ ์ด์ ๋ก ํ์ํ ๊ฒฝ์ฐ
- ํน์ ML Model์์ ํ์ํ feature๋ค์ ๋ฏธ๋ฆฌ ๊ณ์ฐํด๋๋ ๊ฒฝ์ฐ
- ์ด ๊ฒฝ์ฐ ํํ ํ๊ฒ ์คํ ๋ฆฌ์ง
- 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๊ฐ ๋ณด์ฅ๋๋์ง ์ฒดํฌํ๋ ๊ฒ์ด ํ์ํ๋ค.
- ์ค๋ณต ๋ ์ฝ๋ ์ฒดํฌ