/
롤업 테이블의 조회 (1)
롤업 테이블의 조회 (1)
데이터 샘플
아래는 롤업 테스트를 위한 샘플 데이터이다.
create tagdata table TAG (name varchar(20) primary key, time datetime basetime, value double summarized); insert into tag metadata values ('TAG_0001'); insert into tag values('TAG_0001', '2018-01-01 01:00:01 000:000:000', 1); insert into tag values('TAG_0001', '2018-01-01 01:00:02 000:000:000', 2); insert into tag values('TAG_0001', '2018-01-01 01:01:01 000:000:000', 3); insert into tag values('TAG_0001', '2018-01-01 01:01:02 000:000:000', 4); insert into tag values('TAG_0001', '2018-01-01 01:02:01 000:000:000', 5); insert into tag values('TAG_0001', '2018-01-01 01:02:02 000:000:000', 6); insert into tag values('TAG_0001', '2018-01-01 02:00:01 000:000:000', 1); insert into tag values('TAG_0001', '2018-01-01 02:00:02 000:000:000', 2); insert into tag values('TAG_0001', '2018-01-01 02:01:01 000:000:000', 3); insert into tag values('TAG_0001', '2018-01-01 02:01:02 000:000:000', 4); insert into tag values('TAG_0001', '2018-01-01 02:02:01 000:000:000', 5); insert into tag values('TAG_0001', '2018-01-01 02:02:02 000:000:000', 6); insert into tag values('TAG_0001', '2018-01-01 03:00:01 000:000:000', 1); insert into tag values('TAG_0001', '2018-01-01 03:00:02 000:000:000', 2); insert into tag values('TAG_0001', '2018-01-01 03:01:01 000:000:000', 3); insert into tag values('TAG_0001', '2018-01-01 03:01:02 000:000:000', 4); insert into tag values('TAG_0001', '2018-01-01 03:02:01 000:000:000', 5); insert into tag values('TAG_0001', '2018-01-01 03:02:02 000:000:000', 6);
태그 하나에 대해서 3시간 동안 초단위의 각기 다른 값을 입력해 놓았다.
ROLLUP 강제 갱신
마크베이스는 실시간으로 ROLLUP 데이터를 만들지만, HOUR 혹은 MIN의 경우 해당 시간이 넘어가지 않았을 경우에는 업데이트하지 않는다.
그러나 해당 시간이 되기 이전에라도 ROLLUP 을 확인할 필요가 있으므로, 마크베이스는 EXEC ROLLUP_FORCE 구문을 통해서 강제 갱신을 할 수 있는 기능을 제공한다.
이 함수는 데이터 양에 따라 매우 오래 걸릴 수 있기 때문에 꼭 필요한 경우에만 실행해야 한다. (대부분의 경우 이 함수를 수행할 필요가 없다. )
Mach> EXEC ROLLUP_FORCE; Executed successfully.
ROLLUP 평균값 얻기
아래는 해당 태그에 대해 초, 분, 시 단위의 평균값을 얻는 예제이다.
Mach> SELECT /*+ ROLLUP(TAG, sec, AVG) */ time, value FROM TAG WHERE name = 'TAG_0001' order by time; time value --------------------------------------------------------------- 2018-01-01 01:00:01 000:000:000 1 2018-01-01 01:00:02 000:000:000 2 2018-01-01 01:01:01 000:000:000 3 2018-01-01 01:01:02 000:000:000 4 2018-01-01 01:02:01 000:000:000 5 2018-01-01 01:02:02 000:000:000 6 2018-01-01 02:00:01 000:000:000 1 2018-01-01 02:00:02 000:000:000 2 2018-01-01 02:01:01 000:000:000 3 2018-01-01 02:01:02 000:000:000 4 2018-01-01 02:02:01 000:000:000 5 2018-01-01 02:02:02 000:000:000 6 2018-01-01 03:00:01 000:000:000 1 2018-01-01 03:00:02 000:000:000 2 2018-01-01 03:01:01 000:000:000 3 2018-01-01 03:01:02 000:000:000 4 2018-01-01 03:02:01 000:000:000 5 2018-01-01 03:02:02 000:000:000 6 [18] row(s) selected. Mach> SELECT /*+ ROLLUP(TAG, min, AVG) */ time, value FROM TAG WHERE name = 'TAG_0001' order by time; time value --------------------------------------------------------------- 2018-01-01 01:00:00 000:000:000 1.5 2018-01-01 01:01:00 000:000:000 3.5 2018-01-01 01:02:00 000:000:000 5.5 2018-01-01 02:00:00 000:000:000 1.5 2018-01-01 02:01:00 000:000:000 3.5 2018-01-01 02:02:00 000:000:000 5.5 2018-01-01 03:00:00 000:000:000 1.5 2018-01-01 03:01:00 000:000:000 3.5 2018-01-01 03:02:00 000:000:000 5.5 [9] row(s) selected. Mach> SELECT /*+ ROLLUP(TAG, hour, AVG) */ time, value FROM TAG WHERE name = 'TAG_0001' order by time; time value --------------------------------------------------------------- 2018-01-01 01:00:00 000:000:000 3.5 2018-01-01 02:00:00 000:000:000 3.5 2018-01-01 03:00:00 000:000:000 3.5 [3] row(s) selected.
ROLLUP 최소/최대값 얻기
아래는 해당 태그의 시간 범위에 따른 최소/최대값을 얻는 예제를 나타낸다.
Mach> SELECT /*+ ROLLUP(TAG, hour, min) */ time, value FROM TAG WHERE name = 'TAG_0001' order by time; time value --------------------------------------------------------------- 2018-01-01 01:00:00 000:000:000 1 2018-01-01 02:00:00 000:000:000 1 2018-01-01 03:00:00 000:000:000 1 [3] row(s) selected. Mach> SELECT /*+ ROLLUP(TAG, hour, max) */ time, value FROM TAG WHERE name = 'TAG_0001' order by time; time value --------------------------------------------------------------- 2018-01-01 01:00:00 000:000:000 6 2018-01-01 02:00:00 000:000:000 6 2018-01-01 03:00:00 000:000:000 6 [3] row(s) selected. Mach> SELECT /*+ ROLLUP(TAG, min, min) */ time, value FROM TAG WHERE name = 'TAG_0001' order by time; time value --------------------------------------------------------------- 2018-01-01 01:00:00 000:000:000 1 2018-01-01 01:01:00 000:000:000 3 2018-01-01 01:02:00 000:000:000 5 2018-01-01 02:00:00 000:000:000 1 2018-01-01 02:01:00 000:000:000 3 2018-01-01 02:02:00 000:000:000 5 2018-01-01 03:00:00 000:000:000 1 2018-01-01 03:01:00 000:000:000 3 2018-01-01 03:02:00 000:000:000 5 [9] row(s) selected. Mach> SELECT /*+ ROLLUP(TAG, min, max) */ time, value FROM TAG WHERE name = 'TAG_0001' order by time; time value --------------------------------------------------------------- 2018-01-01 01:00:00 000:000:000 2 2018-01-01 01:01:00 000:000:000 4 2018-01-01 01:02:00 000:000:000 6 2018-01-01 02:00:00 000:000:000 2 2018-01-01 02:01:00 000:000:000 4 2018-01-01 02:02:00 000:000:000 6 2018-01-01 03:00:00 000:000:000 2 2018-01-01 03:01:00 000:000:000 4 2018-01-01 03:02:00 000:000:000 6 [9] row(s) selected.
ROLLUP 합계/개수 얻기
아래는 합계 및 데이터 개수 값을 얻는 예제이다.
Mach> SELECT /*+ ROLLUP(TAG, min, sum) */ time, value FROM TAG WHERE name = 'TAG_0001' order by time; time value --------------------------------------------------------------- 2018-01-01 01:00:00 000:000:000 3 2018-01-01 01:01:00 000:000:000 7 2018-01-01 01:02:00 000:000:000 11 2018-01-01 02:00:00 000:000:000 3 2018-01-01 02:01:00 000:000:000 7 2018-01-01 02:02:00 000:000:000 11 2018-01-01 03:00:00 000:000:000 3 2018-01-01 03:01:00 000:000:000 7 2018-01-01 03:02:00 000:000:000 11 [9] row(s) selected. Mach> SELECT /*+ ROLLUP(TAG, min, count) */ time, value FROM TAG WHERE name = 'TAG_0001' order by time; time value -------------------------------------------------------- 2018-01-01 01:00:00 000:000:000 2 2018-01-01 01:01:00 000:000:000 2 2018-01-01 01:02:00 000:000:000 2 2018-01-01 02:00:00 000:000:000 2 2018-01-01 02:01:00 000:000:000 2 2018-01-01 02:02:00 000:000:000 2 2018-01-01 03:00:00 000:000:000 2 2018-01-01 03:01:00 000:000:000 2 2018-01-01 03:02:00 000:000:000 2 [9] row(s) selected.
RESTful API를 통한 ROLLUP 추출
문법
아래와 같은 문법을 따라 RESTful API에서 롤업 데이터를 얻을 수 있다.
{MWA URL}/machiot-rest-api/datapoints/calculated/{TagName}/{Start}/{End}/{CalculationMode}/{Count}/{IntervalType}/{IntervalValue}/
TagName |
|
---|---|
Start, End |
|
CalculationMode |
|
Count |
|
IntervalType |
|
IntervalValue |
|
분단위 평균 통계
아래는 TAG_0001의 값에서 1분당 통계 값을 출력하는 예제이다.
Host:~/work/nfx$ curl -G "http://192.168.0.148:5001/machiot-rest-api/v1/datapoints/calculated/TAG_0001/2018-01-01T00:00:00/2018-01-31T00:00:00/avg/0/min" {"ErrorCode": 0, "ErrorMessage": "", "Data": [{"DataType": "DOUBLE", "ErrorCode": 0, "TagName": "TAG_0001", "CalculationMode": "avg", "Samples": [{"TimeStamp": "2018-01-01 01:00:00 000:000:000", "Value": 1.5, "Quality": 0}, {"TimeStamp": "2018-01-01 01:01:00 000:000:000", "Value": 3.5, "Quality": 0}, {"TimeStamp": "2018-01-01 01:02:00 000:000:000", "Value": 5.5, "Quality": 0}, {"TimeStamp": "2018-01-01 02:00:00 000:000:000", "Value": 1.5, "Quality": 0}, {"TimeStamp": "2018-01-01 02:01:00 000:000:000", "Value": 3.5, "Quality": 0}, {"TimeStamp": "2018-01-01 02:02:00 000:000:000", "Value": 5.5, "Quality": 0}, {"TimeStamp": "2018-01-01 03:00:00 000:000:000", "Value": 1.5, "Quality": 0}, {"TimeStamp": "2018-01-01 03:01:00 000:000:000", "Value": 3.5, "Quality": 0}, {"TimeStamp": "2018-01-01 03:02:00 000:000:000", "Value": 5.5, "Quality": 0}]}]}
2분 단위 평균 통계
아래는 위와 유사하지만, 1분이 아닌 2분 통계를 나타낸 것이다.
Host:~/work/nfx$ curl -G "http://192.168.0.148:5001/machiot-rest-api/v1/datapoints/calculated/TAG_0001/2018-01-01T00:00:00/2018-01-31T00:00:00/avg/0/min/2" {"ErrorCode": 0, "ErrorMessage": "", "Data": [{"DataType": "DOUBLE", "ErrorCode": 0, "TagName": "TAG_0001", "CalculationMode": "avg", "Samples": [{"TimeStamp": "2018-01-01 01:00:00 000:000:000", "Value": 2.5, "Quality": 0}, {"TimeStamp": "2018-01-01 01:02:00 000:000:000", "Value": 5.5, "Quality": 0}, {"TimeStamp": "2018-01-01 02:00:00 000:000:000", "Value": 2.5, "Quality": 0}, {"TimeStamp": "2018-01-01 02:02:00 000:000:000", "Value": 5.5, "Quality": 0}, {"TimeStamp": "2018-01-01 03:00:00 000:000:000", "Value": 2.5, "Quality": 0}, {"TimeStamp": "2018-01-01 03:02:00 000:000:000", "Value": 5.5, "Quality": 0}]}]}
위와 같이 사용자는 임의의 태그에 대한 임의의 통계 함수를 임의의 단위로 지정하여, 실시간으로 출력할 수 있다.
Related content
롤업 테이블의 조회 (1)
롤업 테이블의 조회 (1)
More like this
롤업 테이블의 조회 (1)
롤업 테이블의 조회 (1)
More like this
롤업 테이블의 조회
롤업 테이블의 조회
More like this
롤업 테이블의 생성 및 조회
롤업 테이블의 생성 및 조회
More like this
롤업 테이블의 생성 및 조회
롤업 테이블의 생성 및 조회
More like this
데이터 추출
More like this