태그 메타 LSL/USL 설정

LSL/USL 소개

LSL(Lower Specification Limit)은 규격 하한의 뜻을 가지고 USL(Upper Specification Limit)은 규격 상한을 의미한다.
마크베이스에서 지원하는 LSL/USL 기능은 태그 테이블에 종속된 테그 메타 테이블에 대해서만 동작한다.
LSL/USL 기능은 특정 TAG ID에 대해 규격 상한과 하한을 가지도록 하는 기능으로써 예상하지 못한 데이터의 입력을 방지하는 기능이다.

제약 조건

현재 LSL/USL 설정 기능은 몇 가지 제약 조건이 존재한다.

  • CLUSTER EDITION 에서는 LSL/USL 기능을 지원하지 않는다.
  • LSL/USL 를 설정하려면 태그 테이블 생성 시 세 번째 컬럼인 Value 컬럼에 SUMMARIZED 설정이 되어있어야 한다.
  • LSL은 USL보다 작거나 같아야 하고 Value 컬럼의 입력 값은 LSL 이상 USL 이하다. (LSL <= Value <= USL)
  • LSL/USL 설정 부여 이전에 입력된 데이터는 검증하지 않는다.
  • LSL/USL 컬럼을 NULL 로 입력할 경우 입력 데이터를 검증하지 않는다.
  • LSL/USL 기능은 하나씩 사용 가능하다. 즉 규격 상한만 적용하고 싶을 때는 USL만 설정할 수 있다.
  • USL 기능만 사용할 경우 USL보다 작은 값은 검증하지 않는다.

지원하는 형식

태그 테이블의 Value 컬럼과 형식이 같아야 하며 SUMMARIZED 속성처럼 숫자 형식에 대해서만 설정 가능하다.

형식설명범위유효 자릿수
short16비트 부호 있는 정수형-32767 ~ 32767-
ushort16비트 부호 없는 정수형0 ~ 65534-
integer32비트 부호 있는 정수형-2147483647 ~ 2147483647-
uinteger32비트 부호 없는 정수형0 ~ 4294967294-
long64비트 부호 있는 정수형-9223372036854775807 ~ 9223372036854775807-
ulong64비트 부호 없는 정수형0~18446744073709551614-
float32비트 실수형-61
double64비트 실수형-151

LSL/USL 기능 설정 및 활용

LSL/USL 기능을 사용하려면 태그 메타 테이블의 컬럼에 특정 키워드를 설정해야 한다.

  • LSL은 LOWER LIMIT 키워드를 사용한다.
  • USL은 UPPER LIMIT 키워드를 사용한다.

태그 테이블을 생성할 때, 메타 컬럼을 추가할 때 설정이 가능하며 아래는 그 예시다.

CRAETE

CREATE TAG TABLE example (
    tag_id  VARCHAR(50) PRIMARY KEY,
    time    DATETIME    BASETIME,
    value   INTEGER     SUMMARIZED)
METADATA (
    lsl     INTEGER LOWER LIMIT, 
    usl     INTEGER UPPER LIMIT  
);

두 개의 컬럼을 같이 사용할 수도 있지만 원한다면 LSL/USL 둘 중 하나만을 사용할 수도 있다.
LSL 하나만 설정할 경우 LSL보다 큰 데이터에 대해서는 검증하지 않는다. 즉 USL == NULL 과 같다.

CREATE TAG TABLE example (
    tag_id VARCHAR(50) PRIMARY KEY,
    time   DATETIME    BASETIME,
    value  INTEGER     SUMMARIZED)
METADATA (
    lsl    INTEGER LOWER LIMIT   
);

ADD COLUMN

ADD COLUMN 을 이용하여 추가할 경우 기본 값은 NULL 값이다.

CREATE TAG TABLE example (
    tag_id  VARCHAR(50) PRIMARY KEY,
    time    DATETIME    BASETIME,
    value   INTEGER     SUMMARIZED
);
 
