Posting

Machbase의 최신 소식을 지금 만나보세요

[MACHBASE 기초] TAG TABLE 02 – BATCH

1. 개요

이번 포스트에서는 다수의 센서 데이터를 한꺼번에 배치(Batch)형태로 로딩해 보고, Tag Analyzer로 확인하는 것으로 마무리 하겠습니다. 참고로 실습에 사용되는 데이터는 PLC 데이터와 같이 가로로 길게 늘어나 있는 형태입니다.

2. 환경구축

2-1. 디렉토리 확인

사용할 모든 데이터는 [edu_2_pc]에 저장되어 있습니다. 이전 포스트에서 사용했던 데이터 보다 크기가 더 큰 것을 확인하실 수 있습니다.  

Host:~/work/MyTutorial$ cd edu_2_plc
Host:~/work/MyTutorial/edu_2_plc$ ls -al
합계 363700
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 # Tag 테이블 생성
-rw-rw-r-- 1 sjkim2 sjkim2 32 8월 14 18:35 2_load_meta.sh # Tag Meta 로딩
-rw-rw-r-- 1 sjkim2 sjkim2 162 8월 14 18:35 2_tag_meta.csv # Tag Meta 의 실제 데이터
-rw-rw-r-- 1 sjkim2 sjkim2 263 8월 14 18:35 3_create_plc_tag_table.sql # PLC 구조를 로딩할 Log Table 생성
-rw-rw-r-- 1 sjkim2 sjkim2 372389876 8월 14 18:35 4_plc_tag.csv # 실제 센서 데이터
-rw-rw-r-- 1 sjkim2 sjkim2 96 8월 14 18:35 4_plc_tag_load.sh # 로딩된 센서 데이터를 Tag Table로 옮기는 스크립트
-rw-rw-r-- 1 sjkim2 sjkim2 1123 8월 14 18:35 5_plc_to_tag.sql # 로딩된 센서 데이터를 Tag Table로 옮기는 SQL

2-2. 태그 테이블 생성

태그 테이블을 사용하기 위해 가장 먼저 CREATE TAGDATA TABLE TAG 구문으로 태그 테이블과 메타 데이터를 생성해 줘야 합니다. 아래의 명령어는 1_create_tag.sql에 저장되어 있습니다.

# 태그 테이블 생성
Mach> create tagdata table tag (name varchar(32) primary key, time datetime basetime, value double summarized);
Executed successfully.
Elapsed time: 2.947

태그 테이블을 생성했으니, 태그 메타 정보를 입력해야 합니다. 예제에서는 사용되는 17개의 태그 메타 정보는 2_tag_meta.csv 파일에 저장되어 있습니다.

# 태그 메타 CSV 파일 확인
Host:~/work/MyTutorial/edu_2_plc$ cat 2_tag_meta.csv
MTAG_V00
MTAG_V01
MTAG_C00
MTAG_C01
MTAG_C02
MTAG_C03
MTAG_C04
MTAG_C05
MTAG_C06
MTAG_C07
MTAG_C08
MTAG_C09
MTAG_C10
MTAG_C11
MTAG_C12
MTAG_C13
MTAG_C14
MTAG_C15
Host:~/work/MyTutorial/edu_2_plc$

이번에는insert into 구문이 아니라, tagmetaimport 라는 도구를 이용해서 한꺼번에 로딩해 보겠습니다. 로딩을 편하게 하기 위해서 주로 태그 메타 정보는 주로 CSV 형태로 관리하는 경우가 많기 때문에, tagmetaimport는 매우 유용하게 사용될 수 있습니다. 

# 태그 메타 로딩
Host:~/work/MyTutorial/edu_2_plc$ tagmetaimport -d 2_tag_meta.csv
Import time : 0 hour 0 min 0.05 sec
Load success count : 18
Load fail count : 0

성공적으로 태그 메타 정보(이름) 18개가 성공적으로 로딩되었는지 확인해 주세요.

# 태그 메타 로딩 여부 확인
Mach> select * from _tag_meta;
_ID                  NAME
----------------------------------------------------------
1                    MTAG_V00
2                    MTAG_V01
3                    MTAG_C00
4                    MTAG_C01
5                    MTAG_C02
6                    MTAG_C03
7                    MTAG_C04
8                    MTAG_C05
9                    MTAG_C06
10                   MTAG_C07
11                   MTAG_C08
12                   MTAG_C09
13                   MTAG_C10
14                   MTAG_C11
15                   MTAG_C12
16                   MTAG_C13
17                   MTAG_C14
18                   MTAG_C15
[18] row(s) selected.
Elapsed time: 0.001

2-3. PLC 데이터를 위한 로그 테이블

3_create_plc_tag_table.sql에는 로그 테이블을 생성하는 명령어가 저장되어 있습니다. 실행하면 아래와 동일한 결과를 얻을 수 있습니다.

