본문 바로가기

Bigdata/druid

Druid 정리(2)

스키마 디자인

· 드루이드는 비정규화된 데이터와 컬럼(timestamp, dimension, metric)을 취급한다.

· 모든 행은 timestamp를 가져야 한다. 데이터는 항상 time으로 파티션되고 모든 쿼리는 time filter를 가진다.

· 쿼리 결과는 역시 분, 시간, 일등과 같은 time 버킷으로 나눠질 수 있다.

· Dimension은 필터링이나 그룹핑 될 수 있는 필드이다. String, String 배열, Long, Double, float 타입을 가진다.

· Metric은 집계될 수 있는 필드이다. 숫자형으로 저장되지만 HyperLogLog sketches나 approximate histogram sketches 같은 Complex 객체 형태로 저장될 수 있다.


숫자형 디멘전

· 숫자형 타입 디멘전으로 컬럼을 조회하기 위해서는 dimesionsSpec의 dimension 부분에 컬럼의 타입을 명시해야한다.

· 드루이드는 디폴트로 스트링 타입으로 조회한다.

· String과 숫자형 컬럼은 성능에 트레이드 오프가 있다

  · 숫자형 컬럼은 일반적으로 스트링 컬럼보다 그룹핑에 빠르지만 인덱스를 가지고 있지 않아 필터링이 느리다.


높은 카디널리티 디멘전

· 종종 정확한 카운트가 필요하지 요구되지 않은 경우가 있다.

· 유니크 ID를 저장하는 것은 압축이나 롤업을 어렵게 만든다.

· 대신에 유니크 ID의 sketch를 저장하는 건 굉장한 퍼포먼스를 향상시키고 저장공간을 줄일 것이다.

· 드루이드의 hyperUnique aggrator는 Hyperloglog에 기반하고 높은 카디널리티 디멘전의 유니크 카운트를 구하는데 사용할 수 있다.


중첩된 디멘전

· 0.13 기준으로 드루이드는 중첩된 디멘전을 지원하지 않는다. 인덱싱 하기 전에 아래와 같이 펼쳐야 한다.

· {"foo":{"bar": 3}} -> {"foo_bar": 3}

· 드루이드는 json, avro 같은 입력데이터를 flatten해서 저장할 수 있다.


수집된 이벤트 수 카운팅

· 수집 시점에 count aggregator는 수집되는 이벤트의 수를 카운트할 수 있다.

· 이 메트릭을 쿼리할 때는 LongSum aggregator를 사용해야 한다.

· 쿼리 시점에 count aggregator 사용은 타임 간격에 드루이드 행의 수를 반환한다.


스키마 less 디멘전

· dimensions 항목이 수집 스펙에 비어 있다면 드루이드는 타임스탬프 컬럼, 제외된 컬럼, 메틀릭 컬럼을 제외한 모든 컬럼을 디멘전으로 다룬다.

· 디멘전 항목을 명시적으로 설정한 것보다 약간 더 사이즈가 커진다.


디멘전과 메트릭에 동일한 컬럼을 사용하는 경우

· 유니크 ID는 특별한 ID로 필터링되고 또한 특정 ID 컬럼을 빠르게 카운트 해야할 필요가 있을 수 있다.

· 만약 스키마 리스 디멘전을 사용중이 아니라면, 이 경우 디멘전과 다른 메트릭 이름을 설정하여 지원이 된다.

· 만약 스키마 리스 디멘전을 사용중이라면 ETL 타임에 같은 컬럼을 두번 포함시키는 것이다.(하나는 디멘전으로서, 하나는 hyperUnique 메트릭이로서)


'Bigdata > druid' 카테고리의 다른 글

Druid 정리(5)  (0) 2019.03.30
Druid 정리(4)  (0) 2019.03.30
Druid 정리(3)  (0) 2019.03.30
Druid 정리(1)  (1) 2019.03.30