Skip to content
As Writing API

As Writing API

아래 예제를 실행하기 전에 다음 SQL로 테이블을 준비해 주십시오.
CREATE TAG TABLE IF NOT EXISTS EXAMPLE (
    NAME VARCHAR(20) PRIMARY KEY,
    TIME DATETIME BASETIME,
    VALUE DOUBLE SUMMARIZED
);

INSERT CSV

1. TQL 파일 생성

다음 코드를 input-csv.tql로 저장해 주십시오.
TQL 스크립트를 저장하면 편집기 우측 상단에 아이콘이 나타납니다. 클릭하면 스크립트 주소를 복사할 수 있습니다.

1
2
3
4
5
6
7
CSV(payload(), 
    field(0, stringType(), 'name'),
    field(1, datetimeType('ns'), 'time'),
    field(2, doubleType(), 'value'),
    header(false)
)
SQL(`insert into example values(?,?,?)`, value(0), value(1), value(2))

2. HTTP POST

```http
POST http://127.0.0.1:5654/db/tql/input-csv.tql
Content-Type: text/csv

TAG0,1628866800000000000,12
TAG0,1628953200000000000,13
```

Response:

{
  "data": {
    "message": "2 rows inserted."
  },
  "elapse": "10ms",
  "reason": "success",
  "success": true
}

3. MQTT PUBLISH

아래 예시처럼 db/tql/{tql_path} 토픽으로 PUBLISH 합니다.

mosquitto_pub -h 127.0.0.1 -p 5653 -t db/tql/input-csv.tql -s << 'EOF'
TAG1,1628866800000000000,12
TAG1,1628953200000000000,13
EOF

APPEND CSV

1. TQL 파일 생성

다음 코드를 append-csv.tql로 저장해 주십시오.

1
2
3
4
5
6
7
CSV(payload(), 
    field(0, stringType(), 'name'),
    field(1, timeType('ns'), 'time'),
    field(2, floatType(), 'value'),
    header(false)
)
APPEND(table('example'))

2. HTTP POST

```http
POST http://127.0.0.1:5654/db/tql/append-csv.tql
Content-Type: text/csv

TAG0,1628866800000000000,12
TAG0,1628953200000000000,13
```

3. MQTT PUBLISH

mosquitto_pub -h 127.0.0.1 -p 5653 -t db/tql/input-csv.tql -s << 'EOF'
TAG3,1628866800000000000,12
TAG3,1628953200000000000,13
EOF

커스텀 JSON

1. TQL 파일 생성

SCRIPT() 함수를 이용해 커스텀 JSON을 파싱합니다.
다음 코드를 input-json.tql로 저장해 주십시오.

1
2
3
4
5
SCRIPT({
    obj = JSON.parse($.payload)
    obj.data.rows.forEach(r => $.yield(...r))
})
SQL(`insert into example values(?,?,?)`, value(0), value(1), value(2))

2. HTTP POST

```http
POST http://127.0.0.1:5654/db/tql/input-json.tql
Content-Type: application/json

{
  "data": {
    "columns": [ "NAME", "TIME", "VALUE" ],
    "types": [ "string", "datetime", "double" ],
    "rows": [
      [ "TAG0", 1628866800000000000, 12 ],
      [ "TAG0", 1628953200000000000, 13 ]
    ]
  }
}
```

3. MQTT PUBLISH

input-json.json 파일을 아래처럼 준비해 주십시오.

{
  "data": {
    "columns": [ "NAME", "TIME", "VALUE" ],
    "types": [ "string", "datetime", "double" ],
    "rows": [
      [ "TAG1", 1628866800000000000, 12 ],
      [ "TAG1", 1628953200000000000, 13 ]
    ]
  }
}
mosquitto_pub -h 127.0.0.1 -p 5653 \
    -t db/tql/input-json.tql \
    -f input-json.json

커스텀 텍스트

데이터를 가공한 뒤 데이터베이스에 저장해야 한다면, 적절한 tql 스크립트를 준비해 db/tql/{tql_file.tql} 토픽으로 전송해 주십시오.

1. TQL 파일 생성

다음 예시는 여러 줄의 텍스트 데이터를 가공해 테이블에 쓰는 방법을 보여 줍니다.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
SCRIPT({
    content = $.payload;
    if (!content || content === '') {
        content = "12345\n 23456\n 78901\n 89012\n 90123";
    }
    lines = content
        .split(/\r?\n/)
        .map(line => line.trim())     // 공백 제거
        .filter(line => line !== ""); // 빈 줄 제거
    lines.forEach((line, idx) => {
        part = line.substring(0, 2);  // 앞 두 글자만 사용
        $.yield('text_'+idx, (new Date()), parseInt(part));
    });
})
CSV(timeformat('default'))
// SQL(`insert into example values(?,?,?)`, value(0), value(1), value(2))

결과 예시

text_0,2023-12-02 11:03:36.054,12
text_1,2023-12-02 11:03:36.054,23
text_2,2023-12-02 11:03:36.054,78
text_3,2023-12-02 11:03:36.054,89
text_4,2023-12-02 11:03:36.054,90

위 코드를 실행해 문제가 없다면 마지막 줄의 CSV()SQL(...)로 바꾸어 배포해 주십시오.

스크립트를 script-post-lines.tql로 저장하고, 테스트 데이터를 db/tql/script-post-lines.tql 토픽으로 전송합니다.

2. HTTP POST

동일한 TQL 파일은 HTTP POST 요청과 함께 사용할 수도 있습니다.

```http
POST http://127.0.0.1:5654/db/tql/script-post-lines.tql
Content-Type: text/plain

110000
221111
332222
442222
```

Response:

{
  "data": {
    "message": "4 rows inserted."
  },
  "elapse": "15.80275ms",
  "reason": "success",
  "success": true
}

3. MQTT PUBLISH

mosquitto_pub -h 127.0.0.1 -p 5653 \
    -t db/tql/script-post-lines.tql -s << 'EOF'
110000
221111
332222
442222
EOF

이후 데이터가 정상적으로 변환·저장되었는지 확인합니다.

$ machbase-neo shell "select * from example where name like 'text_%'"
┌────────┬────────┬─────────────────────────┬───────┐
│ ROWNUM │ NAME   │ TIME                    │ VALUE │
├────────┼────────┼─────────────────────────┼───────┤
1 │ text_0 │ 2026-06-26 09:25:57.535 │    112 │ text_1 │ 2026-06-26 09:25:57.535 │    223 │ text_2 │ 2026-06-26 09:25:57.544 │    334 │ text_3 │ 2026-06-26 09:25:57.545 │    44└────────┴────────┴─────────────────────────┴───────┘
4 rows selected.
최근 업데이트