Tag Table을 위한 VARCHAR 확장 컬럼 지원
마크베이스 5.7에서는 Tag Table에서의 확장 컬럼에서 고정형 데이터 타입 뿐만 아니라, 가변 문자형 데이터 타입인 VARCHAR를 지원한다.
이를 통해서 사용자는 각종 장비로부터 발생하는 숫자 뿐만 아니라, 비정형 텍스트 데이터를 마크베이스의 Tag Table에 저장할 수 있게 되었다.
이 기능은 아래와 같이 간단하게 정의하고, 활용할 수 있다.
Mach> create tagdata table TAG (name varchar(20) primary key, time datetime basetime, value double summarized, myname varchar(100)) ; Mach> insert into tag values('tag-1', now, 10, 'machbase text 1'); Mach> insert into tag values('tag-2', now, 10, 'machbase text 2'); Mach> select * from tag; NAME TIME VALUE MYNAME -------------------------------------------------------------------------------------------- tag-1 2019-10-14 16:35:22 651:844:920 10 machbase text 1 tag-2 2019-10-14 16:35:27 410:483:409 10 machbase text 2
힌트 없이 Rollup 테이블 조회 가능
마크베이스는 아래와 같은 힌트를 통한 Rollup 테이블을 통해 Tag 테이블에 대한 실시간 통계 정보를 얻을 수 있도록 되어 있다.
SELECT /*+ ROLLUP(TAG, SEC, SUM) */ time, value FROM TAG WHERE ...;
그러나, 매 질의문마다 힌트 구문을 지정하는 것은 꽤나 귀찮고, 성가신 일이기 때문에 직접 Rollup의 데이터를 접근할 수 있는 문법을 5.7 부터 제공한다.
그 문법은 아래와 같다.
SELECT [TIME 컬럼] ROLLUP [기준 시간값] [기준 시간 유닛], [통계 함수] FROM TAG WHERE ...;
즉, 지정된 ROLLUP을 타입 컬럼에 대해 편리하게 임의의 시간값과 유닛을 통헤 실시간 통계 값을 얻을 수 있게 된 것이다.
아래는 이를 활용한 다양한 사용예이며, 더 자세한 내용은 이곳을 참조하면 된다.
SELECT time rollup 3 sec mtime, avg(value) FROM TAG GROUP BY time rollup 3 sec mtime; -- 또는 SELECT time rollup 3 sec mtime, avg(value) FROM TAG GROUP BY mtime; # 평균값 얻기 SELECT time rollup 1 sec mtime, avg(value) FROM TAG WHERE name = 'TAG_0001' group by mtime order by mtime; # 최대, 최소값 얻기 SELECT time rollup 1 hour mtime, min(value), max(value) FROM TAG WHERE name = 'TAG_0001' group by mtime order by mtime;