flinksql insert overwrite 报错 INSERT OVERWRITE requires JDBC:MySQL DynamicTableSink to implement SupportsOverwrite interface

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

flinksql insert overwrite 报错 INSERT OVERWRITE requires JDBC:MySQL DynamicTableSink to implement SupportsOverwrite interface

cxydevelop@163.com
Hello
请问在flink 1.11.0文档[1]中发现可以使用时可以使用INSERTOVERWRITE... 尝试了一下,但是在执行语句"insert overwrite mysqlsink select a,cast(b as varchar) b from mySource"时报如下错误
Exception in thread "main" org.apache.flink.table.api.ValidationException: INSERT OVERWRITE requires JDBC:MySQL DynamicTableSink to implement SupportsOverwrite interface.
是得自定义connector吗,实现DynamicTableSink?


祝好
chenxuying
[1] https://ci.apache.org/projects/flink/flink-docs-release-1.11/dev/table/sql/insert.html#syntax
Reply | Threaded
Open this post in threaded view
|

Re: flinksql insert overwrite 报错 INSERT OVERWRITE requires JDBC:MySQL DynamicTableSink to implement SupportsOverwrite interface

Leonard Xu
Hi,

这个错是因为JDBC connector 不支持INSERT OVERWRITE, 你看的文档是列出了目前 Flink SQL 支持的INSERT语法,但是不是所有的 connector 都支持  INSERT OVERWRITE, 目前支持的只有 Filesystem connector 和 Hive table, 这些表一般不会有主键。其他connector 如 JDBC\ES\HBase 目前不支持  INSERT OVERWRITE,现在 JDBC\ES\HBase connector都是支持upsert 插入的[1],
就是在connector 表上定义了PK,结果可以按照PK更新,对于DB类的系统应该都是可以满足业务需求的。 可以分享下需要INSERT OVERWRITE到DB的场景吗?

Best
Leonard
[1]https://ci.apache.org/projects/flink/flink-docs-release-1.11/dev/table/connectors/jdbc.html#key-handling <https://ci.apache.org/projects/flink/flink-docs-release-1.11/dev/table/connectors/jdbc.html#key-handling>

> 在 2020年8月1日,19:20,chenxuying <[hidden email]> 写道:
>
> Hello
> 请问在flink 1.11.0文档[1]中发现可以使用时可以使用INSERTOVERWRITE... 尝试了一下,但是在执行语句"insert overwrite mysqlsink select a,cast(b as varchar) b from mySource"时报如下错误
> Exception in thread "main" org.apache.flink.table.api.ValidationException: INSERT OVERWRITE requires JDBC:MySQL DynamicTableSink to implement SupportsOverwrite interface.
> 是得自定义connector吗,实现DynamicTableSink?
>
>
> 祝好
> chenxuying
> [1] https://ci.apache.org/projects/flink/flink-docs-release-1.11/dev/table/sql/insert.html#syntax

Reply | Threaded
Open this post in threaded view
|

Re:Re: flinksql insert overwrite 报错 INSERT OVERWRITE requires JDBC:MySQL DynamicTableSink to implement SupportsOverwrite interface

cxydevelop@163.com
你好,我这边只是做一个尝试 , 因为之前使用了insert into + 主键做到更新db记录的操作 , 然后现在看到INSERT OVERWRITE的语法就试了一下 , 原来OVERWRITE目前只支持 Filesystem connector 和 Hive table
然后还想问下在使用insert into + 主键 时,如果主键存在 , 则在底层执行sql时是update语句是吗, 还是delete+update , 我们这边之前有个需求是update执行效率太低 , 然后需要用到replace into , 不知道flink是否支持

















在 2020-08-02 09:48:04,"Leonard Xu" <[hidden email]> 写道:

