Mingcan Wang created FLINK-37121:
------------------------------------

             Summary: Fix syntax and examples in create table statement doc
                 Key: FLINK-37121
                 URL: https://issues.apache.org/jira/browse/FLINK-37121
             Project: Flink
          Issue Type: Improvement
          Components: Documentation
    Affects Versions: 2.0-preview, 1.20.0
         Environment: mac os
            Reporter: Mingcan Wang
             Fix For: 2.0-preview, 1.20.0


create table in parserImpls.ftl :

*DISTRIBUTION* clause is before *PARTITION* clause.
{code:java}
SqlCreate SqlCreateTable(Span s, boolean replace, boolean isTemporary) :
{
    final SqlParserPos startPos = s.pos();
    boolean ifNotExists = false;
    SqlIdentifier tableName;
    List<SqlTableConstraint> constraints = new ArrayList<SqlTableConstraint>();
    SqlWatermark watermark = null;
    SqlNodeList columnList = SqlNodeList.EMPTY;
    SqlCharStringLiteral comment = null;
    SqlTableLike tableLike = null;
    SqlNode asQuery = null;
    SqlNodeList propertyList = SqlNodeList.EMPTY;
    SqlDistribution distribution = null;
    SqlNodeList partitionColumns = SqlNodeList.EMPTY;
    SqlParserPos pos = startPos;
    boolean isColumnsIdentifiersOnly = false;
}
{
    <TABLE>

    ifNotExists = IfNotExistsOpt()

    tableName = CompoundIdentifier()
    [
        <LPAREN> { pos = getPos(); TableCreationContext ctx = new 
TableCreationContext();}
        TableColumnsOrIdentifiers(pos, ctx)
        {
            pos = pos.plus(getPos());
            isColumnsIdentifiersOnly = ctx.isColumnsIdentifiersOnly();
            columnList = new SqlNodeList(ctx.columnList, pos);
            constraints = ctx.constraints;
            watermark = ctx.watermark;
        }
        <RPAREN>
    ]
    [ <COMMENT> <QUOTED_STRING> {
        String p = SqlParserUtil.parseString(token.image);
        comment = SqlLiteral.createCharString(p, getPos());
    }]
    [
        <DISTRIBUTED>
        distribution = SqlDistribution(getPos())
    ]

    [
        <PARTITIONED> <BY>
        partitionColumns = ParenthesizedSimpleIdentifierList()
    ]
    [
        <WITH>
        propertyList = Properties()
    ]
    [
        <LIKE>
        tableLike = SqlTableLike(getPos())
        {
            if (isColumnsIdentifiersOnly) {
                throw SqlUtil.newContextException(
                    pos,
                    ParserResource.RESOURCE.columnsIdentifiersUnsupported());
            }

            return new SqlCreateTableLike(startPos.plus(getPos()),
                tableName,
                columnList,
                constraints,
                propertyList,
                distribution,
                partitionColumns,
                watermark,
                comment,
                tableLike,
                isTemporary,
                ifNotExists);
        }
    |
        <AS>
        asQuery = OrderedQueryOrExpr(ExprContext.ACCEPT_QUERY)
        {
            if (replace) {
                return new SqlReplaceTableAs(startPos.plus(getPos()),
                    tableName,
                    columnList,
                    constraints,
                    propertyList,
                    distribution,
                    partitionColumns,
                    watermark,
                    comment,
                    asQuery,
                    isTemporary,
                    ifNotExists,
                    true);
            } else {
                return new SqlCreateTableAs(startPos.plus(getPos()),
                    tableName,
                    columnList,
                    constraints,
                    propertyList,
                    distribution,
                    partitionColumns,
                    watermark,
                    comment,
                    asQuery,
                    isTemporary,
                    ifNotExists);
            }
        }
    ]
    {
        if (isColumnsIdentifiersOnly) {
            throw SqlUtil.newContextException(
                pos,
                ParserResource.RESOURCE.columnsIdentifiersUnsupported());
        }

        return new SqlCreateTable(startPos.plus(getPos()),
            tableName,
            columnList,
            constraints,
            propertyList,
            distribution,
            partitionColumns,
            watermark,
            comment,
            isTemporary,
            ifNotExists);
    }
} {code}
And I try to parse a sql which *DISTRIBUTION* clause is after *PARTITION* 
clause will failed.So we need to move the *[ <distribution> ]* before 
*[PARTITIONED BY]*
And the syntax is missing the *TEMPORARY* optional keyword.
And some examples have a comma at the end of the last column



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to