ブリッジとサブスクライバー
ブリッジ
ブリッジの登録
SQLite接続を登録します。
bridge add -t sqlite sqlitedb file:/data/sqlite.db;登録済みブリッジの一覧
bridge list
┌──────────┬────────┬────────────────────────┐
│ NAME │ TYPE │ CONNECTION │
├──────────┼────────┼────────────────────────┤
│ sqlitedb │ sqlite │ file:/data/sqlite.db │
└──────────┴────────┴────────────────────────┘ブリッジでのコマンド実行
bridge exec sqlitedb CREATE TABLE IF NOT EXISTS example(id INTEGER NOT NULL PRIMARY KEY, name TEXT, age TEXT, address TEXT, UNIQUE(name));ブリッジでのクエリ実行
bridge queryコマンドは、「SQL」タイプのブリッジでのみ使用できます。
bridge query sqlitedb select * from example;
┌────┬────────┬─────┬───────────────┐
│ ID │ NAME │ AGE │ ADDRESS │
├────┼────────┼─────┼───────────────┤
│ 1 │ hong_1 │ 20 │ address for 1 │
│ 2 │ hong_2 │ 20 │ address for 2 │
│ 3 │ hong_3 │ 20 │ address for 3 │
└────┴────────┴─────┴───────────────┘TQLのSQL()でのブリッジの使用
SQL()関数は、bridge()オプションで「SQL」タイプのブリッジを指定し、SQL文を実行します。
SQL(bridge("sqlitedb"), `select * from example`)
CSV()TQLのSCRIPT()でのブリッジの使用
以下の例のように、SCRIPT()内で$.db({bridge:"name"})を呼び出すと、データベースタイプのブリッジにアクセスできます。
この機能はバージョン8.0.27以降で利用できます。
SCRIPT({
err = $.db({bridge:"mem"})
.query("select company, employee, created_on from mem_example")
.forEach( function(fields){
$.yield(fields[0], fields[1], fields[2]);
})
if (err !== undefined) {
console.error("result", ret);
}
})
CSV()他のデータベースへのデータコピー
次の例は、MachbaseのデータをSQLiteブリッジにコピーする方法を示しています。
ブリッジ
以下の設定でsqliteブリッジを定義します。
- 種類:
SQLite - 接続文字列:
file:///tmp/sqlite.db
SQL
/tmp/sqlite.dbにあるSQLiteデータベースに、exampleテーブルを作成します。
--env: bridge=sqlite
CREATE TABLE IF NOT EXISTS example (
NAME TEXT,
TIME DATETIME,
VALUE REAL
);
-- env: resetTQL
以下のTQLスクリプトは、SQL()でデータを検索した後、bridge("sqlite")を指定してSQLiteデータベースに取り込みます。
SQL(`select name, time, value from example where name = 'my-car'`)
SQL(bridge('sqlite'), `insert into example values(?,?,?)`, value(0), value(1), value(2))サブスクライバー
サブスクライバーは、外部のメッセージブローカーに接続してストリーミングメッセージを受信し、TQLスクリプトでデータを取り込みます。
machbase-neoは外部のMQTTブローカーとNATSへの接続に対応しています。Kafkaへの対応は今後の予定です。
最も簡単な使用例は、外部のMQTTブローカーへのブリッジを作成し、①そのブリッジ、②購読するトピック、③メッセージを処理するTQLスクリプトのパスを指定してサブスクライバーを登録する方法です。 その後、machbase-neoはMQTTクライアントとして動作し、メッセージを受信するたびに、指定したTQLスクリプトに渡します。
flowchart RL
external-system --PUBLISH--> machbase-neo
machbase-neo --SUBSCRIBE--> external-system
subgraph machbase-neo
direction RL
bridge --> subscriber
subscriber["Subscriber
TQL"] --Write--> machbase
machbase[("machbase
engine")]
end
subgraph external-system
direction RL
client["Client"] --PUBLISH--> mqtt[["MQTT
Broker"]]
end
サブスクライバーの登録
サブスクライバーを登録します。
構文: subscriber add [options] <name> <bridge> <topic> <tql-path>
オプション
--autostart:machbase-neoの起動時にサブスクライバーを自動的に起動します。自動起動しないモードでは、subscriber start <name>とsubscriber stop <name>で手動操作します。--qos <int>:MQTTタイプのブリッジで、トピック購読のQoSレベルを指定します。0と1に対応し、既定値は0です。--queue <string>:NATSタイプのブリッジで使用するキューグループを指定します。
<name>サブスクライバー名<bridge>定義済みのブリッジ名(ブローカーのタイプと一致する必要があります)<topic>購読するトピック<tql-path>受信メッセージを処理するTQLスクリプトのパス
サブスクライバーの状態確認
構文: subscriber list
STOPRUNNING
サブスクライバーの開始・停止
構文: subscriber [start | stop] <name>
サブスクライバーの削除
構文: subscriber del <name>