You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user-zh@flink.apache.org by "lucas.wu" <lu...@xiaoying.com> on 2020/03/18 08:14:48 UTC

回复:sql关键字问题

初步找到了原因
原来我的建表语句用了computed_column_expression 这种语义。
然后flink内部在使用的时候其实是把它转成了select 语句
...
if (columnExprs.nonEmpty) {
 val fieldExprs = fieldNames
 .map { name =
 if (columnExprs.contains(name)) {
 columnExprs(name)
 } else {
 name
 }
 }.toArray
 val rexNodes = toRexFactory.create(newRelTable.getRowType).convertToRexNodes(fieldExprs)
…..


然后我们看看convertToRexNodes方法


public RexNode[] convertToRexNodes(String[] exprs) {
….
 String query = String.format(QUERY_FORMAT, String.join(",", exprs));
 SqlNode parsed = planner.parser().parse(query);
}


重点就在这个QUERY_FORMAT
private static final String QUERY_FORMAT = "SELECT %s FROM " + TEMPORARY_TABLE_NAME;


这样写是有问题的,当我的字段本身是有``的时候,就被去掉了,导致后面valid的时候就报错。


所以这个是算flink的bug吗?
原始邮件
发件人:lucas.wulucas.wu@xiaoying.com
收件人:user-zhuser-zh@flink.apache.org
发送时间:2020年3月18日(周三) 15:36
主题:sql关键字问题


create table `source_table`( `SeqNo` varchar, `Type` varchar, `Table` varchar, `ServerId` varchar, `Database` varchar, `OldData` varchar, `GTID` varchar, `Offset` varchar, `event_ts` as to_timestamp(from_unixtime(Data.`FuiUpdateTime`),'yyyy-MM-ddHH:mm:ss'), WATERMARK FOR event_ts AS event_ts - interval '60' second ) with(…) 查询语句 Select * from source_table; 这是我的建表和查询语句,发现即使用了`` 查询的时候还是会报Table是关键字的问题。 SQL parse failed. Encountered "Table" at line 1,column 19. 但是一旦我把 `event_ts` as to_timestamp(from_unixtime(Data.`FuiUpdateTime`),'yyyy-MM-ddHH:mm:ss'), WATERMARK FOR event_ts AS event_ts - interval '60’ second 这两行去掉 ,就正常了。是我的使用方法有问题吗?