TQLの概要
Machbase Neoは、Transforming Query Language(TQL)と、その実行用APIを提供します。
一般的なアプリケーション開発では、データベースから取得した表形式(行と列)の結果を必要なデータ構造に変換し、加工してから、JSON、CSV、チャートなど必要な形式で出力します。 TQLでは、この処理を数行のスクリプトで実装できます。作成したTQLをHTTPエンドポイントとして公開し、他のアプリケーションからAPIのように呼び出すこともできます。
TQLとは
TQL(Transforming Query Language)は、データ変換用のDSLです。 データストリームの流れを定義します。各データ単位(レコード)は、key と value で構成されます。
- key:通常は自動増加する整数(クエリ結果のROWNUMに相当)
- value:実際のデータフィールドを格納するタプル

TQLスクリプトは、データを取得してレコードを生成する SRC 関数で始まり、レコードを出力する SINK 関数で終わります。 SRC と SINK の間では、必要に応じて MAP 関数でデータを変換できます。

TQLスクリプトでは、数学計算、簡単な文字列の連結、外部データベースとの連携などによってレコードを変換する必要がある場合があります。このような処理は MAP 関数で定義します。
したがって、TQLスクリプトは SRC 関数で始まり、SINK 関数で終わる必要があります。その間に、必要な変換を行う MAP 関数を0個以上配置できます。

SRC
TQLでは、複数のSRC関数を使用できます。
SQL():Machbase Neo、またはブリッジで接続した外部DBでSQLを実行してレコードを生成FAKE():テスト用の仮想データを生成CSV():CSVファイルを読み取りBYTES():ファイルシステム、クライアントのHTTPリクエスト、MQTTペイロードからバイナリデータを読み取り

SINK
INSERT():レコードをMachbase Neoのデータベースに書き込みCHART():レコードをチャートとして描画JSON()、CSV():データをそれぞれJSON、CSV形式にエンコードし、他のアプリケーションとの連携や見やすい表示を容易にする

MAP
MAP 関数は、データを別の形式に変換するための主要なツールです。 数学演算、文字列処理、形式変換、外部システムとの連携などを実行できます。 MAP 関数を使うと、アプリケーションの要件に合わせてデータを効率よく処理し、形を変えられます。

TQLの実行
Web UIに接続する
ブラウザーでMachbase NeoのWeb UI(既定のアドレスは http://127.0.0.1:5654/)にアクセスし、アカウント(sys / manager)でログインしてください。
新しいTQLを作成する
New... ページで TQL を選択してください。

サンプルコードを実行する
サンプルTQLコードをコピーしてTQLエディターに貼り付け、エディター左上の ▶︎ アイコンをクリックしてください。 以下の画像のように、周波数1.5Hz、振幅1.0の波形がチャートに出力されます。
FAKE( oscillator(freq(1.5, 1.0), range('now', '3s', '10ms')) )
CHART_SCATTER()
さまざまな出力形式
CSVやJSONなどのデータ形式を見ていきます。
- CSV:スプレッドシートなど、CSVファイルに対応したアプリケーションへデータをエクスポートする場合に便利です。
- JSON:解析しやすく、JavaScriptと連携しやすいため、WebアプリケーションやAPIに適しています。
TQLを使うと、数行のコードでデータをこれらの形式に簡単に変換できます。
FAKE( oscillator(freq(1.5, 1.0), range('now', '3s', '10ms')) )
JSON()
APIとして使用する
エディター右上の保存アイコンをクリックして、コードを hello.tql として保存してください。
その後、Webブラウザーで http://127.0.0.1:5654/db/tql/hello.tql にアクセスするか、ターミナルで curl コマンドを実行してデータを取得できます。
| アイコン | 説明 |
|---|---|
| TQLスクリプトを保存すると、エディターの右上にリンクアイコンが表示されます。クリックすると、スクリプトファイルのアドレスをコピーできます。 |
curl -o - http://127.0.0.1:5654/db/tql/hello.tql$ curl -o - -v http://127.0.0.1:5654/db/tql/hello.tql
...omit...
>
< HTTP/1.1 200 OK
< Content-Type: text/csv; charset=utf-8
< Transfer-Encoding: chunked
<
1686787739025518000,-0.238191
1686787739035518000,-0.328532
1686787739045518000,-0.415960
1686787739055518000,-0.499692
1686787739065518000,-0.578992
...omit...JSON()に変更する
CSV() を JSON() に変更して保存し、再度実行してください。

ターミナルで curl を使って hello.tql を呼び出すと、JSON形式で結果を取得できます。
curl -o - http://127.0.0.1:5654/db/tql/hello.tqlHTTPヘッダーを含むJSONレスポンスの例です。
$ curl -o - -v http://127.0.0.1:5654/db/tql/hello.tql
...omit...
< HTTP/1.1 200 OK
< Content-Type: application/json
< Transfer-Encoding: chunked
<
{
"data": {
"columns": [ "time", "value" ],
"types": [ "datetime", "double" ],
"rows": [
[ 1686788907538618000, 0.9344920354538058 ],
[ 1686788907548618000, 0.8968436523101743 ],
...omit...
},
"success": true,
"reason": "success",
"elapse": "956.291µs"
}transpose()を指定したJSON()
データ可視化アプリケーションを開発する場合は、TQLのJSON出力で結果を行単位から列単位に転置(transpose)できることを覚えておくと便利です。
JSON(transpose(true)) を指定して再度呼び出すと、結果のJSONに cols 配列が含まれます。
$ curl -o - -v http://127.0.0.1:5654/db/tql/hello.tql
...omit...
< HTTP/1.1 200 OK
< Content-Type: application/json
< Transfer-Encoding: chunked
<
{
"data": {
"columns": [ "time", "value" ],
"types": [ "datetime", "double" ],
"cols": [
[ 1686789517241103000, ...omit..., 1686789520231103000],
[ -0.7638449771082523, ...omit..., 0.8211935584502427]
]
},
"success": true,
"reason": "success",
"elapse": "1.208166ms"
}この機能は、他のアプリケーションからデータにアクセスできるRESTful APIを作成する最も簡単な方法です。
INSERT
CSV() を INSERT("time", "value", table("example"), tag("temperature")) に変更して再実行してください。

テーブルを検索する
SQL('select * from example limit 10')
CSV()






