이벤트 데이터 유형 및 Null 허용 여부
Telemetry는 구조화된 이벤트에서 테이블 스키마를 추론합니다. 유연한 수집은 사전 마이그레이션 단계를 제거하지만 유용한 SQL는 여전히 안정적인 필드 의미와 유형에 따라 달라집니다.
내구성 유형을 선택하세요
식별자 및 제어된 범주에는 문자열을 사용하고, 계산할 값에는 숫자를, 실제 2가지 상태 사실에는 부울을, 특정 시점에는 타임스탬프를 사용합니다.
| 가치 | 추천 분야 |
|---|---|
| 기간 | 숫자 duration_ms |
| 돈 | 숫자 정규화 금액 + 소스 통화 |
| 식별자 | 문자열(숫자만 포함된 경우에도 해당) |
| 결과 | success, failed 또는 timeout와 같은 제어 문자열 |
| 기능 플래그 | 정확히 두 가지 의미가 있는 경우 부울 |
| 이벤트 시간 | timestamp_utc로 정규화된 시간대 한정 입력 |
한 배포에서는 일정 기간 동안 "842"를 보내고 다른 배포에서는 842를 보내지 마십시오. 한 서비스의 HTTP 코드와 다른 서비스의 워크플로 범주에 대해 status를 재사용하지 마십시오.
결측값 이해
로그 API는 정규화 중에 null 값, 빈 개체 및 빈 배열을 제거합니다. 따라서 누락된 필드는 해당 행에 값이 저장되지 않았음을 의미합니다. 이는 0, false, 빈 문자열 또는 알 수 없음을 의미하지 않습니다.
부재가 분석적으로 의미가 있는 경우 IS NULL를 사용하세요. 교체품이 방어 가능한 비즈니스 의미를 갖는 경우에만 COALESCE를 사용하십시오.
SELECT
event_name,
100.0 * SUM(CASE WHEN account_id IS NULL THEN 1 ELSE 0 END)
/ NULLIF(COUNT(*), 0) AS missing_account_rate_pct
FROM product_events
GROUP BY event_name;
필수 필드 null-rate 레시피는 볼륨 보호 및 프로듀서 버전 컨텍스트를 추가합니다.
의미를 바꾸지 않고 진화하다
null 허용 필드 추가는 일반적으로 호환됩니다. 필드 유형을 변경하거나 기존 범주를 재정의하는 것은 아닙니다. 의미가 변경되면 새 필드 또는 schema_version를 도입하고 의도적으로 쿼리를 마이그레이션합니다.
중첩된 개체는 쿼리 가능한 점선 필드가 됩니다. 각 중첩 경로를 안정적으로 유지하고 이벤트 간에 요소 구조가 변경되는 배열을 피하세요.
프로덕션 계약을 확장하기 전에 스키마 진화, 이벤트 스키마 디자인 및 중첩 JSON 쿼리를 검토하세요.