规则引擎介绍


在数据接入过程中,还需要对数据进行清洗和处理。唯简M³Meta平品提供了分布式规则处理引擎,可以在整个数据中台集群范围内实现对队列数据的复杂规则操作,包括数据清洗、数据计算、格式转换、数据丰富、数据关联、日志分词、数据标签等。

数据清洗

数据清洗的任务是过滤那些不符合要求的数据,不符合要求的数据主要是有不完整的数据、错误的数据和重复的数据三大类。

  • 不完整的数据,是一些应该有的信息缺失,如供名称或客户基本信息的缺失、业务系统中主表与明细表不能匹配等。补全后才写入数据仓库。
  • 错误的数据,产生原因是业务系统不够健全,在接收输入后没有进行判断直接写入后台数据库造成的,比如数值数据输成全角数字字符、字符串数据后面有一个回车、日期格式不正确、日期越界等。这种数据修改以后再入库。
  • 重复的数据,特别是维表中比较常见,将重复的数据的记录所有字段导出来,确认并做合并整理。

数据处理

数据处理就是将数据进行转换或归并,从而构成一个适合数据处理的描述形式。数据处理包含以下处理内容。

平滑处理

帮助除去数据中的噪声,主要技术方法有 Bin 方法、聚类方法和回归方法。

合计处理

对数据进行总结或合计操作。例如,每天的数据经过合计操作可以获得每月或每年的总额。这一操作常用于构造数据立方或对数据进行多粒度的分析。

数据泛化处理

用更抽象(更高层次)的概念来取代低层次或数据层的数据对象。

例如,街道属性可以泛化到更高层次的概念,如城市、国家,数值型的属性,如年龄属性,可以映射到更高层次的概念,如年轻、中年和老年。

规格化处理

规格化处理就是将一个属性取值范围投射到一个特定范围之内,以消除数值型属性因大小不一而造成挖掘结果的偏差,常常用于神经网络、基于距离计算的最近邻分类和聚类挖掘的数据预处理。规格化处理将有关属性数据按比例投射到特定的小范围之中。例如,将属性值映射到 0 到 1 范围内。

属性构造处理

根据已有属性集构造新的属性,以帮助数据处理过程。属性构造方法可以利用已有属性集构造出新的属性,并将其加入到现有属性集合中以挖掘更深层次的模式知识,提高挖掘结果准确性。

例如,根据宽、高属性,可以构造一个新属性(面积)。构造合适的属性能够减少学习构造决策树时出现的碎块情况。此外,属性结合可以帮助发现所遗漏的属性间的相互联系,而这在数据挖掘过程中是十分重要的。

可扩展的日志分词规则

日志信息作为重要的一类运维数据,具备非结构化、数据量大的特点,M³Meta平台支持在规则中进行分词设置,满足对非结构化日志数据的快速结构化处理。

TEXT处理正则

数据分发

数据处理规则引擎提供的forward转发功能,将数据转发至其他队则继续进行处理,也支持将数据通过转发功能通过KAFKA、NATS等队列服务转发至其他第三方系统。

Cache机制

在处理规则中提供不同类型的Cache机制,包括面向分布式规则处理的全局化Cache、针对于类表的表级别本地Cache,以及针对于外表文件的文件表Cache。

全局化Cache

全局化Cache支持在分布式处理环境下,各个规则能够共用Cache空间。同时,支持设置Ttl,定义Key/Value Cache自动失效事件。

-- setvar: Set gloabl cache var

-- params: <key string>, <value any>, <ttl int>, <domain string (Optional)>

-- return: None

setvar('K1', 'V1', 0, '') -- No TTL

setvar('K1', 'V1', 30, '') -- TTL seconds

-- getvar: Get gloabl cache var

-- params: <key string>, <domain string (Optional)>

-- return: <value any>

local ret = getvar('K1', '')

-- getvars: Get all gloabl cache var

-- params: <domain string (Optional)>

-- return: <result table>

local ret = getvars('')

类表级别本地Cache

类表级别本地Cache支持将指定类表数据进行Cache,供经过此规则的数据使用。当类表数据发生变化时,需要调用方法刷新Cache通知运行规则,适合于不经常变化的Cache数据。

-- classcache: Query class cache by conditions

-- params: <class string>, <where string>

-- where: Query logic expression

--     ||

--     &&

--     = != > < >= <= ~= !~= is isnot contains

--     + -

--     * / %

--     ^

--     ( )

-- return: <result table>

local ret = classcache('/test', "id = 'ID1'")

外表文件的文件表Cache

外表文件的文件表Cache是利用外表文件定义的表结构,实现高效快速的Cache定义和查询,适合于变化较频繁,且是表结构的Cache内容,通常被应用于数据的丰富、关联等操作。

-- lookup: Lookup extend info

-- params: <extendName string>, <condition table>

-- return: <result table>

local ret = lookup('hostinfo', {key='mxsvr1'})

IBM Omnibus规则算子支持

在规则中兼容IBM omnibus监控产品算子,满足了相关数据集成的需求。

-- charcount: Returns the number of characters in a string.

-- params: <str string>

-- return: <count number>

local count = omni.charcount('ABCDE12345')

-- clear: Removes the elements of an array.

-- params: <table string>

-- return: None

clearTable = {'A', 'B', 'C'}

omni.clear(clearTable)

-- extract: Returns the part of a string (which can be a field,element, or string expression) that matches theparenthesized section of the regular expression.

-- params: <str string>, <regxp string>

-- return: <str string>

local exts = omni.extract('Access Port 123 ok', 'Port ([0-9]+)') -- exts: Port 123

-- length: Converts a numeric value into an integer.

-- params: <str string>

-- return: <len number>

local strlength = omni.length('ABCDE12345')

-- log: Enables you to log messages.

-- params: <level string>, <msg string>

-- return: None

omni.log('DEBUG', 'Value is 1')

-- match: Tests for an exact string match.

-- params: <str1 string>, <str2 string>

-- return: <ok bool>

local str = omni.match(str1, 'abc')

-- nmatch: Tests for a string match at the beginning of aspecified string.

-- params: <str string>, <prefix string>

-- return: <ok bool>

local str = omni.nmatch(str, 'a')

-- regmatch: Performs full regular expression matching of avalue in a regular expression in a string.

-- params: <str string>, <reg string>

-- return: <ok bool>

local str = omni.regmatch(str, '^Name:[0-9]')

规则开发工具

支持在线编辑规则

M³Meta中的分布式规则处理引擎为用户提供了灵活的规则定义工具,可以根据实际的数据处理需求,进行数据处理规定的定制。分布式规则处理引擎支持脚本化的处理规则编写,支持lua语言脚本嵌入。

规则在线编辑

支持在线规则调试

在处理规则编写过程中,支持对规则进行在线编写,同时支持对规则进行在线debug,如图11‑88所示。此处“在线”有两个含义:一是编辑和debug工作在小应用UI上进行,二是编辑后生效或debug时无需重启相应的后台线程。

在线规则调试

results matching ""

    No results matching ""