天天看点

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