sql关键字问题

classic Classic list List threaded Threaded
5 messages Options
Reply | Threaded
Open this post in threaded view
|

sql关键字问题

lucas.wu
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
这两行去掉 ,就正常了。是我的使用方法有问题吗?
Reply | Threaded
Open this post in threaded view
|

Re: sql关键字问题

Jingsong Li
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
Reply | Threaded
Open this post in threaded view
|

Re: sql关键字问题

Kurt Young
好像已经有了,应该是这个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
>
Reply | Threaded
Open this post in threaded view
|

Re: Re: sql关键字问题

Benchao Li
In reply to this post by lucas.wu
Hi lucas,

你说的问题应该在https://issues.apache.org/jira/browse/FLINK-16068里面修复了。

lucas.wu <[hidden email]> 于2020年3月18日周三 下午5:27写道:

> 原始邮件
> 发件人:[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



--

Benchao Li
School of Electronics Engineering and Computer Science, Peking University
Tel:+86-15650713730
Email: [hidden email]; [hidden email]
Reply | Threaded
Open this post in threaded view
|

Re: Re: sql关键字问题

Jark
Administrator
In reply to this post by lucas.wu
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 <[hidden email]> wrote:

> 原始邮件
> 发件人:[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