前言:規則引擎通過将業務規則和開發者的技術決策分離, 實作了動态管理和修改業務規則而又不影響軟體系統的需求。以下通過執行個體對基于SQL 查詢、自定義規則等一系列場景來說明規則引擎在資料分析中的應用。
在現代的企業級項目開發中, 商業決策邏輯或業務規則往往是寫死嵌入在系統各處代碼中的。但是外部市場業務規則是随時可能發生變化的, 這樣開發人員必須時刻準備修改、更新系統,降低了效率。在這種背景下, 規則引擎應運而生,它通過将業務規則和開發者的技術決策分離, 實作了動态管理和修改業務規則而又不影響軟體系統的需求。規則引擎具有廣泛的應用領域, 同樣也适用于資料分析和清洗。
假設我們有以下所示的一個表結構:
字段名
字段類型
說明
Name
Varchar(50)
姓名
Sex
Int
性别(1:男,0:女)
Department
部門
Salary
工資
我們可能需要判斷工資(Salary)字段不超過5000,按照此規則對該表中的資料進行清洗分析。
通過規則引擎進行資料分析将遵從以下所示的結構步驟:
1:需分析的資料
2:資料讀取
3:将資料寫入記憶體
4:規則庫
5:規則引擎
6:分析結果
工作原理:
首先從需要分析的資料庫中按照批次讀取資料,然後将讀取的資料放入記憶體中,再按照規則對記憶體中的資料進行過濾分析,當記憶體中的資料分析完成後,清空記憶體中的資料,再讀取下一批資料進來進行新一輪的分析,知道所有的資料處理完畢為止。
<b>規則庫</b>
用于判斷工資的業務内容我們用<b>旗正規則引擎</b>提供的自然語言來進行表示,進而構成規則庫,如下圖所示:
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicWZwpmL4MTZ5QDZkVmZ1MWOzEzY2UTZ5IGNzEjMyEWO1UTM5IDM5QWOkVGZm9CXt92Yu4GZjlGbh5SZslmZxl3Lc9CX6MHc0RHaiojIsJye.jpeg)
上面的例子中,我們主要做的工作就是不停的判斷人員的工資情況,大于5000就發出警告資訊,并把該條資料提取出來,存放其他指定的地方。
下面我們再用一個實際的例子來做一個規則引擎的示例,說明如何用旗正規則引擎來表示資料分析中的業務規則
在車管所電子檔案系統中存在如下所示的資料表:PF_Table,用于記錄檔案圖檔的基本資訊,我們對該表進行資料分析,忽略資料的完整性和有效性,我們隻看有多少資料違反了以下說明的業務規則
fNo(名額)
paNo(頁号)
Path(存放路徑)
caNo(檔案)
baNo(業務)
0217233
1
\2008032403\0217233\1.jpg
406101
2008032403
2
\2008032403\0217233\2.jpg
406102
3
\2008032403\0217233\3.jpg
406105
4
\2008032403\0217233\4.jpg
406108
2008032401
業務規則
1:path由三部分組成:業務類型,名額檔案,頁号。
業務類型:必須與baNo一緻
名額檔案:必須與fNo一緻
頁号:必須與paNo一緻
我們可以把旗正規則引擎對資料的分析簡單概括為3個步驟
1:規則引擎從資料庫中讀取資料,并将讀取的資料加載到記憶體中
2:取出記憶體中的資料進行分析,校驗,處理
3:傳回結果資料,将髒資料存儲到指定的地方或者輸出其他的檔案和資訊
第一步:取出資料
這個過程主要是通過規則引擎從資料庫中讀取資料,并把資料存放到記憶體中,旗正規則引擎規則引擎提供一個獨特的功能,就是允許規則引擎直接通路資料庫,而不需要其他任何外部程式代碼來協助。過程和傳統的編碼方式一樣,編寫SQL查詢語句,然後執行查詢,将結果存入記憶體。
對一個資料庫進行分析的過程中,資料量肯定是巨大的,是以在編寫SQL語句讀取資料這個環節,我們要做一個說明:它可能需要DBA或者是專業的資料庫操作人員來完成,這個和規則引擎沒有關系,規則引擎隻負責執行查詢,以及後續動作。
在這裡我僅用一個簡單的查詢語句來說明旗正規則引擎提供的這個功能:
select top(10) * fromPF_Table
這表示我隻讀取PF_Table資料表的前10條資料來進行處理
通過規則引擎對象庫中添加test.dbs資料庫連接配接對象,然後通過該連接配接就可以直接通路資料庫,編寫查詢,插入,删除,更新等語句
在SQL語句編寫完成後,我們就可以在規則中執行該語句
在規則包中添加一條規則,然後将複制的執行SQL的方法粘貼到規則的那麼中
這樣,當規則運作的時候就會執行該查詢,同時會把查詢得到的資料放入到記憶體中,在這裡我們定義了記憶體表這個規則對象,可以直覺的看到記憶體中的資料
第二步:資料分析處理
資料加載到記憶體中以後,我們需要取出來用配置好的規則來進行分析過濾
因為path由3部分組成,每個部分都有對應的規則,是以我們先把這3部分按照特定的字元來分開,然後看第一部分是否與業務類型一緻,第二部分是否與名額檔案,第三部分的數字是否與頁号一緻,如果任何一個不一緻,那麼該條資料是錯誤的資料