实时监控 CEP 引擎状态及数据

可通过 DolphinDB 的 WEB 页面对 CEP 引擎进行监控。CEP 引擎监控页面实时展示了以下内容:

  • 所有 CEP 引擎及其内部子引擎的信息:包含引擎创建者、状态、事件接收和处理情况、通过页面发送事件等。

  • 数据视图:用于监控用户自定义的 CEP 引擎内的数据。

关于 WEB 页面的展示和操作请参考《流计算监控》。本章重点介绍数据视图的实现接口。

数据视图

CEP 引擎内部计算为事件触发,随着事件不断地注入引擎,引擎内部会产生许多不断更新的中间变量(监控值)。用户通常希望监控到这些变量的最新值及其变化趋势。因此,DolphinDB 提供了 DataView 引擎,允许 CEP 引擎在运行过程中将监控值写入 DataView 引擎。DataView 引擎负责维护每个监控值的最新快照,并将数据输出到目标表(通常为流表),供其它程序订阅。DataView 引擎中维护的数据称为 DataView。在 CEP 系统中,可以创建多个 DataView 引擎,并在创建时指定需要维护的监控值名称。请注意,数据视图页面仅展示监控值的最新快照,不支持查看历史快照。若需要查看监控值的历史快照和趋势变化图,请使用数据面板(Dashboard)。

创建 DataView 引擎

通过以下接口创建一个 DataView 引擎,返回一个键值表。该表记录了每个键值对应的最新记录。

语法

createDataViewEngine(name, outputTable, keyColumns, timeColumn, [useSystemTime=true], [throttle])

参数

name 字符串,表示 DataView 引擎的名称,可包含字母,数字和下划线,但必须以字母开头。

outputTable 一个表,可以是内存表或分布式表,用于存储 DataView 引擎中的数据。如果需要前端展示实时数据,或绘制数据变化趋势图,则 outputTable 必须指定为一个流表。

keyColumns 字符串标量或向量,为 outputTable 中的列名。引擎将使用指定列中数据的唯一(组合)值作为引擎的键值,对于每个键值,引擎都只保留 1 条数据。

timeColumn 一个字符串,表示指定 outputTable 中时间列的名称。

useSystemTime 布尔值,表示是否使用数据注入引擎时的系统时间作为输出的时间列。

  • useSystemTime=true,输出表中的时间列为系统时间,此时数据中不能包含时间列。

  • useSystemTime=false,输出表中的时间列为数据中的时间,此时需要写入的数据中包含时间。

throttle DURATION 类型,用于设置 DataView 引擎输出数据到 outputTable 的时间间隔。

获取最新数据

通过以下两种方式,可以获取 DataView 引擎中的数据:

  • 在 CEP 引擎内部创建的 DataView,通过 getDataViewEngine 获取指定 DataView 引擎的数据。
  • 在 CEP 引擎外部创建的 DataView,通过 getStreamEngine 获取指定 DataView 引擎的数据。

语法

getDataViewEngine([CEPEngine], dataViewEngineName)

参数

CEPEngine CEP 引擎的句柄。

dataViewEngineName DataView 引擎的名称。

下例未指定 CEP 引擎,则在当前 CEP 引擎中获取名为 dv1 的 DataView 引擎中的数据。

dvEngine= getDataViewEngine(,"dv1"")
select * from dvEngine

下例中获取 cep1 中名为 dv1 的 DataView 引擎中的数据。

dvEngine= getDataViewEngine(`cep1,`dv1)
select * from dvEngine

通过 getStreamEngine 获取在 CEP 引擎外部定义的 DataView 引擎中的数据。

select * from getStreamEngine(dataViewEngineName)

向 DataView 引擎写入数据

createDataViewEngine 函数返回一个表,因此支持通过 append!, tableInsert, insert into 等方法向 DataView 引擎写入数据。在向 DataView 引擎写入数据前,需要先通过 getDataViewEngine(,dataViewEngineName) 获取 DataView 引擎的句柄。

更新数据视图指定键值的数据

通过以下接口更新 DataView 引擎中指定键值对应的指定字段的值。若 keys 指定的键值列(key)不存在,则更新时会报错 。

updateDataViewItems(engine, keys, valueNames, newValues)

参数

engine DataView 引擎句柄。

keys 标量、向量或 tuple,表示需要更新的键值, 如果是复合键值,则需要传入一个 tuple,其中每个元素表示组成键值的列,且顺序需与引擎中 keyedColumns 的指定顺序保持一致。

valueNames 字符串标量或向量,需要更新的字段的名称,需要与 DataView 引擎中 outputTable 指定的列名匹配。

newValues 标量、向量或 tuple,表示需要更新的字段对应的值。指定方式同 keys

该函数可在 CEP 引擎内部或外部调用。如果在 CEP 引擎内部调用此函数,系统将优先在 CEP 引擎中查找句柄为 engine 的 DataView 引擎;若未找到,则会在 CEP 引擎外部进行查找。如果在 CEP 引擎外部调用此函数,系统只会在 CEP 引擎外部进行查找。

删除数据视图指定键值的数据

通过以下接口删除 DataView 引擎中指定键值的数据。若 keys 指定的键值列(key)不存在,则删除时会报错 。

deleteDataViewItems(engine, keys)

参数说明:

engine DataView 引擎句柄。

keys 需要更新的键值, 如果是复合键值,则需要传入一个 tuple,其中每个元素表示组成键值的列,且顺序需与引擎中 keyedColumns 的指定顺序保持一致。

该函数可在 CEP 引擎内部或外部调用。如果在 CEP 引擎内部调用此函数,系统将优先在 CEP 引擎中查找句柄为 engine 的 DataView 引擎;若未找到,则会在 CEP 引擎外部进行查找。如果在 CEP 引擎外部调用此函数,系统只会在 CEP 引擎外部进行查找。