Skip to content

Tag 데이터 삽입

개요

Machbase는 시간축과 거리축 Tag 데이터를 삽입하기 위한 여러 방법을 제공하며, 각 방법은 서로 다른 사용 사례에 최적화되어 있습니다. 데이터 볼륨과 애플리케이션 요구 사항에 가장 적합한 방법을 선택하십시오.

방법 1: INSERT 문

데이터를 삽입하는 가장 간단한 방법 - 소규모 데이터셋 및 테스트에 이상적입니다.

기본 INSERT 예제

Mach> create tag table TAG (name varchar(20) primary key, time datetime basetime, value double summarized);
Executed successfully.

Mach> insert into tag metadata values ('TAG_0001');
1 row(s) inserted.

-- Insert single values
Mach> insert into tag values('TAG_0001', now, 0);
1 row(s) inserted.

Mach> insert into tag values('TAG_0001', now, 1);
1 row(s) inserted.

Mach> insert into tag values('TAG_0001', now, 2);
1 row(s) inserted.

Mach> EXEC TABLE_FLUSH(tag);
Executed successfully.

Mach> select * from tag where name = 'TAG_0001';
NAME                  TIME                            VALUE
--------------------------------------------------------------------------------------
TAG_0001              2018-12-19 17:41:37 806:901:728 0
TAG_0001              2018-12-19 17:41:42 327:839:368 1
TAG_0001              2018-12-19 17:41:43 812:782:202 2
[3] row(s) selected.

EXEC TABLE_FLUSH(tag)는 대화형 예제에서 방금 입력한 TAG 데이터를 즉시 조회하거나 통계 뷰에서 확인할 수 있게 합니다.

사용 시기: 테스트, 저용량 삽입, 대화형 데이터 입력

TAG metadata와 _LAST_UPDATE_TIME

metadata 컬럼이 없는 TAG 테이블은 기존처럼 name, time, value 세 값만 입력할 수 있습니다.

CREATE TAG TABLE sensor (
    name  VARCHAR(128) PRIMARY KEY,
    time  DATETIME BASETIME,
    value DOUBLE
);

INSERT INTO sensor VALUES('tag1', now, 1);

사용자 metadata 컬럼이 있는 TAG 테이블에서 column list 없이 신규 tag를 입력하려면 data 값과 사용자 metadata 값을 함께 제공합니다. _LAST_UPDATE_TIME 은 시스템이 관리하는 metadata 변경 시각이므로 입력 값에 포함하지 않습니다.

CREATE TAG TABLE sensor_meta (
    name  VARCHAR(128) PRIMARY KEY,
    time  DATETIME BASETIME,
    value DOUBLE
)
METADATA (
    site   VARCHAR(32),
    status INTEGER
);

INSERT INTO sensor_meta
VALUES('tag1', now, 1, 'seoul', 1);

column list를 사용하는 경우에도 필요한 사용자 컬럼만 지정하고 _LAST_UPDATE_TIME 은 지정하지 않습니다.

INSERT INTO sensor_meta(name, time, value, site, status)
VALUES('tag2', now, 1, 'busan', 1);

기존 tag의 metadata row가 이미 존재하는 경우 data-only insert는 metadata 값을 변경하지 않습니다. 따라서 _LAST_UPDATE_TIME 도 변경되지 않습니다.

거리축 INSERT 예제

거리축 Tag 테이블도 동일하게 INSERT를 사용하지만, 축 컬럼에는 숫자 값을 넣습니다.

Mach> CREATE TAG TABLE trip_sensor (
          name        VARCHAR(20) PRIMARY KEY,
          distance_m  DOUBLE BASE DISTANCE,
          value       DOUBLE,
          quality     INTEGER
      );
Executed successfully.

Mach> INSERT INTO trip_sensor VALUES('ODO_A', 0, 10.1, 100);
1 row(s) inserted.

Mach> INSERT INTO trip_sensor VALUES('ODO_A', 500, 11.2, 101);
1 row(s) inserted.

Mach> INSERT INTO trip_sensor VALUES('ODO_B', 1000.1, 21.5, 100);
1 row(s) inserted.

Mach> EXEC TABLE_FLUSH(trip_sensor);
Executed successfully.

DOUBLE 거리축은 소수 거리값을 그대로 저장할 수 있고, LONG/ULONG 거리축은 정수 거리값만 저장합니다.

방법 2: CSV 파일 임포트

csvimport 도구를 사용하여 CSV 파일에서 대량의 데이터를 빠르게 로드합니다.

CSV 파일 형식

태그 이름, 타임스탬프 및 값이 포함된 CSV 파일(data.csv)을 생성합니다:

TAG_0001, 2009-01-28 07:03:34 0:000:000, -41.98
TAG_0001, 2009-01-28 07:03:34 1:000:000, -46.50
TAG_0001, 2009-01-28 07:03:34 2:000:000, -36.16

csvimport 사용

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

