Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Table of Contents

Tag Table을 위한 VARCHAR 확장  컬럼 지원


마크베이스 5.7에서는 Tag Table에서의 확장 컬럼에서 고정형 데이터 타입 뿐만 아니라, 가변 문자형 데이터 타입인 VARCHAR를 지원한다.

이를 통해서 사용자는 각종 장비로부터 발생하는 숫자 뿐만 아니라, 비정형 텍스트 데이터를 마크베이스의 Tag Table에 저장할 수 있게 되었다.

이 기능은 아래와 같이 간단하게 정의하고, 활용할 수 있다.

Code Block
sql
sql
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 테이블에 대한 실시간  통계 정보를 얻을 수 있도록 되어 있다.

Code Block
sql
sql
SELECT /*+ ROLLUP(TAG, SEC, SUM) */ time, value 
FROM   TAG
WHERE  ...;

그러나, 매 질의문마다 힌트 구문을 지정하는 것은 꽤나 귀찮고, 성가신 일이기 때문에 직접 Rollup의 데이터를 접근할 수 있는 문법을 5.7 부터 제공한다.

그 문법은 아래와 같다.

Code Block
sql
sql
SELECT [TIME 컬럼] ROLLUP [기준 시간값] [기준 시간 유닛], [통계 함수]  FROM TAG WHERE ...;

즉, 지정된 ROLLUP을 타입 컬럼에 대해 편리하게 임의의 시간값과 유닛을 통헤 실시간 통계 값을 얻을 수 있게 된 것이다.

아래는 이를 활용한 다양한 사용예이며, 더 자세한 내용은 이곳을 참조하면 된다.

Code Block
sql
sql
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;

TO_CHAR() 를 위한  정수형/부동소수형 포맷 지원


입력된 임의의 부동소수형 타입에 대해 원하는 형태의 문자열로 변환하는 기능을 추가하였다.

또한, 정수형의 경우에도 특정 자릿수(예를 들면 3)마다 쉼표를 넣어서 출력할 수 있는 기능도 함께 제공한다.

아래는 이를 활용한 다양한 사용예이며, 더 자세한 내용은 이곳을 참조하면 된다. (5.5.6에서도 제공된다)

Code Block
sql
sql
Mach> create table float_table (i1 float, i2 double);
Created successfully.
 
Mach> insert into float_table values (1.23456789, 1234.5678901234567890);
1 row(s) inserted.
 
Mach> select TO_CHAR(i1, 'f8'), TO_CHAR(i2, 'N9') from float_table;
TO_CHAR(i1, 'f8')       TO_CHAR(i2, 'N9')
--------------------------------------------------------------
1.23456788              1,234.567890123
[1] row(s) selected.

나노초 지원되는 TO_TIMESTAMP(), FROM_TIMESTAMP() 함수 지원


기존에 제공되던 UNIX_TIMESTAMP(), FROM_UNIXTIME() 함수는 그 해상도가 초단위이고, 더 세밀한 단위의 시간 데이터를 활용할 수 없었다.

이를 위해서 나노가 지원되는 두 함수를 5.7 부터 제공하기 시작했다.

활용 예는 다음과 같다.

FROM_TIMESTAMP()

Code Block
sql
sql
Mach> select sysdate, from_timestamp(sysdate) from test_tbl;
sysdate                         from_timestamp(sysdate)
-------------------------------------------------------------------
2019-07-05 14:00:59 722:822:443 2019-07-05 14:00:59 722:822:443
[1] row(s) selected.
 
Mach> select sysdate, from_timestamp(sysdate-1000000) from test_tbl;
sysdate                         from_timestamp(sysdate-1000000)
-------------------------------------------------------------------
2019-07-05 14:01:05 130:939:525 2019-07-05 14:01:05 129:939:525      -- 1 ms (1,000,000 ns) 차이가 발생함
[1] row(s) selected.

TO_TIMESTAMP()

Code Block
sql
sql
Mach> create table datetime_tbl (c1 datetime);
Created successfully.
 
Mach> insert into datetime_tbl values ('2010-01-01 10:10:10');
1 row(s) inserted.
 
Mach> select to_timestamp(c1) from datetime_tbl;
to_timestamp(c1)
-----------------------
1262308210000000000
[1] row(s) selected.


DATE_TRUNC() 함수에서 ms, us, ns 단위 지원


기존 DATE_TRUNC() 함수에서는 초단위까지 연산을 제공하였으나, 5.7 부터는 하위 세부 단위까지 지원가능하도록 기능이 확장되었다.

확장된 단위는 다음과 같다.

시간 단위 (축약어)시간 범위
nanosecond (nsec)1000000000 (1초)
microsecond (usec)60000000 (60초)
milisecond (msec)60000 (60초)