集成
Apache Calcite
登录后可跨设备保存划线和私人笔记登录
Apache Calcite](https://calcite.apache.org/) 是业界标准的 SQL 解析器、校验器和 JDBC 驱动,几乎可以在任何数据源之前加上一层 SQL 前端。
PLC4X 与 Calcite 的集成正是这样一种数据源:它把 Event-Pump 配置中的标签批次转换为 SQL 表,从而可以通过 JDBC 使用普通 SQL 查询 PLC 数据。
该模块位于 plc4x-extras 仓库中:
<dependency>
<groupId>org.apache.plc4x</groupId>
<artifactId>plc4j-apache-calcite</artifactId>
<version>1.0.0</version>
</dependency>如何映射到 SQL
该集成通过一个普通的事件泵(Event-Pump)配置文件进行配置。
- 文件中的每个批处理(batch)对应一个表,表名取自该批处理
id。 - 该批处理的每个标签(tag)对应一个列,列名取自该标签。
- 每个表前都会附加两列:
timestamp(数值的读取时间)和source(数值来源连接的 id)。
列的类型根据接收到的第一条记录推断,因此在事件泵返回该批处理的第一个响应之前,查询会一直处于阻塞状态。
配置模式
Calcite 通过 model.json 指向该集成,使用 Plc4xSchemaFactory:
{
"version": "1.0",
"defaultSchema": "PLC4X",
"schemas": [
{
"name": "PLC4X",
"type": "custom",
"factory": "org.apache.plc4x.Plc4xSchemaFactory",
"operand": {
"config": "/path/to/event-pump.yml",
"limit": 100
}
}
]
}config
事件泵配置文件的路径。.json 和 .xml 文件分别以 JSON 和 XML 格式加载,其他任何文件则以 YAML 格式加载。
limit
表所保留的行数。正值会创建一个有界表,保留最后 limit 条记录——这是即席查询的常规选择。值为 0 或更小则会创建流式表,它永远不会终止,设计用于配合 Calcite 的流式 SQL 使用。
查询
模型就绪后,任何 JDBC 客户端都可以指向它:
Properties properties = new Properties();
properties.put("model", "/path/to/model.json");
try (Connection connection = DriverManager.getConnection("jdbc:calcite:", properties)) {
ResultSet rs = connection.createStatement().executeQuery(
"SELECT timestamp, temperature, pressure FROM boiler");
while (rs.next()) {
// ...
}
}评论
登录后参与评论
正在加载评论…
KnowForge