ALTER TABLE _example_meta ADD COLUMN (lsl INTEGER LOWER LIMIT);
ALTER TABLE _example_meta ADD COLUMN (usl INTEGER UPPER LIMIT);

CREATE에서 처럼 하나의 속성만 추가하는 것도 가능하다.

CREATE TAG TABLE example (
    tag_id  VARCHAR(50) PRIMARY KEY,
    time    DATETIME    BASETIME,
    value   INTEGER     SUMMARIZED
);

ALTER TABLE _example_meta ADD COLUMN (usl INTEGER UPPER LIMIT);

INSERT

LSL/USL 기능을 설정하고 특정 TAG ID에 대해 LSL/USL을 설정하면 데이터 입력 준비가 완료된다.

INSERT INTO example metadata VALUES ('TAG_01', 100, 200);

이렇게 설정한 뒤 태그 데이터를 입력하면 아래와 같이 동작하게 된다.

Mach> INSERT INTO example VALUES ('TAG_01', NOW, 95);  -- Failure
[ERR-02342: SUMMARIZED value is less than LOWER LIMIT.]

Mach> INSERT INTO example VALUES ('TAG_01', NOW, 100); -- Success (Inclusive)
1 row(s) inserted.
Elapsed time: 0.000

Mach> INSERT INTO example VALUES ('TAG_01', NOW, 150); -- Success
1 row(s) inserted.
Elapsed time: 0.000

Mach> INSERT INTO example VALUES ('TAG_01', NOW, 200); -- Success (Inclusive)
1 row(s) inserted.
Elapsed time: 0.000

Mach> INSERT INTO example VALUES ('TAG_01', NOW, 205); -- Failure
[ERR-02341: SUMMARIZED value is greater than UPPER LIMIT.]

값을 입력한 뒤 태그 테이블을 조회해보면 확실하게 검증된 데이터만 입력된 것을 확인할 수 있다.

Mach> SELECT * FROM example;
TAG_ID                                              TIME                            VALUE       LSL         USL         
------------------------------------------------------------------------------------------------------------------------------
TAG_01                                              2023-09-12 09:31:27 923:289:631 100         100         200         
TAG_01                                              2023-09-12 09:31:27 929:013:232 150         100         200         
TAG_01                                              2023-09-12 09:31:27 939:209:248 200         100         200         
[3] row(s) selected.
Elapsed time: 0.001

UPDATE

태그 메타 테이블에 설정된 LSL/USL 컬럼의 값을 수정할 수 있다. 이미 태그 데이터 테이블에 입력된 데이터에 대해서는 검증하지 않기 때문에 주의해서 사용한다.

Mach> UPDATE example metadata SET lsl = 10, usl = 100 WHERE tag_id = 'TAG_01';
1 row(s) updated.
Elapsed time: 0.001

Mach> SELECT * FROM _example_meta;
_ID                  TAG_ID                                              LSL         USL         
------------------------------------------------------------------------------------------------------
1                    TAG_01                                              10          100         
[1] row(s) selected.
Elapsed time: 0.001

DELETE

태그 메타 테이블에는 DROP COLUMN 기능을 지원하지 않기 때문에 LSL/USL 컬럼만을 직접적으로 삭제할 수 있는 방법은 없다.
컬럼을 삭제하는 것은 불가능하지만 LSL/USL 의 제약 조건을 역이용하여 LSL/USL 컬럼 값을 NULL 로 설정한다면 제약 없이 데이터 입력이 가능하다.

Mach> UPDATE EXAMPLE METADATA SET lsl = NULL, usl = NULL WHERE tag_id = 'TAG_01';
1 row(s) updated.
Elapsed time: 0.001

Mach> SELECT * FROM _example_meta;
_ID                  TAG_ID                                              LSL         USL         
------------------------------------------------------------------------------------------------------
1                    TAG_01                                              NULL        NULL        
[1] row(s) selected.
Elapsed time: 0.001
최근 업데이트