Flink 暂时不支持这个功能,可能需要自己改一下 jdbc connector 相关的代码.

但是这个报错很奇怪..你 sql 咋写的

Ye Chen <[email protected]> 于2021年8月2日周一 上午11:37写道:

> 你好,我试了一下,如果表的ddl是三个字段,但是insert只指定两个字段的话,会报错:
> [ERROR] Could not execute SQL statement. Reason:
> org.apache.flink.table.api.ValidationException: Column types of query
> result and sink for registered table 'default_catalog.default_database.t'
> do not match.
> Cause: Different number of columns.
> 我们的需求是想根据主键更新部分字段
>
> -------------------------------------
>
> 需求:现有table
> CREATE TABLE t (
>  a        bigint,
>  b        bigint,
>  c        bigint,
>   PRIMARY KEY (a) NOT ENFORCED
> ) WITH (
> ...
> );
> 我们的场景只想根据主键a更新部分字段b,其余的字段c保持不变,
> 例如mysql 支持   insert into t(a,b,c) select '1','2','3' on duplicate key
> update b='4';主键重复的时候只更新字段b,字段c的值不变。
> 我在官方文档中没找到这个用法,sql-client也测试了一下也不支持 on duplicate key update,会报错。
> 请问这种根据主键更新部分字段的场景 使用flink sql应该怎么处理?
>
>
>
>
>
>
>
> 在 2021-08-02 10:47:55,"silence" <[email protected]> 写道:
> >如果只想更新部分字段的话可以试下
> >insert into t(a,b) select a,b from xxxxx
> >
> >
> >------------------------------------------------------------------
> >发件人:Ye Chen <[email protected]>
> >发送时间:2021年7月30日(星期五) 17:57
> >收件人:user-zh <[email protected]>
> >主 题:场景题:Flink SQL 不支持 INSERT INTO… ON DUPLICATE KEY UPDATE ?
> >
> >现有table
> >CREATE TABLE t (
> > a        bigint,
> > b        bigint,
> > c        bigint,
> >  PRIMARY KEY (a) NOT ENFORCED
> >) WITH (
> >...
> >);
> >
> >
> >我们的场景只想根据主键a更新部分字段b,其余的字段保持不变,例如
> >mysql 支持   insert into t(a,b,c) select '1','2','3' on duplicate key
> update b='4';
> >主键重复的时候只更新字段b,字段c的值不变
> >
> >
> >我在官方文档中没找到这个用法,sql-client也测试了一下也不支持 on duplicate key update,会报错。
> >请问这种部分字段更新的场景 使用flink sql应该怎么处理?
> >
> >
>

回复