Mach> create table plc_tag_table(
tm datetime,
V0 DOUBLE ,
V1 DOUBLE ,
C0 DOUBLE ,
C1 DOUBLE ,
C2 DOUBLE ,
C3 DOUBLE ,
C4 DOUBLE ,
C5 DOUBLE,
C6 DOUBLE ,
C7 DOUBLE ,
C8 DOUBLE ,
C9 DOUBLE ,
C10 DOUBLE ,
C11 DOUBLE ,
C12 DOUBLE ,
C13 DOUBLE ,
C14 DOUBLE ,
C15 DOUBLE
);
Created successfully.
Elapsed time: 0.045

2-4. 데이터 로딩

먼저 입력할 데이터의 모습을 확인해 봅시다. 데이터는 4_plc_tag.csv에 저장되어 있는데, 아래와 같은 PLC데이터의 형태입니다. 처음 칼럼에 시간이 나오고, 순서대로 V0, V1, …C15까지 칼럼이 나뉘어져 있는 모습입니다. 실습에 사용되는 데이터는 1초에 0~99 mili second 까지 약 100개의 데이터가 입력되고, 100 mili second에서 999까지는 입력이 없다가 다음 1초동안 동일한 패턴으로 수집한 데이터입니다.

2009-01-28 07:03:34 0:000:000, 0.00, 0.00, -41.98, 2067.64, -37.13, 2.28, 8.63, -26.62, -8.46, -0.33, 3437.73, 2728.14, 4054.03, 4007.89, 4478.27, 5056.98, 3639.09, 3128.49
2009-01-28 07:03:34 1:000:000, 0.00, 0.00, -46.50, 2067.88, -28.56, 13.69, -12.35, -25.81, -5.04, -5.04, 3432.44, 2734.47, 4038.62, 4019.40, 4496.72, 5051.81, 3636.97, 3115.03
2009-01-28 07:03:34 2:000:000, 0.00, 0.00, -36.16, 2055.81, -10.89, 8.63, -2.93, -30.34, -9.27, -2.12, 3438.61, 2719.97, 4030.92, 4025.48, 4489.54, 5057.35, 3641.81, 3105.24
2009-01-28 07:03:34 3:000:000, 0.00, 0.00, -50.36, 2053.68, -31.96, -0.65, -8.29, -21.60, 7.98, 2.28, 3429.51, 2720.50, 4040.22, 4000.87, 4485.44, 5049.60, 3642.72, 3124.84
....................... 생략 ...
2009-01-28 12:36:58 17:000:000, 233.33, 0.00, 2258.82, 1792.25, 1373.99, 1552.78, 2295.62, 3307.05, 1756.83, 2178.15, 3387.37, 2709.18, 1077.86, 1049.76, 2294.15, 2273.27, 1357.59, 1194.32
2009-01-28 12:36:58 18:000:000, 233.33, 0.00, 2260.54, 1803.35, 1377.15, 1571.28, 2289.23, 3287.20, 1764.03, 2173.57, 3357.68, 2714.71, 1064.89, 1047.78, 2290.70, 2280.63, 1336.21, 1187.38
2009-01-28 12:36:58 19:000:000, 233.33, 0.00, 2251.00, 1789.54, 1375.46, 1558.21, 2313.37, 3287.20, 1749.18, 2169.47, 3378.92, 2714.71, 1087.65, 1070.07, 2295.62, 2272.29, 1332.24, 1182.29
2009-01-28 12:36:58 20:000:000, 233.33, 0.00, 2255.64, 1791.35, 1378.41, 1548.66, 2305.47, 3305.90, 1771.24, 2177.43, 3367.27, 2701.04, 1069.07, 1054.14, 2301.04, 2279.16, 1346.47, 1199.83

튜토리얼에 4_plc_tag_load.sh 파일에는 아래와 같이 마크베이스 명령어가 저장되어 있습니다. 이 파일을 수행하면 사용자가 명령어를 직접 입력하지 않고도 마크베이스가 자동으로 데이터 입력을 시작합니다.

Host:~/work/MyTutorial/edu_2_plc$ cat 4_plc_tag_load.sh
machloader -t plc_tag_table -i -H -d 4_plc_tag.csv -F "tm YYYY-MM-DD HH24:MI:SS mmm:uuu:nnn"

4_plc_tag_load.sh를 사용해서 위에서 만들어둔 plc_tag_table 테이블에 아래 4_plc_tag.csv에 저장되어 있는 데이터 200만 라인을 저장해 봅시다.

Host:~/work/MyTutorial/edu_2_plc$ machloader -t plc_tag_table -i -d 4_plc_tag.csv -F "tm YYYY-MM-DD HH24:MI:SS mmm:uuu:nnn"
-----------------------------------------------------------------
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 : plc_tag_table DATA FILE : 4_plc_tag.csv
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
2000000 0

Import time : 0 hour 0 min 12.400 sec
Load success count : 2000000
Load fail count : 0


2-5. 태그로 데이터 이동

plc_tag_table이라는 이름의 로그 테이블에  2,000,000개의 데이터가 입력되었습니다. 이번에는 이들 데이터를 태그 테이블로 이동시켜야 합니다. 이번 예제 에서는 insert-select 구문을 이용해서 Bulk로 처리하겠습니다. 먼저, 각 칼럼의 값이 모든 태그 테이블의 이름과 매핑이 되어야 하기 때문에 다음과 같이 매타 태그의 이름 정보와 일치시켜 줘야 합니다.

