如何将 Thingsboard 中的时间序列数据作为 CSV 或 JSON 文件保存到外部文件系统?

How to to save timeseries data in Thingsboard to external file system as CSV or JSON file?

将时间序列数据保存到外部文件系统以便在另一个平台上进一步处理的最佳方式是什么?

最好的意思是:

解决方案可以接近实时或批处理,因为最终目的地是用于分析,不需要最后一分钟的信息。

我想了几种方法,但我想得到一些建议或想法,看看哪一种更方便。当然,如果有任何其他我没有想到的想法,我将不胜感激。

对于近实时模式:

  1. 在规则链中,使用 Save Timeseries 节点之后的节点保存数据。

    一个。这会显着影响性能吗?因为它会在每次调用节点时向文件系统添加一个保存操作。

    b。有这样的节点的代码示例吗?

  2. 使用 Rest API 调用节点将 POST 时间序列数据传输到端点并在端点处生成文件。

    一个。这有任何表现的机会吗?

    b。是否有任何代码示例说明如何操作?

  3. 使用 Kafka 节点将时间序列数据转发到 Kafka 服务器并从那里转发到最终目的地。

    一个。这引入了另一层 (Kafka),它需要另一种专业知识和更多资源。

    b。有人成功地使用过这个节点吗?而且,您介意分享和示例吗?

对于批处理模式:

  1. 找出TB在Cassandra内部使用了哪些表,并编写脚本直接从数据库中提取信息。

    一个。这需要对 Cassandra 内部的 TB 数据模型和 Cassandra 本身有很好的了解才能编写脚本。所以它看起来不像是非常 natural/integrated 解决问题的方法。

  2. 创建一个规则链,在一定的时间间隔触发查询,检索一个时间段的 TB 保存的时间序列数据,然后使用一些接近实时的选项在一次操作中保存文件.

我会尽量回答

如果您正在使用社区 TB 并有权访问代码库,我会编写一个可以附加的“文件”节点 post“保存时间序列”并写入文件系统。如果适用,您甚至可以为此编写一个“ftp”节点。 TB 文档中提供了编写自定义规则节点的文档。

如果您严格来说是 TB 应用程序的用户并且可以访问规则链,那么我会使用 MQTT 节点将数据发送到外部系统,然后从那里处理数据。 “低代码”选项可以是 Node-RED,您可以在其中设置 MQTT 代理、接收数据并使用“文件”节点写入文件系统。

关于将其保存为 CSV 或 JSON,时间序列数据默认为 JSON,因此您可以将其传递。如果是CSV,你可以再写一个CSV节点或者在写入文件系统之前在接收端做转换。

希望这对您有所帮助。