μ‹€μ œ 데이터 μ—”μ§€λ‹ˆμ–΄λ§ νŒŒμ΄ν”„λΌμΈμ—μ„œ κ°€μž₯ ν”ν•œ μ‹€μˆ˜ 쀑 ν•˜λ‚˜λŠ” 데이터 ν΄λ Œμ§•μ„ λ„ˆλ¬΄ λ’€λ‘œ λ―Έλ£¨λŠ” κ²ƒμž…λ‹ˆλ‹€.

μ—…μŠ€νŠΈλ¦Ό 데이터가 κΉ¨λ—ν• μˆ˜λ‘ λ‹€μš΄μŠ€νŠΈλ¦Ό λͺ¨λΈμ€ 더 λ‹¨μˆœν•˜κ³  μœ μ§€λ³΄μˆ˜ν•˜κΈ° μ‰¬μ›Œμ§‘λ‹ˆλ‹€.

이제 ν•˜λ‚˜μ”© μ‚΄νŽ΄λ³΄κ² μŠ΅λ‹ˆλ‹€.

βœ… κΈ°λ³Έ 원칙

κ°€λŠ₯ν•œ ν•œ κ°€μž₯ 이λ₯Έ λ‹¨κ³„μ—μ„œ 데이터λ₯Ό ν΄λ Œμ§• β€” μ΄μƒμ μœΌλ‘œλŠ” μŠ€ν…Œμ΄μ§• λ ˆμ΄μ–΄μ—μ„œ μ²˜λ¦¬ν•΄μ•Ό ν•©λ‹ˆλ‹€.

βœ… κ·Έ 이유

1️⃣ μ±…μž„ λΆ„λ¦¬μ˜ λͺ…ν™•μ„±

  • μŠ€ν…Œμ΄μ§• λͺ¨λΈμ˜ 역할은 λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€:

    • ν΄λ Œμ§•
    • ν‘œμ€€ν™” (μ •κ·œν™”)
    • νƒ€μž… μΊμŠ€νŒ…
  • λ§Œμ•½ λ”λŸ¬μš΄ 데이터λ₯Ό martsκΉŒμ§€ (예: dim_customer, fct_transaction) λ„˜κΈ΄λ‹€λ©΄:

    • λ‹€μš΄μŠ€νŠΈλ¦Ό λͺ¨λΈμ΄ λ³΅μž‘ν•΄μ§
    • 쀑볡 ν•„ν„° λ°œμƒ
    • μœ μ§€λ³΄μˆ˜κ°€ μ–΄λ €μš΄ μ·¨μ•½ν•œ μ½”λ“œ 생성

2️⃣ Marts λ ˆμ΄μ–΄λŠ” λΉ„μ¦ˆλ‹ˆμŠ€ 둜직만 λ‹΄λ‹Ήν•΄μ•Ό ν•œλ‹€

  • Marts λ ˆμ΄μ–΄λŠ” 였직 λ‹€μŒμ— 집쀑해야 ν•©λ‹ˆλ‹€:

    • 쑰인
    • 집계
    • 차원 관계 ꡬ성
  • ν΄λ Œμ§•, null 처리, ν‘œμ€€ν™”λŠ” 이미 μ—…μŠ€νŠΈλ¦Όμ—μ„œ λλ‚˜ μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€.

  • μ΄λ ‡κ²Œ ν•˜λ©΄ SQL이 훨씬 κΉ”λ”ν•˜κ³  가독성이 λ†’μ•„μ§‘λ‹ˆλ‹€.

3️⃣ μ‹€μ „ μ‹œμŠ€ν…œμ€ μ΄λ ‡κ²Œ μ„€κ³„λœλ‹€

νŒŒμ΄ν”„λΌμΈ 흐름:

source β†’ staging (ν΄λ Œμ§•, ν‘œμ€€ν™”) β†’ marts (λͺ¨λΈλ§, 집계)

βœ… μš”μ•½ ν‘œ

λ ˆμ΄μ–΄ μ—­ν•  ν΄λ Œμ§• 적용 μ—¬λΆ€
μŠ€ν…Œμ΄μ§• ν΄λ Œμ§•, ν‘œμ€€ν™”, νƒ€μž… μΊμŠ€νŒ… βœ… λ°˜λ“œμ‹œ 적용
Marts 쑰인, 집계, λΉ„μ¦ˆλ‹ˆμŠ€ 둜직 ❌ 클린 λ°μ΄ν„°λ§Œ λ°›μ•„μ•Ό 함

βœ… μ‹€μ „ 적용 κ·œμΉ™

μŠ€ν…Œμ΄μ§• λ ˆμ΄μ–΄μ—μ„œλŠ” λ‹€μŒμ„ 적용:

  • λ”λŸ¬μš΄ λ¬Έμžμ—΄ ('NaN', 빈 λ¬Έμžμ—΄, 이상값 λ“±) β†’ NULL둜 λ³€ν™˜
  • κΈ°λ³Έν‚€ λˆ„λ½λœ ν–‰ μ‚­μ œ (예: cardholder_id IS NULL)
  • λΉ„ν‚€ 컬럼 (예: description)은 NULL ν—ˆμš© β€” λ‹€μš΄μŠ€νŠΈλ¦Όμ—μ„œ μ•ˆμ „ν•˜κ²Œ 처리 κ°€λŠ₯

πŸ”₯ λ©΄μ ‘μ΄λ‚˜ ν¬νŠΈν΄λ¦¬μ˜€μ—μ„œ μ΄λ ‡κ²Œ μ„€λͺ…ν•˜λΌ:

“μŠ€ν…Œμ΄μ§• λ ˆμ΄μ–΄μ—μ„œ λ”λŸ¬μš΄ λ¬Έμžμ—΄μ„ ν‘œμ€€ν™”ν•˜μ—¬ martsκ°€ 항상 클린 데이터λ₯Ό μ†ŒλΉ„ν•˜λ„λ‘ μ„€κ³„ν–ˆμŠ΅λ‹ˆλ‹€. 이둜 인해 λ‹€μš΄μŠ€νŠΈλ¦Ό 쑰인과 집계가 λ‹¨μˆœν•΄μ§€κ³  μ‹œμŠ€ν…œ μ•ˆμ •μ„±κ³Ό μœ μ§€λ³΄μˆ˜μ„±μ΄ 크게 ν–₯μƒλ˜μ—ˆμŠ΅λ‹ˆλ‹€.”