>Hi,
>
>这个错是因为JDBC connector 不支持INSERT OVERWRITE, 你看的文档是列出了目前 Flink SQL 支持的INSERT语法,但是不是所有的 connector 都支持  INSERT OVERWRITE, 目前支持的只有 Filesystem connector 和 Hive table, 这些表一般不会有主键。其他connector 如 JDBC\ES\HBase 目前不支持  INSERT OVERWRITE,现在 JDBC\ES\HBase connector都是支持upsert 插入的[1],
>就是在connector 表上定义了PK,结果可以按照PK更新,对于DB类的系统应该都是可以满足业务需求的。 可以分享下需要INSERT OVERWRITE到DB的场景吗?
>
>Best
>Leonard
>[1]https://ci.apache.org/projects/flink/flink-docs-release-1.11/dev/table/connectors/jdbc.html#key-handling <https://ci.apache.org/projects/flink/flink-docs-release-1.11/dev/table/connectors/jdbc.html#key-handling>
>
>> 在 2020年8月1日,19:20,chenxuying <[hidden email]> 写道:
>>
>> Hello
>> 请问在flink 1.11.0文档[1]中发现可以使用时可以使用INSERTOVERWRITE... 尝试了一下,但是在执行语句"insert overwrite mysqlsink select a,cast(b as varchar) b from mySource"时报如下错误
>> Exception in thread "main" org.apache.flink.table.api.ValidationException: INSERT OVERWRITE requires JDBC:MySQL DynamicTableSink to implement SupportsOverwrite interface.
>> 是得自定义connector吗,实现DynamicTableSink?
>>
>>
>> 祝好
>> chenxuying
>> [1] https://ci.apache.org/projects/flink/flink-docs-release-1.11/dev/table/sql/insert.html#syntax
>
Reply | Threaded
Open this post in threaded view
|

Re: flinksql insert overwrite 报错 INSERT OVERWRITE requires JDBC:MySQL DynamicTableSink to implement SupportsOverwrite interface

Leonard Xu
如果 DB 支持 upsert 语法,执行的是update, 如果不支持 upsert语法, 则是 delete + insert,MySQL 和 PG 都支持 upsert, 底层对应的sql语句是

Database Upsert Grammar
MySQL INSERT .. ON DUPLICATE KEY UPDATE ..
PostgreSQL INSERT .. ON CONFLICT .. DO UPDATE SET ..

MySQL connector 不支持 replace into, 用的是 on duplicate key update.

祝好
Leonard
[1] https://ci.apache.org/projects/flink/flink-docs-master/dev/table/connectors/jdbc.html#idempotent-writes <https://ci.apache.org/projects/flink/flink-docs-master/dev/table/connectors/jdbc.html#idempotent-writes>


> 在 2020年8月3日,10:33,chenxuying <[hidden email]> 写道:
>
> 你好,我这边只是做一个尝试 , 因为之前使用了insert into + 主键做到更新db记录的操作 , 然后现在看到INSERT OVERWRITE的语法就试了一下 , 原来OVERWRITE目前只支持 Filesystem connector 和 Hive table
> 然后还想问下在使用insert into + 主键 时,如果主键存在 , 则在底层执行sql时是update语句是吗, 还是delete+update , 我们这边之前有个需求是update执行效率太低 , 然后需要用到replace into , 不知道flink是否支持
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
> 在 2020-08-02 09:48:04,"Leonard Xu" <[hidden email]> 写道:
>> Hi,
>>
>> 这个错是因为JDBC connector 不支持INSERT OVERWRITE, 你看的文档是列出了目前 Flink SQL 支持的INSERT语法,但是不是所有的 connector 都支持  INSERT OVERWRITE, 目前支持的只有 Filesystem connector 和 Hive table, 这些表一般不会有主键。其他connector 如 JDBC\ES\HBase 目前不支持  INSERT OVERWRITE,现在 JDBC\ES\HBase connector都是支持upsert 插入的[1],
>> 就是在connector 表上定义了PK,结果可以按照PK更新,对于DB类的系统应该都是可以满足业务需求的。 可以分享下需要INSERT OVERWRITE到DB的场景吗?
>>
>> Best
>> Leonard
>> [1]https://ci.apache.org/projects/flink/flink-docs-release-1.11/dev/table/connectors/jdbc.html#key-handling <https://ci.apache.org/projects/flink/flink-docs-release-1.11/dev/table/connectors/jdbc.html#key-handling>
>>
>>> 在 2020年8月1日,19:20,chenxuying <[hidden email]> 写道:
>>>
>>> Hello
>>> 请问在flink 1.11.0文档[1]中发现可以使用时可以使用INSERTOVERWRITE... 尝试了一下,但是在执行语句"insert overwrite mysqlsink select a,cast(b as varchar) b from mySource"时报如下错误
>>> Exception in thread "main" org.apache.flink.table.api.ValidationException: INSERT OVERWRITE requires JDBC:MySQL DynamicTableSink to implement SupportsOverwrite interface.
>>> 是得自定义connector吗,实现DynamicTableSink?
>>>
>>>
>>> 祝好
>>> chenxuying
>>> [1] https://ci.apache.org/projects/flink/flink-docs-release-1.11/dev/table/sql/insert.html#syntax
>>

