vertica 如何實現儲存過程?

xiaohuihui發表於2020-05-21

JAVA 等通用語言缺乏結構化計算類庫,即使最簡單的結構化演算法,比如查詢、排序、聚合,也要從零開始硬編碼。對於很常用的演算法,比如分組彙總、關聯查詢,則要編寫大篇幅的程式碼。對於複雜些的演算法,甚至要設計多個類才能勉強實現。

只要多花時間,JAVA 總是可以實現演算法的,但高耦合性的缺點卻無法避免。儲存過程本應獨立於 JAVA 程式碼,修改儲存過程本不該影響 JAVA 程式碼。但 JAVA 開發的儲存過程會和其他 JAVA 程式碼緊密耦合,只要修改儲存過程,就必然重新編譯打包整個專案,專案的維護成本必然升高。

如果使用集算器,實現 vertica 儲存過程就會容易很多。

imagepng

集算器具有豐富的結構化類庫,無論查詢、排序、聚合還是分組彙總、關聯查詢,都可以用內建函式直接實現。集算器也提供了針對結構化資料的分支判斷、迴圈語句、動態語法,複雜業務邏輯也可輕鬆實現。集算器還提供了標準的 JDBC 介面,供 JAVA 程式碼呼叫,實際的儲存過程則以指令碼檔案的形式存在,修改儲存過程不影響 JAVA 程式碼。

例如:vertica 中 sales 表儲存銷售員的訂單信。

imagepng

邏輯演算法:對每一位銷售,找到他金額最大和最小的 3 筆訂單,分別打上 "top3" 和 "bottom3" 的標記,考慮到訂單數太少沒意義,特規定某銷售的訂單數小於 3 時,則不計算 top3,訂單數小於 6 時,則不計算 bottom3。計算結果應當如下:

imagepng

集算器程式碼如下:


A B C D
1 =connect@l("verticaDB")


2 =A1.cursor@x("select   * from sales  order by   sellerid,amount")
3 for   A2;sellerid

/for   each seller
4
if   A3.len()>=3 =A3.m(to(-1,-3)) =C4.derive("top3":orderType)
5
if   A3.len()>=6 =A3.m(to(3)) =C5.derive("bottom3":orderType)
6
=@|D4|D5
/merge   top+bottom for every seller
7 return   B6



關於集算器 JDBC 介面,可以參考

關於集算器安裝使用、獲得免費授權和相關技術資料,可以參

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69900830/viewspace-2693476/,如需轉載,請註明出處,否則將追究法律責任。

相關文章