源 Sources
源(source)用于从外部系统中读取数据。数据源既可以是无界的流式数据,即流;也可以是有界的批量数据,即表。在规则中使用时,至少有一个源必须为流。
源定义了如何连接到外部资源,然后采用流式方式获取数据。获取数据后,通常源还会根据定义的数据模型进行数据解码和转换。
定义和运行
在 eKuiper 中,定义数据源的流或者表之后,系统实际上只是创建了一个数据源的逻辑定义而非真正物理运行的数据输入。此逻辑定义可在多个规则的 SQL 的 from
子句中使用。只有当使用了该定义的规则启动之后,数据流才会真正运行。
默认情况下,多个规则使用同一个源的情况下,每个规则会启动一个独立的源的运行时,与其他规则中的同名源完全隔离。若多个规则需要使用完全相同的输入数据或者提高性能,源可定义为共享源,从而在多个规则中共享同一个实例。
解码
用户可以在创建源时通过指定 format
属性来定义解码方式。当前支持 json
、binary
、protobuf
和 delimited
格式,你也可以使用自己的编码格式,并将该字段定义为 custom
。
数据结构
用户可以像定义关系数据库表结构一样定义数据源的结构。部分数据格式本身带有数据结构,例如 protobuf
格式。用户在创建源时可以定义 schemaId
来指向模式注册表 ( Schema Registry ) 中的数据结构定义。
其中,模式注册表中的定义为物理数据结构,而数据源定义语句中的数据结构为逻辑数据结构。若两者都有定义,则物理数据结构将覆盖逻辑数据结构。此时,数据结构的验证和格式化将有定义的格式负责,例如 protobuf
。若只定义了逻辑结构而且设定了 strictValidation
,则在 eKuiper 的运行时中,数据会根据定义的结构进行验证和类型转换。若未设置验证,则逻辑数据结构主要用于编译和加载时的 SQL 语句验证。若输入数据为预处理过的干净数据或者数据结构未知或不固定,用户可不定义数据结构,从而也可以避免数据转换的开销。
流和表
源定义了与外部系统的连接方式。在规则中,根据数据使用逻辑,数据源可作为流或者表使用。 详细信息请参见流和表。