Apache Kylin权威指南2.6 SQL参考

    xiaoxiao2023-12-19  158

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

    相关资源:Apache Spark源码剖析
    最新回复(0)