概述:運行在 JVM 上的 SQL 函數和存儲過程
總所周知,有些數據庫沒有強大的分析函數(eg. Mysql), 有些數據庫沒有存儲過程(eg. Vertica),當遇到復雜的數據計算,往往只能通過 Python,R 等外部腳本來實現,但這些腳本語言和主流工程語言(Java)集成性不好,如果直接用工程語言實現類似 SQL 函數和存儲過程的功能,經常只是針對某個計算需求編寫冗長的代碼,代碼幾乎不可復用。
另外,即便擁有強大的分析函數,實現稍復雜的邏輯其實也不算容易,比如下面這種常見的業務計算,找出“銷售額占到一半的前 n 個客戶,并按銷售額從大到小排序”,在 Oracle 中 SQL 實現如下:
with A as(selectCUSTOM,SALESAMOUNT,row_number() over (order by SALESAMOUNT) RANKINGfrom SALES)select CUSTOM,SALESAMOUNTfrom (select CUSTOM,SALESAMOUNT,sum(SALESAMOUNT) over (order by RANKING) AccumulativeAmountfrom A)where AccumulativeAmount>(select sum(SALESAMOUNT)/2 from SALES)order by SALESAMOUNT desc
說明:按照銷售額累計值從小到大排序,通過累計值大于“一半銷售額”的條件,逆向找出占到銷售額一半的客戶。為了避免窗口函數在計算累計值時對銷售額相同的值處理出現錯誤,用子查詢先計算了排名。
下面是用集算器實現相同邏輯的代碼:
從上述代碼我們可以看到,集算器利用一套簡潔的語法取代了需嵌套 SQL+ 窗口函數才能實現的邏輯,并且具有通用一致性(任何數據源代碼一致)。
集算器是一套運行在 JVM 上專門處理結構化數據的腳本語言,類似用 SQL 函數和存儲過程,與 Java 集成可以創建可移植、功能強大和與數據庫無關的計算邏輯,運行于中間層的計算邏輯和運行于數據庫層的數據邏輯之間的分離,提高了應用程序的可擴展性、靈活性和可維護性。
應用場景:報表數據準備
應用結構
集成后,集算器嵌入報表應用層,相當于本地的邏輯數據庫(不需要單獨服務器部署),在報表與數據源間作為報表數據準備層,完成各種復雜的計算任務。
如何集成
下面以 Vertica 為數據源,Birt 為報表工具,描述怎樣集成 esProc 作為數據準備層。
(一) Birt 開發環境
1、 基礎 jar 集成
集算器 JDBC 需要三個基礎 jar 包,都可以在 [esProc 安裝目錄]/esProc/lib 目錄下找到,分別為:
dm.jar 集算器計算引擎及JDBC驅動包
jdom.jar 解析配置文件
icu4j/_3/_4_5.jar 處理國際化
除了基礎包外,還有一些為完成特定功能的 jar 包。如,要在集算器 JDBC 用其它數據庫作為集算器的數據源,那么還需要相應數據庫的驅動 jar 包,本文涉及到 vertica,所以要同時增加其 JDBC 驅動包(以 vertica9.1。0 為例)
vertica-jdbc-9.1.0-0.jar vertica 官網即可下載
獲取到以上 Jar 后,將其拷貝至 Birt 開發環境 [安裝目錄]/plugins/org.eclipse.birt.report.data.oda.jdbc_4.6.0.v20160607212 下。
注意:標紅部分,不同 birt 版本略有不同
2、 配置文件集成
raqsoftConfig. ,主要包含集算器授權、腳本文件路徑、其他作為集算器數據源的連接配置等。
可在 [esProc 安裝目錄]/esProc/config 下找到,需復制后放置在類路徑下,同樣將其拷貝至 Birt 開發環境 [安裝目錄]/plugins/org.eclipse.birt.report.data.oda.jdbc_4.6.0.v20160607212 下。
注意:配置文件名不能改變
(二) Birt 應用環境
1、 將(一)中的所有 jar 拷貝至應用的 WEB-INF/lib 下
2、 將 raqsoftConfig. 拷貝至應用的 WEB-INF/classes 下
例一:常規調用
1、 Vertica 內 Sales 表字段及數據說明(通過 vsql 查詢,本測試庫有 2013/14/15 年數據)
2、 編寫并部署 esProc 腳本
(1) esProc 設計器添加 vertica JDBC 驅動包
vertica 官網下載 jdbc 驅動包(如,vertica-jdbc-9.1.0-0.jar),放至【esProc 安裝目錄】/common/jdbc 下
(2) 新增 vertica 數據源
打開設計器,Tool―Datasource connection 新增 JDBC 方式連接
點 ok 保存,再點 connect 連接
數據源名稱變為粉色即表示連接成功。
(3) 編寫算法腳本 (文件:VerticaExternalProcedures.dfx)
File 主站蜘蛛池模板: 久久爽精品区穿丝袜 | 国产精品hd免费观看 | 一级做a爰片性色毛片2021 | 久久久久国产成人精品亚洲午夜 | 国产精品麻豆91 | 欧产日产国产精品乱噜噜 | 久草在线播放视频 | 激情毛片| 欧美大电影免费观看 | 欧美一级精品片在线看 | 久久久久国产一区二区三区不卡 | 最新中文字幕在线 | 久久久麻豆| 中文字幕专区高清在线观看 | 国产成人精品一区二区视频免费 | 欧美视频一区二区 | 一区国产在线 | 欧美日韩中文字幕在线视频 | 亚洲第一成网站 | 亚洲影视在线观看 | 多男操一女视频 | 在线成人免费观看视频 | 久久免费视频5 | 在线看小早川怜子av | 91超在线 | 精品一区二区三区免费爱 | 九九爱视频 | 99精品国产一区二区三区 | 日韩在线播放第一页 | 美女黄视频在线观看 | 国产美女精品视频 | 国产精品一区在线免费观看 | 真人一级毛片免费 | 在线97视频 | 成年免费看 | 国产精品久久久久久一区二区三区 | wwwxxx国产 | 欧美福利视频一区二区 | 日韩大片在线永久观看视频网站免费 | www久久国产 | 韩国三级日本三级香港三级黄 |