마크베이스 사용방법


마크베이스 5.0 : Tutorial 1 (Quick Start)

작성자
machbase
작성일
2018-08-17 12:28
조회
156

마크베이스 5.0 센서데이터 Quick Start


개요


이 문서에서는 실제 마크베이스 5.0에 대해 센서 데이터를 로딩하고, Tag Analyzer를 통해 데이터를 확인하는 가장 간단하고 빠른 예제를 실습해 보도록한다.


이 문서에 필요한 모든 데이터와 자료는 마크베이스 공식 github (https://github.com/MACHBASE)를 통해 받을 수 있다.


환경 설정


기본적으로 리눅스 운영체제 기반의 마크베이스 5.0 이상이 설치되어야 하고, 설치에 관련된 부가 정보가 필요한 경우에는 해당 블로그를 참조하도록 한다.


우선 마크베이스와 MWA 를 아래와 같이 데이터베이스를 생성하고 프로세스를 모두 구동시킨다.


Host:~$ machadmin -c
-----------------------------------------------------------------
Machbase Administration Tool
Release Version - 5.0.2.community
Copyright 2014, MACHBASE Corp. or its subsidiaries
All Rights Reserved
-----------------------------------------------------------------
Database created successfully.
sjkim2@andrew-Precision-T1700:~$ machadmin -u
-----------------------------------------------------------------
Machbase Administration Tool
Release Version - 5.0.2.community
Copyright 2014, MACHBASE Corp. or its subsidiaries
All Rights Reserved
-----------------------------------------------------------------
Waiting for Machbase server start.
Machbase server started successfully.
Host:~$ MWAserver start
SERVER STARTED, PID : 26385
Connection URL : http://192.168.0.148:5001
Host:~$

Github에서 데이터 받기


아래의 사이트에서 해당 소스를 받도록 하자. 데이터 파일이 꽤 커서 시간이 조금 걸린다.


Host:~/work$ git clone https://www.github.com/MACHBASE/TagTutorial.git MyTutorial
'MyTutorial'에 복제합니다...
warning: https://github.com/MACHBASE/TagTutorial.git/(으)로 리다이렉트
remote: Counting objects: 22, done.
remote: Compressing objects: 100% (17/17), done.
remote: Total 22 (delta 2), reused 19 (delta 2), pack-reused 0
오브젝트 묶음 푸는 중: 100% (22/22), 완료.
Host:~/work$

 


디렉토리 확인


성공적으로 받았다면 다음과 같이 디렉토리가 보일 것이다.


Host:~/work$ cd MyTutorial/
Host:~/work/MyTutorial$ ls -al
합계 28
drwxrwxr-x 6 sjkim2 sjkim2 4096 8월 14 18:35 .
drwxr-xr-x 10 sjkim2 sjkim2 4096 8월 14 18:34 ..
drwxrwxr-x 8 sjkim2 sjkim2 4096 8월 14 18:35 .git
-rw-rw-r-- 1 sjkim2 sjkim2 13 8월 14 18:35 README.md
drwxrwxr-x 2 sjkim2 sjkim2 4096 8월 14 18:35 edu_1_basic
drwxrwxr-x 2 sjkim2 sjkim2 4096 8월 14 18:35 edu_2_plc
drwxrwxr-x 2 sjkim2 sjkim2 4096 8월 14 18:35 edu_3_plc_stream
Host:~/work/MyTutorial$
Host:~/work/MyTutorial$ gunzip ./*/*.gz
Host:~/work/MyTutorial$

위와 같이 모든 압축파일을 풀어서 테스트 준비를 완료하도록 한다.


첫번째 튜토리얼 수행하기


테스트 디렉토리 확인


첫 번째 디렉토리인 edu_1_basic 에는 마크베이스에서 지원하는 Tag Table  과 Rollup Table 및 Tag Analyzer를 가장 빨리 테스트해 볼 수 있는 최소한의 테스트 셋이 들어가 있다.


파일의 앞부분에 숫자가 적힌 것은 그 순서대로 수행하면, 결과가 나온다는 뜻이다.


Host:~/work/MyTutorial$ cd edu_1_basic/
Host:~/work/MyTutorial/edu_1_basic$ ls -al
합계 407276
drwxrwxr-x 2 sjkim2 sjkim2 4096 8월 14 18:37 .
drwxrwxr-x 6 sjkim2 sjkim2 4096 8월 14 18:35 ..
-rw-rw-r-- 1 sjkim2 sjkim2 107 8월 14 18:35 1_create_tag.sql
-rw-rw-r-- 1 sjkim2 sjkim2 92 8월 14 18:35 2_insert_meta.sql
-rw-rw-r-- 1 sjkim2 sjkim2 208509589 8월 14 18:35 3_MTAG_C00.csv
-rw-rw-r-- 1 sjkim2 sjkim2 208510104 8월 14 18:35 3_MTAG_C01.csv
-rw-rw-r-- 1 sjkim2 sjkim2 184 8월 14 18:35 3_load.sh
Host:~/work/MyTutorial/edu_1_basic$

Tag 테이블 생성


생성 SQL


Tag 테이블 (이름  TAG)을 사용하기 위해서는 이 테이블을 생성해야 한다. 아래의 스크립트 1_create_tag.sql 를 수행하면 생성 된다.


create tagdata table tag (name varchar(32) primary key, time datetime basetime, value double summarized);

수행 결과는 다음과 같다.


Mach> select count(*) from tag;
[ERR-02025 : Table TAG does not exist.]
Mach> create tagdata table tag (name varchar(32) primary key, time datetime basetime, value double summarized);
Executed successfully.
Elapsed time: 3.085
Mach> select count(*) from tag;
count(*)
-----------------------
0
[1] row(s) selected.
Elapsed time: 0.001
Mach>

TAG 라는 테이블이 생성되었다.


내부 테이블 확인


TAG 테이블은 가상 테이블로서 내부적으로 많은 일들이 일어난다.
특히 Tag Meta 데이터를 저장하는 테이블도 생성되며, 자동으로 통계 자료를 만들어주는 Rollup 테이블도 생성된다.


정말로 생성되었는지, show tables 명령어를 통해 확인해 보도록 하자.


Mach> show tables;
NAME TYPE
----------------------------------------------
TAG TAGDATA # 태그 테이블 생성
_TAG_DATA_0 KEYVALUE # 내부 태그 데이터 저장소
_TAG_DATA_1 KEYVALUE # 내부 태그 데이터 저장소
_TAG_DATA_2 KEYVALUE # 내부 태그 데이터 저장소
_TAG_DATA_3 KEYVALUE # 내부 태그 데이터 저장소
_TAG_META LOOKUP # 태그 메타 데이터 저장소
_TAG_ROLLUP_HOUR_0 LOG # 시간 단위 통계를 위한 Rollup 테이블
_TAG_ROLLUP_HOUR_1 LOG # 시간 단위 통계를 위한 Rollup 테이블
_TAG_ROLLUP_HOUR_2 LOG # 시간 단위 통계를 위한 Rollup 테이블
_TAG_ROLLUP_HOUR_3 LOG # 시간 단위 통계를 위한 Rollup 테이블
_TAG_ROLLUP_MIN_0 LOG # 분 단위 통계를 위한 Rollup 테이블
_TAG_ROLLUP_MIN_1 LOG # 분 단위 통계를 위한 Rollup 테이블
_TAG_ROLLUP_MIN_2 LOG # 분 단위 통계를 위한 Rollup 테이블
_TAG_ROLLUP_MIN_3 LOG # 분 단위 통계를 위한 Rollup 테이블
_TAG_ROLLUP_SEC_0 LOG # 초 단위 통계를 위한 Rollup 테이블
_TAG_ROLLUP_SEC_1 LOG # 초 단위 통계를 위한 Rollup 테이블
_TAG_ROLLUP_SEC_2 LOG # 초 단위 통계를 위한 Rollup 테이블
_TAG_ROLLUP_SEC_3 LOG # 초 단위 통계를 위한 Rollup 테이블
[18] row(s) selected.
Elapsed time: 0.001
Mach>

이렇게  Tag을 테이블을 생성하면 다수의 테이블이 생성되어 Tag 데이터 분석을 위한 기반 준비가 완료된다.


만일 모든 것을 삭제하고 싶다면 DROP TABLE TAG; 를 통해 모든 자료를 삭제할 수 있다. 
(경고 메시지가 없으므로 주의하자!)


태그 메타 데이터 등록


태그 메타란 센서의 이름과 부가 정보를 등록하는 과정이다.


이 과정이 필요한 이유는 사용자가 각자의 센서를 관리하게 되는데, 그 센서의 고유한 이름과 정보를 기록함으로써 수많은 Tag 데이터에 대한 보다 쉽고 편리하게 사용할 수 있도록 하기 위함이다.


내부적으로는 각 센서가 고유한 숫자 값을 가지게 되며, 이 값이 지정한 이름과 1:1 맵핑이 된다.


마크베이스는 insert 구문을 통해 해당 태그 메타 정보를 입력하도록 지원하며, 예제는 화일 2_insert_meta.sql 에 나와 있다.


insert into tag metadata values ('MTAG_C00');
insert into tag metadata values ('MTAG_C01');

이 insert 질의가 수행되면, MTAG_C00이라는 이름과 내부 숫자가 맵핑되고, 사용자는 이 이름으로 해당 Tag를 관리할 수 있게 된다.


수행 결과는 다음과 같다.


Mach> insert into tag metadata values ('MTAG_C00');
1 row(s) inserted.
Elapsed time: 0.001
Mach> insert into tag metadata values ('MTAG_C01');
1 row(s) inserted.
Elapsed time: 0.000

실제로 태그 메타 테이블의 내부를 살펴보자.


Mach> select * from _TAG_META;
ID NAME
----------------------------------------------------------
1 MTAG_C00
2 MTAG_C01
[2] row(s) selected.
Elapsed time: 0.001
Mach>

주의할 점은 절대로 _TAG_META 테이블에 대한 직접적인 Insert 혹은 Update를 하면 안 된다는 것이다.


그 이유는 태그 메타 정보는 마크베이스의 내부 시스템에 의해서 아이디와 부가 정보가 관리되기 때문이다.


그래서 입력 시에도 insert into tag metadata values(...)라는 특별한 구문을 사용하는 것이며, 굳이 조작을 하는 경우에는 매우 조심해서 내부 ID 정보와 실제 이름 정보가 틀려지지 않도록 조심해야 한다.


Tag 테이블 속성 테스트 


이제 데이터 입력을 위한 모든 준비 작업이 끝났다.


마크베이스에는 이렇게 등록된 두 개의 TAG 데이터를 받아들일 준비가 된 것이다.


실제로 TAG 테이블에 데이터가 있는지 살펴보자.


Mach> select * from TAG;
[ERR-02265 : Reading TAGDATA table without primary key condition is not allowed.]

위와 같이 조건절 없이 TAG에 대한 직접적인 접근은 허용되지 않는다.


그 이유는 아래와 같이 TAG의 이름 칼럼 (NAME)을 지정해야 해당 TAG의 데이터가 연속적으로 출력될 수 있기 때문이다.


일반적인 DBMS처럼 TAG 간의 데이터가 서로 교차되거나, 엮일 경우에는 원래의 의도와 맞지 않기 때문에 반드시 해당 Tag 명을 적도록 강제하였다.


그러나 사용상의 편의를 위해 조건절 없는 몇 가지 경우는 예외적으로 허용된다.



  • 전체 Tag 레코드의 개수를 얻는 경우

  • 최소, 최대 시간을 얻는 경우


Mach> desc tag;
[ COLUMN ]
----------------------------------------------------------------
NAME TYPE LENGTH
----------------------------------------------------------------
NAME varchar 32
TIME datetime 31
VALUE double 17

Mach> select count(*) from tag; # 전체 0건이 입력되었다.
count(*)
-----------------------
0
[1] row(s) selected.

Mach> select min(time), max(time) from tag; # 아직 입력된 레코드가 없으므로 NULL로 출력
min(time) max(time)
-------------------------------------------------------------------
NULL NULL
[1] row(s) selected.

직접 이름을 지정하여, Tag 데이터를 얻어보자.

Mach> select * from tag where name = 'MTAG_C00';
NAME TIME VALUE
--------------------------------------------------------------------------------------------------
[0] row(s) selected.
Elapsed time: 0.001
Mach> select * from tag where name = 'MTAG_C01';
NAME TIME VALUE
--------------------------------------------------------------------------------------------------
[0] row(s) selected.
Elapsed time: 0.001
Mach>

Tag 테이블 데이터 로딩


이제 실제 Tag 데이터를 로딩하여 데이터를 확인할 차례이다.


준비된 200M 짜리 CSV 두개의 데이터 파일을 살펴보면 다음과 같다.


파일명 3_MTAG_C00.csv 3_MTAG_C01.csv
레코드 개수 4178504 건 4178504 건
데이터 종류 실수형 압력 센서 데이터 실수형 압력 센서 데이터
수집 형태 매초 1m second 간격으로 100회 센싱 매초 1m second 간격으로 100회 센싱
데이터 패턴
MTAG_C00, 2009-01-28 07:03:34 0:000:000, -41.98

MTAG_C00, 2009-01-28 07:03:34 1:000:000, -46.50

MTAG_C00, 2009-01-28 07:03:34 2:000:000, -36.16

MTAG_C00, 2009-01-28 07:03:34 3:000:000, -50.36

MTAG_C00, 2009-01-28 07:03:34 4:000:000, -37.30

MTAG_C00, 2009-01-28 07:03:34 5:000:000, -48.43

MTAG_C00, 2009-01-28 07:03:34 6:000:000, -46.17

MTAG_C00, 2009-01-28 07:03:34 7:000:000, -42.78

MTAG_C00, 2009-01-28 07:03:34 8:000:000, -40.85

MTAG_C00, 2009-01-28 07:03:34 9:000:000, -55.68

MTAG_C00, 2009-01-28 07:03:34 10:000:000, -45.20

.....

MTAG_C01, 2009-01-28 07:03:34 0:000:000, 2067.64

MTAG_C01, 2009-01-28 07:03:34 1:000:000, 2067.88

MTAG_C01, 2009-01-28 07:03:34 2:000:000, 2055.81

MTAG_C01, 2009-01-28 07:03:34 3:000:000, 2053.68

MTAG_C01, 2009-01-28 07:03:34 4:000:000, 2081.17

MTAG_C01, 2009-01-28 07:03:34 5:000:000, 2058.64

MTAG_C01, 2009-01-28 07:03:34 6:000:000, 2065.99

MTAG_C01, 2009-01-28 07:03:34 7:000:000, 2067.64

MTAG_C01, 2009-01-28 07:03:34 8:000:000, 2061.72

MTAG_C01, 2009-01-28 07:03:34 9:000:000, 2079.51

MTAG_C01, 2009-01-28 07:03:34 10:000:000, 2064.56

.....

데이터 시작 시간 2009-01-28 07:03:34 0:000:000 2009-01-28 07:03:34 0:000:000
데이타 완료 시간 2009-01-28 18:40:04 19:000:000 2009-01-28 18:40:04 19:000:000

이 데이터는 위의 약 12시간 동안의 센서 데이터를 모아 놓은 것이다.


특징은 매초 센서가 한 번씩 동작하는데, 1 밀리 세컨드 단위로 100번 데이터를 입력하고 다음 초까지 대기하는 패턴을 나타낸다.


그럼 데이터를 로딩해 보는데 CSV를 빨리 로딩할 수 있는 마크베이스 로딩 도구인 csvimport 를 통해서 데이터를 입력한다.


해당 스크립트는 다음과 같다.


csvimport -t TAG -d 3_MTAG_C00.csv -F "time YYYY-MM-DD HH24:MI:SS mmm:uuu:nnn" -l error.log
csvimport -t TAG -d 3_MTAG_C01.csv -F "time YYYY-MM-DD HH24:MI:SS mmm:uuu:nnn" -l error.log

실행 결과는 다음과 같다.


Host:~/work/MyTutorial/edu_1_basic$ sh 3_load.sh 
-----------------------------------------------------------------
Machbase Data Import/Export Utility.
Release Version 5.0.2.community
Copyright 2014, MACHBASE Corporation or its subsidiaries.
All Rights Reserved.
-----------------------------------------------------------------
NLS : US7ASCII EXECUTE MODE : IMPORT
TARGET TABLE : TAG DATA FILE : 3_MTAG_C00.csv
LOG FILE : error.log IMPORT_MODE : APPEND
FILED TERM : , ROW TERM :

ENCLOSURE : " ESCAPE : "
ARRIVAL_TIME : FALSE ENCODING : NONE
HEADER : FALSE CREATE TABLE : FALSE
Progress bar Imported records Error records
4178504 0
Import time : 0 hour 0 min 9.831 sec
Load success count : 4178504
Load fail count : 0
-----------------------------------------------------------------
Machbase Data Import/Export Utility.
Release Version 5.0.2.community
Copyright 2014, MACHBASE Corporation or its subsidiaries.
All Rights Reserved.
-----------------------------------------------------------------
NLS : US7ASCII EXECUTE MODE : IMPORT
TARGET TABLE : TAG DATA FILE : 3_MTAG_C01.csv
LOG FILE : error.log IMPORT_MODE : APPEND
FILED TERM : , ROW TERM :

ENCLOSURE : " ESCAPE : "
ARRIVAL_TIME : FALSE ENCODING : NONE
HEADER : FALSE CREATE TABLE : FALSE
Progress bar Imported records Error records
4178504 0
Import time : 0 hour 0 min 10.58 sec
Load success count : 4178504
Load fail count : 0
Host:~/work/MyTutorial/edu_1_basic$

Tag 테이블 확인


전체 정보 확인


이제 데이터를 입력하였으니 잘 동작하는지 콘솔로 Tag 테이블  확인해 보도록 한다.


Mach> select count(*) from TAG;
count(*)
-----------------------
8357008 <====== 입력된 태그 레코드 건수
[1] row(s) selected.
Elapsed time: 0.000
Mach> select min(time), max(time) from TAG;
min(time) max(time)
-------------------------------------------------------------------
2009-01-28 07:03:34 000:000:000 2009-01-28 18:40:04 019:000:000 <== 최소, 최대 시간 범위
[1] row(s) selected.
Elapsed time: 0.007
Mach>

MTAG_C00 데이터 확인


실제 이 태그에 데이터가 있는지 확인해 보자.


Mach> select count(*) from TAG where name = 'MTAG_C00';
count(*)
-----------------------
4178504
[1] row(s) selected.
Elapsed time: 1.128
Mach> select * from TAG where name = 'MTAG_C00' limit 10;
NAME TIME VALUE
--------------------------------------------------------------------------------------------------
MTAG_C00 2009-01-28 07:03:34 000:000:000 -41.98
MTAG_C00 2009-01-28 07:03:34 001:000:000 -46.5
MTAG_C00 2009-01-28 07:03:34 002:000:000 -36.16
MTAG_C00 2009-01-28 07:03:34 003:000:000 -50.36
MTAG_C00 2009-01-28 07:03:34 004:000:000 -37.3
MTAG_C00 2009-01-28 07:03:34 005:000:000 -48.43
MTAG_C00 2009-01-28 07:03:34 006:000:000 -46.17
MTAG_C00 2009-01-28 07:03:34 007:000:000 -42.78
MTAG_C00 2009-01-28 07:03:34 008:000:000 -40.85
MTAG_C00 2009-01-28 07:03:34 009:000:000 -55.68
[10] row(s) selected.
Elapsed time: 0.029

위와 같이 데이터가 들어가 있는 것을 확인할 수 있다. 


MTAG_C01도 마찬가지이니 확인은 생략한다.


시간 범위 검색


마크베이스의 가장 큰 특징인 이 태그 테이블에 대한 시간 범위 검색을 해 보도록 한다.


그럼 그날 12시에서 13시 까지의 데이터 일부를 검색해 보자.


Mach> select count(*) from TAG where name = 'MTAG_C00' and TIME between TO_DATE('2009-01-28 12:00:00') and TO_DATE('2009-01-28 13:00:00') limit 10;
count(*)
-----------------------
360005
[1] row(s) selected.
Elapsed time: 0.106
Mach> select * from TAG where name = 'MTAG_C00' and TIME between TO_DATE('2009-01-28 12:00:00') and TO_DATE('2009-01-28 13:00:00') limit 10;
NAME TIME VALUE
--------------------------------------------------------------------------------------------------
MTAG_C00 2009-01-28 12:00:00 000:000:000 2636.77
MTAG_C00 2009-01-28 12:00:00 001:000:000 2634.44
MTAG_C00 2009-01-28 12:00:00 002:000:000 2627.94
MTAG_C00 2009-01-28 12:00:00 003:000:000 2624.83
MTAG_C00 2009-01-28 12:00:00 004:000:000 2627.68
MTAG_C00 2009-01-28 12:00:00 005:000:000 2626.39
MTAG_C00 2009-01-28 12:00:00 006:000:000 2633.4
MTAG_C00 2009-01-28 12:00:00 007:000:000 2630.28
MTAG_C00 2009-01-28 12:00:00 008:000:000 2630.8
MTAG_C00 2009-01-28 12:00:00 009:000:000 2634.7
[10] row(s) selected.
Elapsed time: 0.032

Tag Analyzer를 통한 데이터 시각화


이렇게 입력된 데이터는 내부적으로 Rollup Table이 생성되며 MWA의 Tag Analyzer 메뉴를 통해서 확인할 수 있다.


웹을 통해 포트 5001로 접속하면, (admin/machbase) 다음과 같은 차트를 보고 또 만들 수 있다.




 


이상으로 간단하게 Tag 데이터를 로딩하고 그려보았다.


마크베이스의 센서 데이터 처리에 대한 개념과 방법을 잘 이해하고 적극 활용하기를 바란다.


 


http://www.machbase.com/download


Contact the Machbase team with your questions!
info@machbase.com

전체 24
번호 제목 작성자 작성일 추천 조회
24
마크베이스 V5 : Tutorial 6 (RestAPI with curl)
machbase | 2018.09.18 | 추천 0 | 조회 51
machbase 2018.09.18 0 51
23
마크베이스(Machbase) Tag Analyzer 사용법
machbase | 2018.08.27 | 추천 1 | 조회 114
machbase 2018.08.27 1 114
22
마크베이스 5.0 : Tutorial 4 (실제 데이터를 통한 Tag Analyzer 기초 활용)
machbase | 2018.08.27 | 추천 1 | 조회 89
machbase 2018.08.27 1 89
21
마크베이스 5.0 : Tutorial 5 (Tag Table with RestAPI)
machbase | 2018.08.24 | 추천 0 | 조회 100
machbase 2018.08.24 0 100
20
Machbase 5.0 : 센서데이터 홍수의 유일한 해결책
machbase | 2018.08.21 | 추천 1 | 조회 213
machbase 2018.08.21 1 213
19
마크베이스 5.0 : Tutorial 3 (Real Time Stream Insert : Many Sensors)
machbase | 2018.08.20 | 추천 0 | 조회 91
machbase 2018.08.20 0 91
18
마크베이스 5.0 : Tutorial 2 (Batch Loading : Many Sensors)
machbase | 2018.08.17 | 추천 0 | 조회 75
machbase 2018.08.17 0 75
17
마크베이스 5.0 : Tutorial 1 (Quick Start)
machbase | 2018.08.17 | 추천 0 | 조회 156
machbase 2018.08.17 0 156
16
마크베이스 5.0
machbase | 2018.08.16 | 추천 0 | 조회 246
machbase 2018.08.16 0 246
15
Machbase 5.0 TAG Table 사용법
machbase | 2018.08.10 | 추천 1 | 조회 149
machbase 2018.08.10 1 149