옵션 설명:

  • -t TAG: 대상 테이블 이름
  • -d data.csv: 데이터 파일 경로
  • -F: 시간 형식 지정
  • -l error.log: 에러 로그 파일

사용 시기: 대량 로딩, 데이터 마이그레이션, 배치 임포트

중요: Machbase는 임포트 중 존재하지 않는 태그 이름을 자동 등록합니다. 단위, 위치, 상태 같은 메타데이터 값을 명시해야 하는 경우에는 데이터를 로드하기 전에 태그 메타데이터를 먼저 등록하십시오.

방법 3: RESTful API

HTTP 요청을 통해 데이터를 삽입합니다 - IoT 디바이스와 웹 애플리케이션에 완벽합니다.

API 구문

{
  "values": [
    [TAG_NAME, TAG_TIME, VALUE],
    [TAG_NAME, TAG_TIME, VALUE],
    ...
  ],
  "date_format": "YYYY-MM-DD HH24:MI:SS mmm:uuu:nnn"
}

date_format이 생략되면 기본 형식 YYYY-MM-DD HH24:MI:SS mmm:uuu:nnn이 사용됩니다.

시간축 Tag 테이블은 축 값에 날짜/시간 문자열을 사용하고, 거리축 Tag 테이블은 축 컬럼 타입에 맞는 숫자 값을 사용합니다.

API 예제

curl -X POST http://localhost:5657/machiot/datapoints/raw/TAG \
  -H "Content-Type: application/json" \
  -d '{
    "date_format": "YYYY-MM-DD HH24:MI:SS",
    "values": [
      ["TAG_0001", "2024-01-01 10:00:00", 25.5],
      ["TAG_0001", "2024-01-01 10:01:00", 26.0],
      ["TAG_0002", "2024-01-01 10:00:00", 30.2]
    ]
  }'

사용 시기: IoT 디바이스, 실시간 데이터 스트리밍, 웹 애플리케이션

방법 4: SDK 통합

애플리케이션에서 프로그래밍 방식의 데이터 삽입을 위해 Machbase SDK를 사용합니다.

지원 언어

Python 예제

import machbaseAPI as mach

# Connect to Machbase
conn = mach.connect(host='localhost', port=5656)

# Insert data
cursor = conn.cursor()
cursor.execute("""
    INSERT INTO tag VALUES (?, ?, ?)
""", ('TAG_0001', '2024-01-01 10:00:00', 25.5))

conn.commit()
conn.close()

사용 시기: 애플리케이션 통합, 자동화된 데이터 수집, 사용자 정의 도구

적절한 방법 선택

방법적합한 경우장점단점
INSERT테스트, 소규모 데이터셋간단합니다, 대화형대용량 데이터에는 느림
CSV 임포트대량 로딩, 마이그레이션매우 빠름, 효율적파일 준비 필요
RESTful APIIoT, 웹 앱유연합니다, 플랫폼 독립적네트워크 오버헤드
SDK애플리케이션완전한 제어, 타입 안전성개발 필요

추가 컬럼 사용

Tag 테이블에 추가 컬럼이 있는 경우 삽입 시 포함시킵니다:

축 값은 항상 테이블 정의 순서와 타입을 따라야 합니다. 시간축은 DATETIME, 거리축은 DOUBLE/LONG/ULONG 값이 들어갑니다.

-- Tag table with additional columns
CREATE TAG TABLE sensors (
    name VARCHAR(20) PRIMARY KEY,
    time DATETIME BASETIME,
    value DOUBLE,
    location VARCHAR(50),
    status SHORT
);

-- Insert with additional columns
INSERT INTO sensors VALUES (
    'TEMP_001',
    '2024-01-01 10:00:00',
    25.5,
    'Building A',
    1
);

모범 사례

  1. 필요한 경우 태그 메타데이터 등록: 없는 태그 이름은 자동 등록됩니다. 메타데이터 값을 명시해야 할 때 먼저 등록합니다. _LAST_UPDATE_TIME 은 서버가 자동 관리하므로 직접 입력하지 않습니다
  2. 배치 작업 사용: 대규모 데이터셋의 경우 CSV 임포트 또는 배치 API 호출을 사용합니다
  3. 에러 처리: 항상 반환 값을 확인하고 에러를 로그에 기록합니다
  4. 시간 정밀도: 데이터 전체에서 타임스탬프 정밀도를 일관되게 유지합니다
  5. 데이터 검증: 태그 이름과 타임스탬프가 운영 규칙을 따르는지 확인합니다

성능 팁

  • CSV 임포트: 대량 데이터(수백만 행)에 가장 빠름
  • 배치 삽입: 여러 INSERT 문을 트랜잭션으로 그룹화
  • 병렬 로딩: 병렬 수집을 위해 여러 csvimport 프로세스 사용
  • 준비된 문: SDK에서 더 나은 성능을 위해 파라미터화된 쿼리 사용

다음 단계

최근 업데이트