druid 解析创建es hive外部表异常syntax error, error in :'STORED BY 'org.elasticsearch.hadoop', expect AS, actual BY, pos 439, line 12, column 9, token BY

x7rlezfr  于 2023-02-04  发布在  Druid
关注(0)|答案(1)|浏览(420)

hive sql:
CREATE TABLE ******detail_cm_es( key string COMMENT '主键ID' ,trade_code string COMMENT '交易编码' ,waybill_number string COMMENT '运单号' ,fee_type string COMMENT '费用项编码' ,fee_type_name string COMMENT '费用项名称' ,fee decimal(18,2) COMMENT '费用项金额' ,shiping_month string COMMENT '寄件') COMMENT 'XXXXXX' ROW FORMAT SERDE 'org.elasticsearch.hadoop.hive.EsSerDe' STORED BY 'org.elasticsearch.hadoop.hive.EsStorageHandler' WITH SERDEPROPERTIES ( 'serialization.format'='1') TBLPROPERTIES (....);
主要是无法解析STORED BY的语法
创建hive外部表

8wtpewkr

8wtpewkr1#

解决HiveCreateTableParser代码:
`
if (lexer.identifierEquals(FnvHash.Constants.STORED)) {
lexer.nextToken();
if (lexer.token() == Token.AS) {
lexer.nextToken();
if (lexer.identifierEquals(FnvHash.Constants.INPUTFORMAT)) {
HiveInputOutputFormat format = new HiveInputOutputFormat();
lexer.nextToken();
format.setInput(this.exprParser.primary());

if (lexer.identifierEquals(FnvHash.Constants.OUTPUTFORMAT)) {
                    lexer.nextToken();
                    format.setOutput(this.exprParser.primary());
                }
                stmt.setStoredAs(format);
            } else {
                SQLName name = this.exprParser.name();
                stmt.setStoredAs(name);
            }
        } else if (lexer.token() == Token.BY) {
            // 开始解析store By
            lexer.nextToken();
            SQLName name = this.exprParser.name();
            stmt.setStoredBy(name);
        }
    }

`

` public static class HiveStatementParserForKye extends HiveStatementParser {

public HiveStatementParserForKye(String sql) {
        super(sql);
    }

    @Override
    public SQLCreateTableParser getSQLCreateTableParser() {
        return new HiveCreateTableParserForKye(this.exprParser);
    }
}

public static class HiveCreateTableStatementForKye extends HiveCreateTableStatement {
    protected SQLExpr storedBy;

    public void setStoredBy(SQLExpr storedBy) {
        if (storedBy != null) {
            storedBy.setParent(this);
        }
        this.storedBy = storedBy;
    }
}`

相关问题