[ 
https://issues.apache.org/jira/browse/FLINK-41111?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Gustavo de Morais reassigned FLINK-41111:
-----------------------------------------

    Assignee: Moritz Manner

> Changelog mode errors of FlinkChangelogModeInferenceProgram do not identify 
> the part of the query that produces the changes
> ---------------------------------------------------------------------------------------------------------------------------
>
>                 Key: FLINK-41111
>                 URL: https://issues.apache.org/jira/browse/FLINK-41111
>             Project: Flink
>          Issue Type: Improvement
>          Components: Table SQL / Planner
>            Reporter: Moritz Manner
>            Assignee: Moritz Manner
>            Priority: Minor
>
> When a sink or an operator cannot consume the changes of its input, 
> FlinkChangelogModeInferenceProgram throws a TableException whose message only 
> contains the consumer and the description of the producing node:
> {noformat}
> StreamPhysicalOverAggregate doesn't support consuming update and delete 
> changes which is produced by node ChangelogNormalize(key=[k])
> {noformat}
> The exception carries no structured information, so tools that want to report 
> this error differently have to parse the message. The message itself is also 
> hard to act on:
> * When the producing node is a ChangelogNormalize, only its key is shown, not 
> the source table. With several upsert sources, it is not clear which one is 
> meant.
> * For a process table function, the consumer is reported as 
> StreamPhysicalProcessTableFunction, without the function name or the table 
> argument.
> * The consumer is a planner class name (StreamPhysicalOverAggregate) instead 
> of the SQL construct.
> * The sink is written as 'cat.db.snk', which is ambiguous when a part of the 
> identifier contains a dot.
> * The plan is not included, and EXPLAIN fails with the same error.
> h3. Repro
> Sink that only accepts inserts:
> {code:sql}
> CREATE TABLE src (k INT, v INT) WITH ('connector' = 'datagen');
> CREATE TABLE snk (k INT, c BIGINT) WITH ('connector' = 'filesystem', 'path' = 
> 'file:///tmp/snk', 'format' = 'csv');
> INSERT INTO snk SELECT k, COUNT(*) FROM src GROUP BY k;
> {code}
> {noformat}
> Table sink 'default_catalog.default_database.snk' doesn't support consuming 
> update changes which is produced by node GroupAggregate(groupBy=[k], 
> select=[k, COUNT(*) AS EXPR$1])
> {noformat}
> Operator after an upsert source, where the source table is not named:
> {code:sql}
> CREATE TABLE orders (k INT, v INT, ts TIMESTAMP(3), WATERMARK FOR ts AS ts, 
> PRIMARY KEY (k) NOT ENFORCED)
>   WITH ('connector' = 'upsert-kafka', 'topic' = 'orders', 
> 'properties.bootstrap.servers' = 'localhost:9092',
>         'key.format' = 'json', 'value.format' = 'json');
> SELECT k, COUNT(*) OVER (PARTITION BY k ORDER BY ts ROWS BETWEEN UNBOUNDED 
> PRECEDING AND CURRENT ROW) FROM orders;
> {code}
> {noformat}
> StreamPhysicalOverAggregate doesn't support consuming update and delete 
> changes which is produced by node ChangelogNormalize(key=[k])
> {noformat}



--
This message was sent by Atlassian Jira
(v10.3.26#10030026)

Reply via email to