<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月)還未包含在最新的發行版中。如無意外,應該會在下一個發行版中釋出