DataQL —— 服務查詢引擎">DataQL —— 服務查詢引擎

分類:IT技術 時間:2017-10-04

DataQL 服務查詢引擎

  DataQL 是一款服務查詢框架,你可以把任意的服務通過 DataQL 進行查詢整合形成新的結果來使用。使用DataQL 將會極大的滿足業務靈活性上的開發需要。

   重要的事情要說三遍:DataQL 不是一門腳本語言!DataQL 不是一門腳本語言!!DataQL 不是一門腳本語言!!!

設計思想

  DataQL 的設計思想借鑒了 GraphQL。在借鑒的同時使用了全新的語法,同時增加了一些新特性。這些新特性會讓您用起來比 GraphQL 更加舒心,更加接地氣。

架構

特性

  1. 融入腳本特性,突破 GraphQL 只能做數據組織的界限,讓業務開發更加容易。

  2. 采用編譯執行,擁有飛快的執行速度。

  3. 支持使用 lambda 在查詢中定義函數。

  4. 支持表達式計算。

  5. 靈活的 UDF 擴展函數。

  6. 完全獨立,脫離 Hasor 依然可用。

  7. DataQL 支持 JSON 數據輸入。

  8. 支持運算符重載(功能暫不開放)

數據類型

  1. 在 DataQL 中總共包含三大數據類型。

    • 通常指的是具有一個或多個屬性集合的數據對象。任何一個 Java 對象都可以在 DataQL 當做結構體。

    • 當訪問結構體中的屬性時將會通過 get/set or field 進行讀取和訪問。

    • 數組、多維數組、List、Set。在 DataQL 中都可以作為集合類型進行處理。

    • 默認集合類型采用的是 ArrayList 保存和處理。

    • udf函數調用後未經處理的原始數據,原始數據可能是任何一個 java 中的對象。

    • 基本類型

    • 原始類型

    • 集合類型(List)

    • 結構體(struts)

  2. 基本類型定義及其取值範圍(基本與Java相同)

    • null

    • 雙引號括起來的,或者是單引號括起來的:"xxx" or 'xxx'

    • 字節型(byte),長度8, 取值範圍:-128 ~ 127

    • 短整型(sort),長度16,取值範圍:-32768 ~ 32768

    • 整型(int), 長度32,取值範圍:-2147483648 ~ 2147483648

    • 長整型(long),長度64,取值範圍:-9233372036854477808 ~ 9233372036854477808

    • 浮點型(float),長度32,取值範圍:-3.40292347E+38 ~ 3.40292347E+38

    • 雙精度(double),長度64,取值範圍:-1.79769313486231570E+308 ~ 1.79769313486231570E+308

    • 大整數(BigInteger),取值範圍:java.math.BigInteger

    • 大浮點數(BigDecimal),取值範圍:java.math.BigDecimal

    • true、false

    • 布爾(boolean)

    • 數值(number)

    • 字符串(string)

    • 空或未定義

計算精度

  1. 浮點數計算精度,默認值保留小數點後20位。

  2. 您可以通過 “option MAX_DECIMAL_DIGITS = 20” 來硒鼓改浮點數的默認保留位數。

  3. 小數默認舍入規則為:四舍五入。如需更換舍入規則需要通過 “option NUMBER_ROUNDING = "HALF_EVEN" ” 更換

    • UP:向遠離零的方向舍入。舍棄非零部分,並將非零舍棄部分相鄰的一位數字加一。

    • DOWN:向接近零的方向舍入。舍棄非零部分,同時不會非零舍棄部分相鄰的一位數字加一,采取截取行為。

    • CEILING:向正無窮的方向舍入。如果為正數,舍入結果同ROUND_UP一致;如果為負數,舍入結果同ROUND_DOWN一致。註意:此模式不會減少數值大小。

    • FLOOR:向負無窮的方向舍入。如果為正數,舍入結果同ROUND_DOWN一致;如果為負數,舍入結果同ROUND_UP一致。註意:此模式不會增加數值大小。

    • HALF_UP:向“最接近”的數字舍入,如果與兩個相鄰數字的距離相等,則為向上舍入的舍入模式。如果舍棄部分>= 0.5,則舍入行為與ROUND_UP相同;否則舍入行為與ROUND_DOWN相同。這種模式也就是我們常說的我們的“四舍五入”。

    • HALF_DOWN:向“最接近”的數字舍入,如果與兩個相鄰數字的距離相等,則為向下舍入的舍入模式。如果舍棄部分> 0.5,則舍入行為與ROUND_UP相同;否則舍入行為與ROUND_DOWN相同。這種模式也就是我們常說的我們的“五舍六入”。

    • HALF_EVEN:向“最接近”的數字舍入,如果與兩個相鄰數字的距離相等,則相鄰的偶數舍入。如果舍棄部分左邊的數字奇數,則舍入行為與 ROUND_HALF_UP 相同;如果為偶數,則舍入行為與 ROUND_HALF_DOWN 相同。註意:在重復進行一系列計算時,此舍入模式可以將累加錯誤減到最小。此舍入模式也稱為“銀行家舍入法”,主要在美國使用。四舍六入,五分兩種情況,如果前一位為奇數,則入位,否則舍去。*/

    • UNNECESSARY:斷言請求的操作具有精確的結果,因此不需要舍入。如果對獲得精確結果的操作指定此舍入模式,則拋出ArithmeticException。

表達式計算

  1. 算數運算:加(+)、減(-)、乘(*)、除(\)、整除(/)、求余(%)、取反(-)

  2. 邏輯運算:與(&&)、或(||)、非(!)、異或(^)

  3. 比較運算:大於(>)、大於等於(>=)、小於(<)、小於等於(<=)、不等於(!=)、等於(==)

  4. 二進制位運算:與(&)、或(|)、異或(^)、向左位移(<<)、向右位移(>>)、不帶符號向右位移(>>>)

基礎語法

  1. 設置查詢選項:"option key = value;"

  2. 執行查詢:"var query = ..."

  3. 結束查詢並返回結果:"return ..."

  4. 退出整個查詢並返回結果:"exit ..."

  5. 中斷查詢並拋出異常:"throw ..."

  6. 定義函數:"var name = lambda : () -> ..."

  7. 調用UDF或lambda函數:"var name = udfName() ..."

  8. 未完待續...


Tags: DataQL 數據 服務查詢 一門 腳本 emsp

文章來源:


ads
ads

相關文章
ads

相關文章

ad