Sql 目标(Sink)

此插件将结果写入数据库

编译部署插件

此插件必须与至少一个数据库驱动程序一起使用。我们使用构建标签来确定将包含哪个驱动程序。此处列出了所有支持的驱动程序。 该插件默认支持 sqlserver\postgres\mysql\sqlite3\oracle 驱动。用户可以自己编译只支持一个驱动的插件,例如如果他只想要 mysql,那么他可以用 build tag mysql 构建。

默认构建指令

  1. # cd $eKuiper_src
  2. # go build -trimpath -modfile extensions.mod --buildmode=plugin -o plugins/sinks/Sql.so extensions/sinks/sql/sql.go
  3. # cp plugins/sinks/Sql.so $eKuiper_install/plugins/sinks

MySql 构建指令

  1. # cd $eKuiper_src
  2. # go build -trimpath -modfile extensions.mod --buildmode=plugin -tags mysql -o plugins/sinks/Sql.so extensions/sinks/sql/sql.go
  3. # cp plugins/sinks/Sql.so $eKuiper_install/plugins/sinks

Properties

Property name Optional Description
url false 目标数据库的url
table false 结果的表名
fields true 要插入的字段。结果映射和数据库都应该有这些字段。如果未指定,将插入结果映射中的所有字段
tableDataField true 将 tableDataField 的嵌套值写入数据库。

使用样例

下面是一个获取目标数据并写入 mysql 数据库的示例

  1. {
  2. "id": "rule",
  3. "sql": "SELECT stuno as id, stuName as name, format_time(entry_data,\"YYYY-MM-dd HH:mm:ss\") as registerTime FROM SqlServerStream",
  4. "actions": [
  5. {
  6. "log": {
  7. },
  8. "sql": {
  9. "url": "mysql://user:test@140.210.204.147/user?parseTime=true",
  10. "table": "test",
  11. "fields": ["id","name","registerTime"]
  12. }
  13. }
  14. ]
  15. }

根据 tableDataField 配置将结果写入数据库:

以下配置将 telemetry 字段的对应值写入数据库

  1. {
  2. "telemetry": [{
  3. "temperature": 32.32,
  4. "humidity": 80.8,
  5. "ts": 1388082430
  6. },{
  7. "temperature": 34.32,
  8. "humidity": 81.8,
  9. "ts": 1388082440
  10. }]
  11. }

json lines { "id": "rule", "sql": "SELECT telemetry FROM dataStream", "actions": [ { "log": { }, "sql": { "url": "mysql://user:test@140.210.204.147/user?parseTime=true", "table": "test", "fields": ["temperature","humidity"], "tableDataField": "telemetry", } } ] }