Re: Re: sql关键字问题
Hi, 你的这个问题就是 FLINK-16526 修复的问题,会在即将到来的 1.10.1 中发布。对于普通字段也是会加 ` ` 的,可以看这行代码 [1]。 Best, Jark [1]: https://github.com/apache/flink/blob/master/flink-table/flink-table-planner-blink/src/main/scala/org/apache/flink/table/planner/plan/schema/CatalogSourceTable.scala#L116 On Wed, 18 Mar 2020 at 17:27, lucas.wu wrote: > 原始邮件 > 发件人:lucas.wulucas...@xiaoying.com > 收件人:imj...@gmail.com > 发送时间:2020年3月18日(周三) 17:21 > 主题:Re: sql关键字问题 > > > Hi,jark > 看到了你修复的这个jirahttps://issues.apache.org/jira/browse/FLINK-16526 > 但是看了你的代码和描述,你只是针对SqlBasicCall这种node的字段名加了`` > ,也就是说只会对有computed_column_expression的字段加上,但是对于普通的字段并没有覆盖到,请问我理解的正确吗? > > > 原始邮件 > 发件人:Kurt youngykt...@gmail.com > 收件人:user-zhuser...@flink.apache.org > 抄送:Yuzhao chenyuzhao....@gmail.com > 发送时间: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 jingsongl...@gmail.com > wrote: Hi lucas, 赞专业的分析,看起来是Flink的bug,你可以建个Jira来跟踪。 CC: @Yuzhao Chen > yuzhao@gmail.com Best, Jingsong Lee On Wed, Mar 18, 2020 at 4:15 > PM lucas.wu lucas...@xiaoying.com 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吗? > 原始邮件 发件人:lucas.wulucas...@xiaoying.com 收件人: > user-zhuser...@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`),'-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`),'-MM-ddHH:mm:ss'), > WATERMARK FOR event_ts AS event_ts - interval '60’ second 这两行去掉 > ,就正常了。是我的使用方法有问题吗? -- Best, Jingsong Lee
Re: Re: sql关键字问题
Hi lucas, 你说的问题应该在https://issues.apache.org/jira/browse/FLINK-16068里面修复了。 lucas.wu 于2020年3月18日周三 下午5:27写道: > 原始邮件 > 发件人:lucas.wulucas...@xiaoying.com > 收件人:imj...@gmail.com > 发送时间:2020年3月18日(周三) 17:21 > 主题:Re: sql关键字问题 > > > Hi,jark > 看到了你修复的这个jirahttps://issues.apache.org/jira/browse/FLINK-16526 > 但是看了你的代码和描述,你只是针对SqlBasicCall这种node的字段名加了`` > ,也就是说只会对有computed_column_expression的字段加上,但是对于普通的字段并没有覆盖到,请问我理解的正确吗? > > > 原始邮件 > 发件人:Kurt youngykt...@gmail.com > 收件人:user-zhuser...@flink.apache.org > 抄送:Yuzhao chenyuzhao....@gmail.com > 发送时间: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 jingsongl...@gmail.com > wrote: Hi lucas, 赞专业的分析,看起来是Flink的bug,你可以建个Jira来跟踪。 CC: @Yuzhao Chen > yuzhao@gmail.com Best, Jingsong Lee On Wed, Mar 18, 2020 at 4:15 > PM lucas.wu lucas...@xiaoying.com 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吗? > 原始邮件 发件人:lucas.wulucas...@xiaoying.com 收件人: > user-zhuser...@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`),'-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`),'-MM-ddHH:mm:ss'), > WATERMARK FOR event_ts AS event_ts - interval '60’ second 这两行去掉 > ,就正常了。是我的使用方法有问题吗? -- Best, Jingsong Lee -- Benchao Li School of Electronics Engineering and Computer Science, Peking University Tel:+86-15650713730 Email: libenc...@gmail.com; libenc...@pku.edu.cn
转发:Re: sql关键字问题
原始邮件 发件人:lucas.wulucas...@xiaoying.com 收件人:imj...@gmail.com 发送时间:2020年3月18日(周三) 17:21 主题:Re: sql关键字问题 Hi,jark 看到了你修复的这个jirahttps://issues.apache.org/jira/browse/FLINK-16526 但是看了你的代码和描述,你只是针对SqlBasicCall这种node的字段名加了`` ,也就是说只会对有computed_column_expression的字段加上,但是对于普通的字段并没有覆盖到,请问我理解的正确吗? 原始邮件 发件人:Kurt youngykt...@gmail.com 收件人:user-zhuser...@flink.apache.org 抄送:Yuzhao chenyuzhao@gmail.com 发送时间: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 jingsongl...@gmail.com wrote: Hi lucas, 赞专业的分析,看起来是Flink的bug,你可以建个Jira来跟踪。 CC: @Yuzhao Chen yuzhao@gmail.com Best, Jingsong Lee On Wed, Mar 18, 2020 at 4:15 PM lucas.wu lucas...@xiaoying.com 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吗? 原始邮件 发件人:lucas.wulucas...@xiaoying.com 收件人:user-zhuser...@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`),'-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`),'-MM-ddHH:mm:ss'), WATERMARK FOR event_ts AS event_ts - interval '60’ second 这两行去掉 ,就正常了。是我的使用方法有问题吗? -- Best, Jingsong Lee
Re: sql关键字问题
好像已经有了,应该是这个jira: https://issues.apache.org/jira/browse/FLINK-16526 Best, Kurt On Wed, Mar 18, 2020 at 4:19 PM Jingsong Li wrote: > Hi lucas, > > 赞专业的分析,看起来是Flink的bug,你可以建个Jira来跟踪。 > CC: @Yuzhao Chen > > Best, > Jingsong Lee > > On Wed, Mar 18, 2020 at 4:15 PM lucas.wu 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吗? > > 原始邮件 > > 发件人:lucas.wulucas...@xiaoying.com > > 收件人:user-zhuser...@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`),'-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`),'-MM-ddHH:mm:ss'), > > WATERMARK FOR event_ts AS event_ts - interval '60’ second 这两行去掉 > > ,就正常了。是我的使用方法有问题吗? > > > > -- > Best, Jingsong Lee >
Re: sql关键字问题
Hi lucas, 赞专业的分析,看起来是Flink的bug,你可以建个Jira来跟踪。 CC: @Yuzhao Chen Best, Jingsong Lee On Wed, Mar 18, 2020 at 4:15 PM lucas.wu 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吗? > 原始邮件 > 发件人:lucas.wulucas...@xiaoying.com > 收件人:user-zhuser...@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`),'-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`),'-MM-ddHH:mm:ss'), > WATERMARK FOR event_ts AS event_ts - interval '60’ second 这两行去掉 > ,就正常了。是我的使用方法有问题吗? -- Best, Jingsong Lee
回复: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...@xiaoying.com 收件人:user-zhuser...@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`),'-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`),'-MM-ddHH:mm:ss'), WATERMARK FOR event_ts AS event_ts - interval '60’ second 这两行去掉 ,就正常了。是我的使用方法有问题吗?
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`),'-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`),'-MM-ddHH:mm:ss'), WATERMARK FOR event_ts AS event_ts - interval '60’ second 这两行去掉 ,就正常了。是我的使用方法有问题吗?