Druid 스키마 모델

Druid 스키마 모델 (Druid schema model)

Druid는 전통적인 관계형 데이터베이스 관리 시스템(RDBMS)의 테이블과 비슷한 datasource에 데이터를 저장해요. Druid의 데이터 모델은 관계형 데이터 모델과 시계열(time-series) 데이터 모델 양쪽의 특징을 함께 갖고 있습니다.

출처: 문서

본문

기본 타임스탬프 (Primary timestamp)

Druid 스키마에는 항상 기본 타임스탬프(primary timestamp)가 포함돼야 해요. Druid는 이 기본 타임스탬프로 데이터를 파티셔닝하고 정렬합니다. 또 쿼리 시간 범위 안의 데이터를 빠르게 식별하고 가져오는 데도 사용하고, 시간 청크 삭제·시간 청크 덮어쓰기·시간 기반 보존 규칙 같은 시간 기반 데이터 관리 작업에도 이 컬럼을 사용합니다.

Druid는 수집 시점에 timestampSpec 설정에 따라 기본 타임스탬프를 파싱해요. 기본 타임스탬프가 어느 소스 필드에서 왔든, Druid는 항상 그 타임스탬프를 Druid datasource의 __time 컬럼에 저장합니다.

기본 타임스탬프에 기반한 다른 중요한 작업들은 granularitySpec에서 제어할 수 있어요. 타임스탬프 컬럼이 두 개 이상이라면 나머지는 보조 타임스탬프(secondary timestamp)로 저장할 수 있습니다.

차원 (Dimensions)

Dimensions는 Druid가 "있는 그대로" 저장하는 컬럼이에요. 어떤 목적으로든 사용할 수 있는데, 예를 들어 쿼리 시점에 필요에 따라 그룹화하거나 필터링하거나 애그리게이터를 적용할 수 있습니다.

롤업(rollup)을 비활성화하면 Druid는 dimension 집합을 수집할 컬럼 집합처럼 취급해요. 이때 dimension은 롤업 기능을 지원하지 않는 일반 데이터베이스에서 기대하는 그대로 동작합니다.

수집 시점에는 dimensionsSpec에서 dimension을 설정합니다.

메트릭 (Metrics)

Metrics는 Druid가 집계(aggregated)된 형태로 저장하는 컬럼이에요. 롤업을 활성화했을 때 가장 유용한데, 메트릭을 지정하면 수집하는 동안 각 행에 집계 함수를 적용할 수 있습니다. 여기에는 다음과 같은 이점이 있습니다.

  • 롤업은 dimension은 그대로 두고 metric의 값을 집계하면서 행을 묶는(resource) 집계의 한 형태예요. 같은 타임스탬프 값과 dimension 값을 가진 여러 행을 하나로 합치는 것이죠. 예를 들어 롤업 튜토리얼에서는 네트플로우(netflow) 데이터를 (minute, srcIP, dstIP) 튜플 단위로 한 행에 묶으면서, 총 패킷·바이트 수에 대한 집계 정보는 유지하는 방식을 보여줍니다.
  • Druid는 일부 애그리게이터(특히 근사 애그리게이터)를 수집 시점에 부분 계산해 두면, 롤업되지 않은 데이터까지 포함해서 쿼리 시점에 더 빠르게 계산할 수 있어요.

수집 시점에는 metricsSpec에서 Metrics를 설정합니다.

더 알아보기 (Learn more)