zl程序教程

您现在的位置是:首页 >  数据库

当前栏目

Apache Kylin权威指南2.6 SQL参考

2023-03-09 22:22:10 时间

2.6 SQL参考


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