TQL 과 JDBC 드라이버
시계열 엔진(TSE)에 밖에서 질의를 넣는 두 가지 길입니다 — 질의 언어는 TQL, 접속 수단은 JDBC 드라이버입니다.
드라이버 plantpulse.timeseries.tql.TQLDriver
URL jdbc:ts://<호스트>:7800
계정 tse / (설치가 정한 비밀번호)
TQL 은 넷 중 하나입니다
데이터 게이트웨이(:5500)는 질의 언어로 백엔드를 고릅니다. 어느 엔진에 붙는지
몰라도 되도록 만든 구조이고, TQL 이 시계열 엔진 담당입니다.
| 언어 | 뒷단 | 무엇에 쓰나 |
|---|---|---|
| PQL | PostgreSQL | 마스터 데이터 · 설정(mm_*) |
| CQL | Aster TSDB | 시계열 원본 · 집계(tm_*) |
| SQL | Spark | 레이크하우스 · 대용량 분석 |
| TQL | 시계열 엔진(TSE) | 시간 윈도우 집계 · 갭필 |
게이트웨이로 보낼 때는 헤더로 언어를 지정합니다.
curl -sk -X POST https://<호스트>:5501/api/v1/query \
-H 'X-Lang: TQL' \
-H 'X-API-Key: <data.gateway.api.key>' \
-H 'Content-Type: text/plain' \
--data "SELECT LAST('1 DAYS', 'END') FROM CHANNEL1.PUMP1.TEMP_0001 \
WHERE timestamp BETWEEN '2022-01-01 00:00:00.000' AND '2030-12-31 23:59:59.999'"
응답은 {"result":"SUCCESS","data":[...]} 꼴입니다.
5500 으로 보내면 5501 로 302 됩니다5500 은 평문, 5501 은 TLS 입니다. 평문으로 보내도 리다이렉트되므로 처음부터
5501 로 보내는 편이 왕복이 하나 줍니다.
테이블 이름이 «경로» 입니다
TQL 의 FROM 절은 관계형 테이블명이 아니라 태그 경로입니다.
FROM <채널>.<설비>.<태그>
예: CHANNEL1.PUMP1.TEMP_0001
시각 범위는 WHERE timestamp BETWEEN … AND … 로 주고, 문자열 리터럴은
'YYYY-MM-DD HH:mm:ss.SSS' 입니다.
JDBC 로 붙기
BI 도구·배치·직접 만든 프로그램은 JDBC 를 씁니다.
Class.forName("plantpulse.timeseries.tql.TQLDriver");
try (Connection c = DriverManager.getConnection(
"jdbc:ts://192.168.0.41:7800", "tse", "<비밀번호>");
Statement st = c.createStatement();
ResultSet rs = st.executeQuery(
"SELECT LAST('1 DAYS','END') FROM CHANNEL1.PUMP1.TEMP_0001 "
+ "WHERE timestamp BETWEEN '2026-09-01 00:00:00.000' "
+ "AND '2026-09-02 00:00:00.000'")) {
while (rs.next()) System.out.println(rs.getString(1));
}
설정으로 주려면 plantpulse-jdbc.properties 의 jdbc.tse.* 를 씁니다.
| 키 | 값 |
|---|---|
jdbc.tse.driver | plantpulse.timeseries.tql.TQLDriver |
jdbc.tse.url | jdbc:ts://<호스트>:${PP_TSE_PORT} |
jdbc.tse.username | tse |
jdbc.tse.password | 설치가 정한 값 |
선택 키로 jdbc.tse.pool.initial|min|max 와 jdbc.tse.query.timeout|fetch-size 가 있습니다.
jdbc.tse.url 을 tss(7801)로 바꾸지 마십시오TQL JDBC 드라이버는 평문 TSE 리스너(7800) 를 씁니다. TSE 클라이언트는 전역적으로
평문 ts/7800 이 기본입니다(2026-08).
tss/7801 로 잡으면 JDBC 접속 실패 → 데이터 게이트웨이 부팅 실패 → /api/v1/* 전부
404 → analytics 카탈로그 404 로 번집니다. 그래서 ts 와 PP_TSE_PORT 로 핀이 박혀
있습니다 → 프로퍼티 레퍼런스
TSE 클라이언트 (자바)
JDBC 가 읽기 위주라면, TSE 클라이언트는 쓰기까지 하는 네이티브 라이브러리입니다. 플랫폼 자신이 지표를 밀어 넣을 때 쓰는 것과 같은 것입니다.
plantpulse-platform:plantpulse-timeseries-engine-client
두 가지가 있습니다
| 클래스 | 무엇 | 언제 |
|---|---|---|
TSEClient | 쓰기를 버퍼링하는 store-and-forward | 기본. 엔진이 잠깐 끊겨도 쓰기를 잃지 않습니다 |
DirectTSEClient | 버퍼 없는 원본 HTTP | 버퍼가 방해될 때(테스트·일회성 도구) |
TSEClient 는 생성자가 DirectTSEClient 와 똑같아서 그대로 바꿔 끼울 수 있습니다.
버퍼 워커 스레드는 첫 버퍼링 쓰기에서 늦게 뜨므로, 질의만 하는 클라이언트는 스레드를
더 쓰지 않습니다.
붙기
import plantpulse.timeseries.engine.client.TSEClient;
// protocol · host · port · user · password
TSEClient client = new TSEClient("https", "192.168.0.41", 7801, "tse", "<비밀번호>");
// URL 한 줄로도 됩니다
TSEClient client2 = new TSEClient("https://192.168.0.41:7801");
기본값은 https · 7801 · 타임아웃 60초 입니다.
둘이 다릅니다. TSE 클라이언트는 DEFAULT_PROTOCOL=https · DEFAULT_PORT=7801 이고,
JDBC 드라이버는 평문 7800 입니다(위 danger 참고). 같은 엔진의 두 리스너입니다.
값 쓰기
import plantpulse.timeseries.engine.client.builder.MetricBuilder;
MetricBuilder builder = MetricBuilder.getInstance();
builder.addMetric("PLANTPULSE.LINE1.PUMP1.TEMP")
.addDataPoint(System.currentTimeMillis(), 42.7)
.addTag("site", "SITE_00001");
client.pushMetrics(builder);
값 읽기
import plantpulse.timeseries.engine.client.builder.QueryBuilder;
QueryBuilder q = QueryBuilder.getInstance();
// 범위와 메트릭을 지정한 뒤
QueryResponse res = client.query(q);
JSON 을 직접 만들었다면 client.query(String jsonText) 로 그대로 보낼 수 있습니다.
그 밖에 할 수 있는 것
| 하려는 일 | 메서드 |
|---|---|
| 메트릭 이름 목록 | getMetricNames() |
| 엔진 상태 | getStatus() · getStatusCheck() |
| 롤업(사전 집계) 작업 관리 | createRollupTask() · getRollupTasks() · deleteRollupTask() |
| 메트릭 삭제 | deleteMetric(name) · delete(QueryBuilder) |
| 메타데이터 | getMetricMetadata() · setMetricMetadata() · deleteMetricMetadata() |
| 태그 질의 | queryTags(QueryTagBuilder) |
어느 길을 고르나
| 상황 | 쓸 것 |
|---|---|
| 앱에서 네 백엔드를 한 창구로 | 게이트웨이 POST /api/v1/query + X-Lang |
| 자바 프로그램에서 TSE 만 | JDBC (jdbc:ts://) |
| PlantPulse Dashboard · BI 도구 | JDBC → 대시보드 만들기 |
| 클라이언트 라이브러리로 편하게 | Data Gateway 클라이언트 의 tql() |
| 자바에서 TSE 에 쓰기까지 | TSE 클라이언트 — 위 절 |
함께 보기
- 시계열 함수 — 버킷 · 갭필 · 보간
- Data Gateway 클라이언트 — 자바 래퍼
- 질의 콘솔 — 브라우저에서 바로