태그 테이블 생성
가장 간단한 태그 테이블은 아래와 같이 생성된다.
Code Block | ||
---|---|---|
| ||
Mach> create tagdata table TAG (name varchar(20) primary key, time datetime, value double); [ERR-02253: Mandatory column definition (PRIMARY KEY / BASETIME / SUMMARIZED) is missing.] ==> 위와 같이 키워드를 넣지 않으면, 위와 같은 에러가 발생한다. Mach> create tagdata table TAG (name varchar(20) primary key, time datetime basetime, value double summarized); Executed successfully. Mach> desc tag; [ COLUMN ] ---------------------------------------------------------------- NAME TYPE LENGTH ---------------------------------------------------------------- NAME varchar 20 TIME datetime 31 VALUE double 17 |
즉, TAG 라는 이름을 가진 테이블이 생성되었다. 성능 향상을 위해 4개의 파티션으로 나뉘어진 내부 테이블이 생성된다.
추가 센서 컬럼
실제로 TAG 테이블을 활용할 때 단지 3개의 컬럼만으로는 주어진 문제를 해결하기 힘든 경우가 있다.
특히, 입력되는 센서 데이터의 정보가 이름과 시간, 값 뿐만 아니라 특정 그룹이나 인터넷 주소의 경우도 있기 때문에 아래와 같이 추가할 수 있다.
Code Block | ||
---|---|---|
| ||
Mach> create tagdata table TAG (name varchar(20) primary key, time datetime basetime, value double summarized, grpid short, myip ipv4) ; Executed successfully. Mach> desc tag; [ COLUMN ] ---------------------------------------------------------------- NAME TYPE LENGTH ---------------------------------------------------------------- NAME varchar 20 TIME datetime 31 VALUE double 17 GRPID short 6 <=== 추가됨 MYIP ipv4 15 <=== 추가됨 |
그러나, 5.5를 포함한 구버전에서는 VARCHAR 타입의 값은 부가 컬럼에 들어갈 수 없다는 점에 유의하자.
Code Block | ||
---|---|---|
| ||
Mach> create tagdata table TAG (name varchar(20) primary key, time datetime basetime, value double summarized, myname varchar(100)) ; [ERR-01851: Variable length columns are not allowed in tag table.] |
문자열 타입의 경우에는 위와 같이 에러가 발생한다. 5.6 이후의 버전에서는TAG 테이블의 추가 컬럼에서도 VARCHAR를 지원한다.
추가 메타데이터 컬럼
TAG 테이블에는 센서 컬럼 추가만 가능한 것이 아니라, 각 태그 이름에 종속된 정보를 함께 입력할 수 있다.
이 정보는 센서 데이터에 중복 저장할 필요가 없는 정보이기 때문에, 효율적으로 관리하기 위한 별도의 컬럼 정의 구문인 METADATA (...)
을 추가해야 한다.
Code Block | ||
---|---|---|
| ||
Mach> create tagdata table TAG (name varchar(20) primary key, time datetime basetime, value double summarized) 2 metadata (room_no integer, tag_description varchar(100)); |
여기서 room_no, tag_description 은 name 에 종속된 정보이다. 예를 들면, 이런 정보를 입력해 둘 수 있다.
name | room_no | tag_description |
---|---|---|
temp_001 | 1 | It reads current temperature as Celsius |
humid_001 | 1 | It reads current humidity as percentage |
입력한 이후에는, TAG 테이블에서 SELECT 를 통해 같이 조회할 수 있다.
Code Block | ||
---|---|---|
| ||
Mach> SELECT name, time, value, tag_description FROM tag LIMIT 1; name time value -------------------------------------------------------------------------------------- tag_description ------------------------------------------------------------------------------------ temp_001 2019-03-01 09:52:17 000:000:000 25.3 It reads current temperature as Celsius |
파티션 개수 지정
파티션 개수가 기본적으로 4개로 설정되어 있는데, 메모리 및 CPU 사용량을 조절하기 위해 이 개수를 다음과 같이 지정할 수 있다.
테이블 프로퍼티 tag_partition_count 에 해당 값을 넣어서 생성한다.
이 값이 커지면 병렬성이 높아져서 성능이 좋아지지만, 메모리 사용량이 늘어나고, ROLLUP 파티션도 같이 늘어나기 때문에 CPU 사용량도 함께 늘어난다.
아래 예제는, 메모리 및 CPU 사용량의 최소화 하기 위한 목적으로 1으로 설정하는 것을 나타낸다.
Code Block | ||
---|---|---|
| ||
Mach> create tagdata table TAG (name varchar(20) primary key, time datetime basetime, value double summarized) tag_partition_count=1; Executed successfully. |
태그 테이블 삭제
만일 생성된 태그 테이블을 다시 만들거나, 필요가 없어져 디스크 공간을 확보해야 하는 경우에는 다음과 같은 DROP 명령어를 통해 삭제할 수 있다.
TAG 테이블에 관련된 모든 자료, 즉 태그 데이터, 메타데이터, ROLLUP 테이블이 모두 삭제되므로 유의해야 한다.
Code Block | ||
---|---|---|
| ||
Mach> drop table tag; Dropped successfully. Mach> desc tag; tag does not exist. |