Compile the plugins

In eKuiper source code root path, run the below command.

  1. go build -trimpath -modfile extensions.mod --buildmode=plugin -o plugins/sinks/Tdengine@v1.0.0.so extensions/sinks/tdengine/tdengine.go

Install plugin

Since the operation of the tdengine plug-in depends on the tdengine client, for the convenience of users, the tdengine client will be downloaded when the plug-in is installed. However, the tdengine client version corresponds to the server version one-to-one, which is not compatible with each other, so the user must inform the tdengine server version used.

Rule Actions Description

As the tdengine database requires a timestamp field in the table, the user must inform the timestamp field name of the data table (required tsFieldName). The user can choose whether to provide timestamp data. If not (provideTs=false), the content of the timestamp field is automatically generated by the tdengine database.

Name Type Optional Description
host string true Database host, it must be a host name aka. FQDN. An IP address is invalid. The default value is localhost.
port int false Database port
user string true Username, default to root.
password string true Password, default to taosdata.
database string false Database name.
table string false Table Name, could be a dynamic property.
fields []string true The fields to be inserted to. The result map and the database should both have these fields. If not specified, all fields in the result map will be inserted.
provideTs Bool true Whether the user provides a timestamp field, default to false.
tsFieldName String false Timestamp field name
tagFields []String true The result fields to be used as the tag values in order. If sTable is specified, this is required.
sTable String true The super table to be use, could be a dynamic property.
tableDataField String true Write the nested values of the tableDataField into database.

Operation example

To create a database or table, refer to the following documents:

  1. https://www.taosdata.com/cn/getting-started/

Create a stream

  1. curl --location --request POST 'http://127.0.0.1:9081/streams' --header 'Content-Type:application/json' --data '{"sql":"create stream demoStream(time string, age BIGINT) WITH ( DATASOURCE = \"device/+/message\", FORMAT = \"json\");"}'

Create a rule

  1. curl --location --request POST 'http://127.0.0.1:9081/rules' --header 'Content-Type:application/json' --data '{"id":"demoRule","sql":"SELECT * FROM demoStream;","actions":[{"tdengine":{"provideTs":true,"tsFieldName":"time","port":0,"ip":"127.0.0.1","user":"root","password":"taosdata","database":"dbName","table":"tableName","fields":["time","age"]}}]}'

Write into fixed table:

  1. {
  2. "tdengine": {
  3. "host": "hostname",
  4. "port": 6030,
  5. "user": "root",
  6. "password": "taosdata",
  7. "database": "db",
  8. "table": "tableName",
  9. "tsfieldname": "ts"
  10. }
  11. }

Write into dynamic table:

```json lines { “tdengine”: { “host”: “hostname”, “port”: 6030, “database”: “dab”, “table”: “{{.table}}”, // dynamic value, get from the table field of the result “tsfieldname”: “ts”, “fields”: [“f1”, “f2”], // Write f1, f2 fields in result into f1, f2 columns in the db “sTable”: “myStable”, // super table name, also allow dynamic “tagFields”: [“f3”,”f4”] // Write f3, f4 fields’ values in the result as tags in order } }

  1. Write values of tableDataField into database:
  2. The following configuration will write telemetry field's values into database
  3. ```json
  4. {
  5. "telemetry": [{
  6. "temperature": 32.32,
  7. "humidity": 80.8,
  8. "f3": "f3tagValue",
  9. "f4": "f4tagValue",
  10. "ts": 1388082430
  11. },{
  12. "temperature": 34.32,
  13. "humidity": 81.8,
  14. "f3": "f3tagValue",
  15. "f4": "f4tagValue",
  16. "ts": 1388082440
  17. }]
  18. }

json lines { "tdengine": { "host": "hostname", "port": 6030, "database": "dab", "table": "tableName", // dynamic value, get from the table field of the result "tsfieldname": "ts", "fields": ["temperature","humidity"], // Write f1, f2 fields in result into f1, f2 columns in the db "sTable": "myStable", // super table name, also allow dynamic "tableDataField": "telemetry", // write values of telemetry field into database "tagFields": ["f3","f4"] // Write f3, f4 fields' values in the result as tags in order } }