/
5.7 주요 기능 추가

5.7 주요 기능 추가

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;

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


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

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

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

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()

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()

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초)

INSTR() 함수 지원


이 함수는 입력된 문자열 패턴이, 함께 입력된 문자열에서 몇 번째 문자에 있는지 그 인덱스를 반환하는 함수로서 문자열을 다룰 때 매우 편리한 함수이다.
마크베이스 5.7에서 지원된다.


아래는 간단한 활용예이다.

Mach> CREATE TABLE string_table(c1 VARCHAR(20));
Created successfully.
 
Mach> INSERT INTO string_table VALUES ('abstract');
1 row(s) inserted.
 
Mach> INSERT INTO string_table VALUES ('override');
1 row(s) inserted.
 
Mach> SELECT c1, INSTR(c1, 'act') FROM string_table;
c1                    INSTR(c1, 'act')
------------------------------------------
override              0
abstract              6
[2] row(s) selected.

SHOW STREAMGAP 지원


마크베이스에서 지원하는  STREAM 기능의 동작에서 machsql에서  얼마나 수행이 진행되었는지 파악하기 위한 기능을 제공한다.

즉,  콘솔 환경에서 이 명령어를 입력하면, 현재 수행중인 STREAM 의 현재 동작 상황이 아래와 같이 출력된다.

즉, 이 정보는 현재 수행중인 대상 테이블과 마지막 레코드의 위치 그리고, STREAM이 수행중인 현재 위치와 그 둘 사이에 수행이 얼마나 많이 벌어졌는지를 나타낸다.

또한, 마지막으로 수행된 시간도 함께 출력된다..

Mach> create table base (i1 integer, i2 varchar(10));
Mach> create table aggr (i1 integer, i2 varchar(10));
Mach> exec stream_create(base_trig, 'insert into aggr select sum(i1), i2 from base group by i2 by 1 second');
Mach> exec stream_start(base_trig);
Mach> insert into base values (1, 'aa');
Mach> insert into base values (10, 'bb');
Mach> insert into base values (11, 'bb');
Mach> insert into base values (12, 'aa');

Mach> SHOW STREAMGAP;
SRC_TABLE           SRC_END_RID          STREAM_END_RID       GAP                  LAST_TIME                       
------------------------------------------------------------------------------------------------------------------------
BASE                 4                    4                    0                    2019-10-14 17:25:10 623:081:069 
Mach> 

TAG 테이블에 대한 backup/mount 기능 지원


마크베이스에서 지원하는 backup  및 mount는 5.6 까지는 로그 테이블에 대해서만 지원되었다.

금번 5.7 부터 TAG 테이블에 대해서도 이 기능이 제공되며, 인터페이스는 기존과 동일하다.

더 자세한 내용은 매뉴얼을 참조하면 된다.

# BACKUP
Mach> backup table tag  from to_date('2018-01-11 00:00:00') to  to_date('2018-01-11 00:00:01') into disk = 'backup';

Related content