컬럼명TAG META
V0MTAG_V00
V1MTAG_V01
C0MTAG_C00
C1MTAG_C01
 
C15MTAG_C15

하나씩 순차적으로 Tag 테이블에 입력하기 위해 5_plc_to_tag.sql을 사용하시면 됩니다. 

insert into tag select 'MTAG_V00', tm, v0 from plc_tag_table;
insert into tag select 'MTAG_V01', tm, v1 from plc_tag_table;
insert into tag select 'MTAG_C00', tm, c0 from plc_tag_table;
insert into tag select 'MTAG_C01', tm, c1 from plc_tag_table;
insert into tag select 'MTAG_C02', tm, c2 from plc_tag_table;
insert into tag select 'MTAG_C03', tm, c3 from plc_tag_table;
insert into tag select 'MTAG_C04', tm, c4 from plc_tag_table;
insert into tag select 'MTAG_C05', tm, c5 from plc_tag_table;
insert into tag select 'MTAG_C06', tm, c6 from plc_tag_table;
insert into tag select 'MTAG_C07', tm, c7 from plc_tag_table;
insert into tag select 'MTAG_C08', tm, c8 from plc_tag_table;
insert into tag select 'MTAG_C09', tm, c9 from plc_tag_table;
insert into tag select 'MTAG_C10', tm, c10 from plc_tag_table;
insert into tag select 'MTAG_C11', tm, c11 from plc_tag_table;
insert into tag select 'MTAG_C12', tm, c12 from plc_tag_table;
insert into tag select 'MTAG_C13', tm, c13 from plc_tag_table;
insert into tag select 'MTAG_C14', tm, c14 from plc_tag_table;
insert into tag select 'MTAG_C15', tm, c15 from plc_tag_table;

5_plc_to_tag.sql를 실행하면 아래와 같이 진행됩니다. 이 과정중에 Rollup 인덱스가 자동 생성됩니다.

sjkim2@andrew-Precision-T1700:~/work/MyTutorial/edu_2_plc$ machsql -f 5_plc_to_tag.sql
=================================================================
Machbase Client Query Utility
Release Version 5.0.2.community
Copyright 2014 MACHBASE Corporation or its subsidiaries.
All Rights Reserved.
=================================================================
MACHBASE_CONNECT_MODE=INET, PORT=5656
Type 'help' to display a list of available commands.
Mach> insert into tag select 'MTAG_V00', tm, v0 from plc_tag_table;
2877176 row(s) inserted.
Elapsed time: 3.016
Mach> insert into tag select 'MTAG_V01', tm, v1 from plc_tag_table;
2877176 row(s) inserted.
Elapsed time: 2.982
....
Mach> insert into tag select 'MTAG_C15', tm, c15 from plc_tag_table;
2877176 row(s) inserted.
Elapsed time: 6.610
Mach> select * from tag where name='MTAG_V00' limit 5;
NAME                              TIME                            VALUE
--------------------------------------------------------------------------------------------------
MTAG_V00                          2009-01-28 07:03:34 000:000:000 0
MTAG_V00                          2009-01-28 07:03:34 001:000:000 0
MTAG_V00                          2009-01-28 07:03:34 002:000:000 0
MTAG_V00                          2009-01-28 07:03:34 003:000:000 0
MTAG_V00                          2009-01-28 07:03:34 004:000:000 0
[5] row(s) selected.
Elapsed time: 0.001
Mach> select * from tag where name='MTAG_C08' limit 5;
NAME                              TIME                            VALUE
--------------------------------------------------------------------------------------------------
MTAG_C08                          2009-01-28 07:03:34 000:000:000 3437.73
MTAG_C08                          2009-01-28 07:03:34 001:000:000 3432.44
MTAG_C08                          2009-01-28 07:03:34 002:000:000 3438.61
MTAG_C08                          2009-01-28 07:03:34 003:000:000 3429.51
MTAG_C08                          2009-01-28 07:03:34 004:000:000 3436.85
[5] row(s) selected.
Elapsed time: 0.001

2-7. Tag Analyzer 시각화

tag analyzer에서 방금 로딩된 18개의 센서에 대해 확인해 보겠습니다.

연관 포스트

C언어로 Binary data를 Machbase에 넣기

1.개요 Data를 다루다 보면 numeric, varchar 형 데이터뿐만 아니라 JPG, PNG, MP3와 같은 Binary data도 database에 저장해야 할 때가 존재한다. 그러나 일반 data들과는 달리 Binary

[MACHBASE 연동] Android studio에서 JDBC 연결하기

마크베이스 기술지원본부 이현민 1. 개요 수많은 데이터들이 많은 환경에서 생성되고 있는 오늘날, 우리 현대인들의 동반자인 스마트폰 또한 데이터생성의 주체로써 또는 전달자로서 알게 모르게 그 구실을