Reply | Threaded
Open this post in threaded view
|

Re:Re: flinksql insert overwrite 报错 INSERT OVERWRITE requires JDBC:MySQL DynamicTableSink to implement SupportsOverwrite interface

cxydevelop@163.com
谢谢, 明白了








在 2020-08-03 10:42:53,"Leonard Xu" <[hidden email]> 写道:

>如果 DB 支持 upsert 语法,执行的是update, 如果不支持 upsert语法, 则是 delete + insert,MySQL 和 PG 都支持 upsert, 底层对应的sql语句是
>
>Database Upsert Grammar
>MySQL INSERT .. ON DUPLICATE KEY UPDATE ..
>PostgreSQL INSERT .. ON CONFLICT .. DO UPDATE SET ..
>
>MySQL connector 不支持 replace into, 用的是 on duplicate key update.
>
>祝好
>Leonard
>[1] https://ci.apache.org/projects/flink/flink-docs-master/dev/table/connectors/jdbc.html#idempotent-writes <https://ci.apache.org/projects/flink/flink-docs-master/dev/table/connectors/jdbc.html#idempotent-writes>
>
>
>> 在 2020年8月3日,10:33,chenxuying <[hidden email]> 写道:
>>
>> 你好,我这边只是做一个尝试 , 因为之前使用了insert into + 主键做到更新db记录的操作 , 然后现在看到INSERT OVERWRITE的语法就试了一下 , 原来OVERWRITE目前只支持 Filesystem connector 和 Hive table
>> 然后还想问下在使用insert into + 主键 时,如果主键存在 , 则在底层执行sql时是update语句是吗, 还是delete+update , 我们这边之前有个需求是update执行效率太低 , 然后需要用到replace into , 不知道flink是否支持
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>> 在 2020-08-02 09:48:04,"Leonard Xu" <[hidden email]> 写道:
>>> Hi,
>>>
>>> 这个错是因为JDBC connector 不支持INSERT OVERWRITE, 你看的文档是列出了目前 Flink SQL 支持的INSERT语法,但是不是所有的 connector 都支持  INSERT OVERWRITE, 目前支持的只有 Filesystem connector 和 Hive table, 这些表一般不会有主键。其他connector 如 JDBC\ES\HBase 目前不支持  INSERT OVERWRITE,现在 JDBC\ES\HBase connector都是支持upsert 插入的[1],
>>> 就是在connector 表上定义了PK,结果可以按照PK更新,对于DB类的系统应该都是可以满足业务需求的。 可以分享下需要INSERT OVERWRITE到DB的场景吗?
>>>
>>> Best
>>> Leonard
>>> [1]https://ci.apache.org/projects/flink/flink-docs-release-1.11/dev/table/connectors/jdbc.html#key-handling <https://ci.apache.org/projects/flink/flink-docs-release-1.11/dev/table/connectors/jdbc.html#key-handling>
>>>
>>>> 在 2020年8月1日,19:20,chenxuying <[hidden email]> 写道:
>>>>
>>>> Hello
>>>> 请问在flink 1.11.0文档[1]中发现可以使用时可以使用INSERTOVERWRITE... 尝试了一下,但是在执行语句"insert overwrite mysqlsink select a,cast(b as varchar) b from mySource"时报如下错误
>>>> Exception in thread "main" org.apache.flink.table.api.ValidationException: INSERT OVERWRITE requires JDBC:MySQL DynamicTableSink to implement SupportsOverwrite interface.
>>>> 是得自定义connector吗,实现DynamicTableSink?
>>>>
>>>>
>>>> 祝好
>>>> chenxuying
>>>> [1] https://ci.apache.org/projects/flink/flink-docs-release-1.11/dev/table/sql/insert.html#syntax
>>>
>