Consider the code:
import .apache.calcite.config.Lex;
import .apache.calcite.sql.SqlNode;
import .apache.calcite.sql.parser.SqlParser;
import .apache.calcite.sql.parser.ddl.SqlDdlParserImpl;
import .apache.calcite.sql.validate.SqlConformanceEnum;
public class CalciteSample {
public static void main(String[] args) throws Exception {
String sql = "create table catalog.my_db.mytable\n"
+ "\n"
+ " WITH (format = 'PARQUET',\n"
+ " location = 's3a://mybucket/prefix/table')\n"
+ "as (\n"
+ " WITH\n"
+ " acbc as (\n"
+ " select 1\n"
+ " )\n"
+ " select \n"
+ ")\n";
SqlParser.Config sqlParserConfig = SqlParser.configBuilder()
.setParserFactory(SqlDdlParserImpl.FACTORY)
.setConformance(SqlConformanceEnum.PRESTO)
.build();
SqlParser parser = SqlParser.create(sql, sqlParserConfig);
SqlNode sqlNode = parser.parseQuery();
System.out.println("ok");
}
}
That code throws:
Exception in thread "main" .apache.calcite.sql.parser.SqlParseException: Encountered "WITH" at line 3, column 3.
Was expecting one of:
<EOF>
"AS" ...
"LIKE" ...
"(" ...
"." ...
at .apache.calcite.sql.parser.ddl.SqlDdlParserImpl.convertException(SqlDdlParserImpl.java:419)
at .apache.calcite.sql.parser.ddl.SqlDdlParserImpl.normalizeException(SqlDdlParserImpl.java:165)
at .apache.calcite.sql.parser.SqlParser.handleException(SqlParser.java:159)
at .apache.calcite.sql.parser.SqlParser.parseQuery(SqlParser.java:174)
at com.nsheremet.trino.update.checker.dumper.CalciteSample.main(CalciteSample.java:34)
Caused by: .apache.calcite.sql.parser.ddl.ParseException: Encountered "WITH" at line 3, column 3.
Was expecting one of:
<EOF>
"AS" ...
"LIKE" ...
"(" ...
"." ...
at .apache.calcite.sql.parser.ddl.SqlDdlParserImpl.generateParseException(SqlDdlParserImpl.java:45760)
at .apache.calcite.sql.parser.ddl.SqlDdlParserImpl.jj_consume_token(SqlDdlParserImpl.java:45571)
at .apache.calcite.sql.parser.ddl.SqlDdlParserImpl.SqlStmtEof(SqlDdlParserImpl.java:4195)
at .apache.calcite.sql.parser.ddl.SqlDdlParserImpl.parseSqlStmtEof(SqlDdlParserImpl.java:213)
at .apache.calcite.sql.parser.SqlParser.parseQuery(SqlParser.java:172)
... 1 more
Any ideas how parse complex create table as
queries?