原始邮件
发件人:
[hidden email]
收件人:
[hidden email]
发送时间:2020年3月18日(周三) 17:21
主题:Re: sql关键字问题
Hi,jark
看到了你修复的这个jirahttps://issues.apache.org/jira/browse/FLINK-16526
但是看了你的代码和描述,你只是针对SqlBasicCall这种node的字段名加了`` ,也就是说只会对有computed_column_expression的字段加上,但是对于普通的字段并没有覆盖到,请问我理解的正确吗?
原始邮件
发件人:Kurt
[hidden email]
收件人:
[hidden email]
抄送:Yuzhao
[hidden email]
发送时间:2020年3月18日(周三) 16:41
主题:Re: sql关键字问题
好像已经有了,应该是这个jira:
https://issues.apache.org/jira/browse/FLINK-16526 Best, Kurt On Wed, Mar 18, 2020 at 4:19 PM Jingsong Li
[hidden email] wrote: Hi lucas, 赞专业的分析,看起来是Flink的bug,你可以建个Jira来跟踪。 CC: @Yuzhao Chen
[hidden email] Best, Jingsong Lee On Wed, Mar 18, 2020 at 4:15 PM lucas.wu
[hidden email] wrote: 初步找到了原因 原来我的建表语句用了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吗? 原始邮件 发件人:
[hidden email] 收件人:
[hidden email] 发送时间: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 这两行去掉 ,就正常了。是我的使用方法有问题吗? -- Best, Jingsong Lee