> ## Documentation Index
> Fetch the complete documentation index at: https://docs.sifi.life/llms.txt
> Use this file to discover all available pages before exploring further.

# 개요 & 품질 문제 이해

> **핵심 메시지**: "Raw 로그를 신뢰할 수 있는 수율·품질·설비 데이터로 바꾸는 과정을, 자연어 한 줄로 선언하고 자동화한다."

### 목적 & 다루는 테이블

* **목적** — Bronze 원천을 신뢰할 수 있는 Silver(정제)·Gold(집계)로 바꾸고, SDP·Job으로 자동화합니다.
* **입력** — Bronze 17개 테이블 (모듈 2에서 적재·품질 확인 완료)
* **생성** — Silver 11개(정제·표준화) + Gold 10개(비즈니스 집계)
  * 테이블 이름은 아래 [Silver 테이블 목록](03-silver#silver-테이블-목록)과 [Gold 컬럼 표준](03-gold#part-c-gold-layer--비즈니스-집계) 표를 그대로 따릅니다.

### 이 모듈에서 사용하는 Databricks 기능

| 기능 | 설명 | 공식 문서 |
| - | - | - |
| **SDP (Spark Declarative Pipelines)** | 이전 이름 DLT(Delta Live Tables). 파이프라인을 SQL/Python으로 "선언"하면 실행 순서·증분·에러 복구를 Databricks가 자동 관리. Lakeflow의 파이프라인 엔진. | [docs](https://docs.databricks.com/en/delta-live-tables/index.html) |
| **Expectations** | SDP의 데이터 품질 규칙. `expect("규칙", "조건")`으로 위반 레코드를 감지·격리·중단. | [docs](https://docs.databricks.com/en/delta-live-tables/expectations.html) |
| **Medallion Architecture** | Bronze(원본)→Silver(정제)→Gold(집계) 3계층. 원본을 보존하며 단계적으로 신뢰도를 높임. | [docs](https://docs.databricks.com/en/lakehouse/medallion.html) |
| **Databricks Jobs** | 노트북/파이프라인을 스케줄·자동 실행. 매일 새벽 리프레시 같은 자동화. | [docs](https://docs.databricks.com/en/workflows/jobs/create-run-jobs.html) |

## 개요

17개 Bronze 테이블의 Raw 로그에는 결측·중복·이상치·단위불일치·참조 깨짐 등 현실의 품질 문제가 있습니다(모듈 2에서 확인). 이 모듈에서는:

1. **수동 CTAS**로 Bronze→Silver→Gold 변환 로직을 이해한 뒤
2. **SDP**로 동일 로직을 선언적으로 자동화하고
3. **Job**으로 매일 자동 리프레시합니다.

> **17개 중 11개만 Silver로 정제합니다.**
>
> * Bronze 17개 가운데 이벤트성 데이터 11개를 Silver로 정제합니다.
> * 마스터 3개(equipment/product/material\_lot)·`work_orders`·`reflow_profiles`·`field_returns`는 정제 대상이 아니라 **조인 참조용 또는 타 모듈용**으로 원본 그대로 둡니다("17개를 다 정제하나?" 혼동 방지).

> **두 트랙, 같은 결과.**
>
> * Part B·C의 **수동 CTAS**와 Part D의 **SDP**는 같은 Silver/Gold 변환을 각각 수동·선언적으로 수행합니다.
> * 먼저 CTAS로 로직을 눈으로 이해하고, 같은 로직을 SDP로 옮겨 자동화하는 흐름입니다.

> **Vibe 코딩 안내.**
>
> * 아래 단계별 프롬프트는 **예시**입니다.
> * 핵심 의도와 (특히 Gold) 컬럼 이름만 지키면 표현은 자유롭게 바꿔도 됩니다 — 산식·SQL 디테일은 Genie Code가 채웁니다.

> 품질 위반 레코드를 격리하는 `quarantine` 스키마는 [모듈 0](00-genie-code-intro-setup)에서 이미 생성했습니다.

> **작업 흐름(전 모듈 공통)**
>
> * Genie Code가 코드를 생성하면 **Plan 확인 → "Allow in this thread"(절대 Always Allow 아님) → Accept all → Run**.
> * 기존 테이블은 DROP하지 말고 `CREATE OR REPLACE`.
> * 무거운 변환도 SQL로 처리할 수 있으면 노트북 코드보다 SQL을 우선하세요(클러스터 대기·타임아웃 회피).

> **📓 작업 노트북**
>
> * 이 모듈의 코드는 새 노트북 `03_CCM_Transform_<본인ID>`(사이드바 New → Notebook, 언어 Python, 컴퓨트 Serverless)를 만들어 그 안에서 작성합니다.
> * Part A\~C의 Silver·Gold CTAS SQL 셀이 여기 쌓이고, **Part D는 이 노트북의 CTAS SQL을 참고해 별도 SDP 소스 노트북 `03_CCM_SDP_<본인ID>`을 만듭니다**.

***

## Part A: 데이터 품질 문제 이해하기

모듈 2에서 확인한, Bronze에 **의도적으로 심어진** 품질 이슈입니다. Silver 변환에서 이걸 어떻게 처리하는지가 이 파이프라인의 핵심입니다.

| 이슈 유형 | 테이블 | 구체적 문제 | Silver 처리 |
| - | - | - | - |
| **결측 (NULL)** | final\_image\_test | `snr_db` NULL (구형 테스터) | 모델 평균으로 대체 + `snr_imputed` 플래그 |
| **결측 (NULL)** | dispensing\_process | `uv_dose_mj` NULL (LENS\_BOND UV 미조사) | 잠재불량 플래그 `uv_missing=true` 부여 |
| **중복** | production\_events | 동일 serial+timestamp 재전송 | `event_id`/`(serial_id,timestamp,event_type)` 기준 DEDUP |
| **이상치** | active\_alignment | `mtf_center_pct > 100` (센서 오류) | 100 초과 → NULL 후 격리 |
| **이상치** | equipment\_sensor\_logs | `temperature_c > 200` (스파이크) | 물리적 상한 클리핑 + `is_spike` 플래그 |
| **단위 혼입** | smt\_placement\_logs | `placement_offset_x_um` mm/um 혼입(값 1000배) | 절대값 500µm 초과 → 1000으로 나눠 보정 |
| **참조 무결성** | 전 테이블 | 존재하지 않는 `equipment_id`/`material_lot_id` | 마스터에 없으면 `quarantine`으로 분리 |
| **시간 역전** | production\_events | OUT \< IN | 쌍 매칭 시 역전 레코드 격리 |
| **비즈니스 규칙** | aoi\_inspection | `defect_flag=false`인데 `defect_type` 존재 | 규칙 위반 → `quarantine` |

### 데이터 품질 진단 프롬프트 (모듈 2 연계 요약)

**1단계 —** 스코어카드 뼈대부터.

```
ccm_factory.bronze의 핵심 테이블에 대해 Silver 변환 전 최종 품질 스코어카드를 만들려고 해. 먼저 어떤 항목을 점검하면 좋을지 제안해줘.
```

**2단계 —** 결측·중복 점검 추가.

```
스코어카드에 추가: @ccm_factory.bronze.final_image_test.snr_db, @ccm_factory.bronze.dispensing_process.uv_dose_mj NULL 비율, 그리고 @ccm_factory.bronze.production_events 중복(serial_id+timestamp+event_type) 및 OUT<IN 역전 건수.
```

**3단계 —** 이상치·단위혼입 추가.

```
이상치도 추가: @ccm_factory.bronze.active_alignment.mtf_center_pct>100, @ccm_factory.bronze.equipment_sensor_logs.temperature_c>200 건수, @ccm_factory.bronze.smt_placement_logs 단위혼입 의심(|offset|>500µm) 건수.
```

**4단계 —** 참조무결성·규칙위반 추가.

```
참조 무결성 위반(serial_id/equipment_id/material_lot_id) 건수와 @ccm_factory.bronze.aoi_inspection 비즈니스 규칙 위반(defect_flag=false & defect_type NOT NULL) 건수도 더해줘.
```

**5단계 —** 표 정리 + 우선순위.

```
전체 결과를 표로 보여주고, Silver에서 처리 우선순위를 제안해줘.
```

***


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.