<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月)还未包含在最新的发行版中。如无意外,应该会在下一个发行版中发布