天天看點

Apache Kylin權威指南2.6 SQL參考

<b>2.6 sql參考</b>

<b></b>

apache kylin支援标準sql作為查詢語言,但是sql有很多變體,kylin支援的隻是sql所有變體中的一個子集,并不是支援所有現存的sql語句和文法。使用者在使用kylin之前,需要對kylin所支援的sql有一個了解,以避免走彎路。

首先,kylin作為olap引擎,隻支援查詢,而不支援其他操作,如插入、更新等,即所有的sql都必須是select語句,否則kylin會報錯。

第二,查詢kylin中sql語句的表名、列名、度量、連接配接關系時,需要至少跟一個cube的模型相比對;在設計cube的時候,需要充分考慮查詢的需求,避免遺漏表、列等資訊。

第三,kylin使用apache calcite做sql文法分析。apache calcite是一個開源的sql引擎,它提供了标準sql解析、多種查詢優化和連接配接各種資料源的能力;calcite項目在hadoop中越來越引人注意,并且已被衆多項目內建為sql解析器。

一條sql語句首先需要被calcite解析,然後才可以被kylin執行。下面是calcite中的select語句的文法(引自https://calcite.apache.org/docs/reference.html):

select [ stream ] [ all | distinct ]

            { * | projectitem [, projectitem ]* }

        from tableexpression

        [ where booleanexpression ]

        [ group by { groupitem [, groupitem ]* } ]

        [ having booleanexpression ]

        [ window windowname as windowspec [, windowname as windowspec ]* ]

projectitem:

        expression [ [ as ] columnalias ]

    |   tablealias . *

tableexpression:

        tablereference [, tablereference ]*

    |   tableexpression [ natural ] [ left | right | full ] join tableexpression

[ joincondition ]

joincondition:

        on booleanexpression

    |   using '(' column [, column ]* ')'

第四,不是所有的calcite能夠解析的select語句都可以被kylin執行;還有一些sql功能,現階段kylin(截止v1.5.3)還不支援,未來會考慮加以實作,目前已知的有如下三項sql功能。

window函數:https://issues.apache.org/jira/browse/kylin-1732

union:https://issues.apache.org/jira/browse/kylin-1206

between and: https://issues.apache.org/jira/browse/kylin-1770

上述三個功能已經在apache kylin主分支上得以實作,但目前(2016年8月)還未包含在最新的發行版中。如無意外,應該會在下一個發行版中釋出