퀘스트디비(QuestDB) SAMPLE BY 키워드 간단 사용법 소개

 

퀘스트디비(QuestDB) Sample By 키워드 사용법
https://questdb.io/


퀘스트디비(QuestDB)에서 사용되는 SAMPLE BY 키워드의 사용법을 간단히 소개합니다. 

SAMPLE BY 키워드는 Select 문에서 사용할 수 있고, 시계열 데이터 (timeseries data)를 일정 단위로 묶어서 요약하는데 사용됩니다. (의미가 헷갈리시면 뒤에 나오는 예를 보시면 금방 이해하실 것입니다.) 

SAMPLE BY 키워드 뒤에 단위를 입력합니다. 30분으로 묶으려면 30m, 30일로 묶으려면 30d 이런식으로 사용하면 됩니다. 예) SELECT timestamp, avg(price) FROM trades SAMPLE BY 30m;

퀘스트디비(QuestDB) Sample By 키워드 사용법
https://questdb.io/

한가지 중요한 점은 SAMPLE BY 키워드를 사용하려면 designated timestamp 로 명시된 컬럼이 존재해야 합니다. 테이블에 designated timestamp column(지정/지명된 타임스탬프 칼럼/컬럼/열)이 있는 예는 아래와 같습니다. 

designated timestamp 컬럼 지정 예시
https://questdb.io/

 

designated timestamp 로 지정/지명/선택하는 방법은 1) 테이블 생성시 2) SELECT문에서 타임스탬프 함수를 사용하여 지정하는 방법이 있습니다. 

1)

CREATE TABLE

temperatures(ts timestamp, sensorID symbol, sensorLocation symbol, reading double)

timestamp(ts);

2)

(SELECT cast(dateTime AS TIMESTAMP) ts, device, value FROM readings) timestamp(ts);



아래와 같이 trades 테이블에는 여러 column이 있는데 그 중에 timestamp 형식의 데이터를 가진 timestamp 컬럼이 있습니다.

SAMPLE BY 키워드 사용 데모
trade 테이블 스키마(schema)

SAMPLE BY 키워드 사용 데모
trade 테이블 쿼리 결과 화면


trade 테이블에서 SAMPLE BY 30m 으로 쿼리를 해보겠습니다. 30m 은 30분 단위로 묶게됩니다.

SAMPLE BY 키워드 사용 데모

쿼리 결과를 보시면 타임스탬프 컬럼을 30분 단위로 묶어서 가격(price)의 평균을 낸 결과를 보실 수 있습니다. 

SAMPLE BY 키워드 사용 데모
Sample By 키워드 사용 결과

특정 시간 대에 데이터가 없는 경우가 있을 수 있습니다. 이때 Fill 옵션을 활용하실 수 있습니다.

Fill 키워드를 사용할 때 fillOption 전략을 사용하면 됩니다. 

SAMPLE BY KEYWORD FILL OPTION
https://questdb.io/


예를 들어, 1시간 단위로 Sample By 를 했는데 2021-01-01T03:00:00.000000Z 의 샘플에 데이터가 없는 경우 

SAMPLE BY KEYWORD FILL OPTION
https://questdb.io/



 LINEAR strategy(전략)을 사용하면 linear interpolation 으로 빈 데이터의 값을 채우게 됩니다.
Linear interpolation 으로 빈 데이터 채우기
https://questdb.io/

여러개의 fill 값을 사용하실 수도 있습니다.

여러개의 fill value 사용 예시
https://questdb.io/

ALIGN TO 키워드도 있습니다. 타임존, 오프셋, 캘린더 날짜 등을 고려해서 샘플을 계산할 수 있습니다. 더 자세한 내용은 퀘스트디비 공식 문서를 참고해주세요. 

SAMPLE BY 키워드 공식 문서https://questdb.io/docs/reference/sql/sample-by

- The End - 

Comments