As Reading API
CREATE TAG TABLE IF NOT EXISTS EXAMPLE (
NAME VARCHAR(20) PRIMARY KEY,
TIME DATETIME BASETIME,
VALUE DOUBLE SUMMARIZED);
INSERT INTO EXAMPLE VALUES('TAG0', TO_DATE('2021-08-12'), 10);
INSERT INTO EXAMPLE VALUES('TAG0', TO_DATE('2021-08-13'), 11);TQL 스크립트를 저장하면 편집기 우측 상단에
아이콘이 표시됩니다. 클릭하면 스크립트 주소를 복사할 수 있습니다.
CSV
아래 코드를 output-csv.tql로 저장해 주십시오.
| |
curl 명령으로 TQL을 호출해 주십시오.
$ curl http://127.0.0.1:5654/db/tql/output-csv.tqlTAG0,1628694000000000000,10
TAG0,1628780400000000000,11JSON
아래 코드를 output-json.tql로 저장해 주십시오.
| |
curl 명령으로 TQL을 호출해 주십시오.
$ curl http://127.0.0.1:5654/db/tql/output-json.tql{
"data": {
"columns": [ "NAME", "TIME", "VALUE" ],
"types": [ "string", "datetime", "double" ],
"rows": [
[ "TAG0", 1628694000000000000, 10 ],
[ "TAG0", 1628780400000000000, 11 ]
]
},
"success": true,
"reason": "success",
"elapse": "770.078µs"
}NDJSON
아래 코드를 output-ndjson.tql로 저장해 주십시오.
| |
curl 명령으로 TQL을 호출해 주십시오.
$ curl http://127.0.0.1:5654/db/tql/output-ndjson.tql{ "NAME": "TAG0", "TIME": 1628694000000000000, "VALUE": 10 }↵
{ "NAME": "TAG0", "TIME": 1628780400000000000, "VALUE": 11 }↵
↵MARKDOWN
아래 코드를 output-markdown.tql로 저장해 주십시오.
| |
curl 명령으로 TQL을 호출해 주십시오.
$ curl http://127.0.0.1:5654/db/tql/output-markdown.tql|NAME|TIME|VALUE|
|:-----|:-----|:-----|
|TAG0|1628694000000000000|10.000000|
|TAG0|1628780400000000000|11.000000|HTML
HTML() 함수는 제공된 템플릿 언어를 활용해 결과를 HTML 문서로 출력합니다.
쿼리 결과에 맞춰 HTML 구조와 스타일을 자유롭게 구성하실 수 있습니다.
{{ .V.column_name }}처럼 컬럼 값을 읽거나, {{ if .IsFirst }}, {{ if .IsLast }} 조건을 이용해 첫 행과 마지막 행에 맞춘 템플릿 제어가 가능합니다. 이를 활용하면 표, 보고서 등 다양한 HTML 표현을 TQL 스크립트만으로 생성할 수 있습니다.
| |

CHART
TQL 파일 저장
아래 코드를 output-chart.tql로 저장해 주십시오.
| |
HTTP GET
웹 브라우저에서 http://127.0.0.1:5654/db/tql/output-chart.tql 주소를 열어 주십시오.

기존
CHART_LINE(),CHART_BAR(),CHART_SCATTER()계열 함수는 새로운CHART()함수로 대체되었습니다.
예시는 CHART() 문서를 참고해 주십시오.
chartJson() 활용
TQL 파일 저장
아래 코드를 output-chart.tql로 저장해 주십시오.
| |
HTTP GET
웹 브라우저에서 http://127.0.0.1:5654/db/tql/output-chart.tql 주소를 열어 주십시오.
{
"chartID":"MzM3NjYzNjg5MTYxNjQ2MDg_",
"jsAssets": ["/web/echarts/echarts.min.js"],
"jsCodeAssets": ["/web/api/tql-assets/MzM3NjYzNjg5MTYxNjQ2MDg_.js"],
"style": {
"width": "600px",
"height": "600px"
},
"theme": "white"
}chartID() 활용
TQL 파일 저장
아래 코드를 output-chart.tql로 저장해 주십시오.
| |
HTTP GET
웹 브라우저에서 http://127.0.0.1:5654/db/tql/output-chart.tql 주소를 열어 주십시오.
{
"chartID":"myChart",
"jsAssets": ["/web/echarts/echarts.min.js"],
"jsCodeAssets": ["/web/api/tql-assets/myChart.js"],
"style": {
"width": "600px",
"height": "600px"
},
"theme": "white"
}이 방식은 DOM 문서에 <div id='myChart'></div>가 있을 때 유용합니다.
... in HTML ...
<div id='myChart'></div>
<script>
fetch('http://127.0.0.1:5654/db/tql/output-chart.tql').then( function(rsp) {
return rsp.json();
}).then( function(c) {
c.jsAssets.concat(c.jsCodeAssets).forEach((src) => {
const sScript = document.createElement('script');
sScript.src = src;
sScript.type = 'text/javascript';
document.getElementsByTagName('head')[0].appendChild(sScript);
})
})
</script>
... omit ...결과 데이터 캐시
Since v8.0.43아래와 같이 CSV(), JSON(), NDJSON(), HTML() 싱크에 cache() 옵션 함수를 지정할 수 있습니다.
SQL( "select * from example limit ?, 1000", param("offset") ?? 0 )
JSON( cache( param("offset") ?? "0", "60s" ) )cache() 옵션은 필수 파라미터 CACHE_KEY, TTL과 선택 파라미터 r을 받습니다.
구문: cache(CACHE_KEY string, TTL string, [r float])
- 첫 번째 파라미터
CACHE_KEY는 캐시 데이터를 등록하고 검색하는 데 사용하며, 실제 키는[filename] + [source_code_hash] + [CACHE_KEY]로 구성됩니다. 따라서 같은 TQL(같은 파일 이름과 같은 코드)을 같은CACHE_KEY로 실행하면 키가 같아지고, 나중에 실행한 결과가 기존 캐시 데이터를 덮어씁니다. - 두 번째 파라미터
TTL이 지나면 캐시가 자동으로 삭제됩니다. TTL이 지난 뒤 들어온 요청은 실제 DB를 조회해 결과 데이터를 반환하고, 그 결과를 다시 캐시에 등록합니다. - 세 번째 선택 파라미터
r은 “선제적 캐시 갱신 비율(preemptive-cache-update-ratio)“이며, 0보다 크고 1.0보다 작은 값이어야 합니다.r * TTL과TTL사이에 들어온 첫 번째 요청에는 현재 캐시 데이터로 응답한 뒤 쿼리를 실행해 캐시를 갱신합니다. 이후 요청은 갱신된 결과를 캐시에서 받습니다. 이를 통해 자주 요청되는CACHE_KEY의 캐시 데이터를 백그라운드에서 계속 갱신할 수 있습니다.
코드를 수정하면 source_code_hash가 바뀌므로 캐시 미스가 발생합니다.
TTL이 지나 캐시가 자동으로 삭제된 경우에도 캐시 미스가 발생합니다.
두 경우 모두 요청을 실행하고, 그 결과 데이터를 캐시에 등록합니다.
이 동작은 SINK 함수에 cache() 옵션을 지정한 경우에만 적용됩니다.
cache() 옵션이 없는 TQL은 캐시를 검색하지 않습니다.
참고: 캐시를 과도하게 사용하면 메모리가 부족해질 수 있습니다. 예를 들어 수십억 건의 레코드를 SELECT하는 TQL에서
cache()를 사용하는 경우입니다.