Skip to content

eKuiper 流是无界且不可变的,任何新数据都会附加到当前流中进行处理。 Table 用于表示流的当前状态。它可以被认为是流的快照。用户可以使用 table 来保留一批数据进行处理。

有两种类型的表。

  • 扫描表(Scan Table):在内存中积累数据。它适用于较小的数据集,表的内容不需要在规则之间共享。
  • 查询表(Lookup Table):绑定外部表并按需查询。它适用于更大的数据集,并且在规则之间共享表的内容。

语法定义

表支持与流几乎相同的语法。要创建表,请运行以下 SQL:

sql
CREATE TABLE 
    table_name 
    ( column_name <data_type> [ ,...n ] )
    WITH ( property_name = expression [, ...] );

表支持与流相同的 数据类型。 表还支持所有流的属性。因此,表中也支持所有源类型。许多源不是批处理的,它们在任何给定时间点都有一个事件,这意味着表将始终只有一个事件。一个附加属性 RETAIN_SIZE 来指定表快照的大小,以便表可以保存任意数量的历史数据。

查询表的语法

语法与创建普通扫描表相同,只需指定 KIND 的属性为 lookup。下面是一个创建查询表的例子,它会与 redis 的数据库 0 绑定。

sql
CREATE TABLE alertTable() WITH (DATASOURCE="0", TYPE="redis", KIND="lookup")

目前,只有 memoryredissql 源可以作为查找表。

表的属性

属性名称可选描述
DATASOURCE取决于不同的源类型;如果是 MQTT 源,则为 MQTT 数据源主题名;其它源请参考相关的文档。
FORMAT传入的数据类型,支持 "JSON", "PROTOBUF" 和 "BINARY",默认为 "JSON" 。关于 "BINARY" 类型的更多信息,请参阅 Binary Stream。该属性是否生效取决于源的类型,某些源自身解析的时固定私有格式的数据,则该配置不起作用。可支持该属性的源包括 MQTT 和 ZMQ 等。
SCHEMAID解码时使用的模式,目前仅在格式为 PROTOBUF 的情况下使用。
KEYtrue表的主键。例如,对于SQL源,用于指定SQL表中的主键。并非所有的源类型都支持该属性。
TYPEtrue源类型。每个源类型可以支持一种或两种表。请参考相关文件。
CONF_KEY如果需要配置其他配置项,请在此处指定 config 键。 有关更多信息,请参见 MQTT stream
KINDtrue表的种类,可以是 scanlookup。如果没有指定,默认值是scan

使用场景

表是保留较为大量的状态的方法。扫描表将状态保存在内存中,而查找表将它们保存在外部,并可能是持久化的。扫描表更容易设置,而查找表可以很容易地连接到存在的持久化的状态。这两种类型都适用于流式批量综合计算。

请查看以下链接,了解一些典型场景。