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

Timo Walther updated FLINK-39913:
---------------------------------
    Description: 
A sink collected with no primary key over a relation that emits an upsert 
changelog fails with an unhelpful error. The message is just "Can't generate a 
valid execution plan" followed by the optimized plan. A user has no way  to 
tell what went wrong or how to fix it.                                          
                                             
                                                                                
                                                  
The plan can emit an upsert changelog, for example via FROM_CHANGELOG with 
PARTITION BY and an op_mapping that has no UPDATE_BEFORE. The foreground sink 
has no primary key, so the planner requires a retract changelog (UPDATE_BEFORE 
+ UPDATE_AFTER). Upsert cannot satisfy that, and the planner gives up.

Reproduce:
{code:java}
SELECT *
FROM FROM_CHANGELOG(
  input => TABLE events PARTITION BY id,
  op    => DESCRIPTOR(operation),
  op_mapping => MAP[
    'c', 'INSERT',
    'u', 'UPDATE_AFTER',
    'd', 'DELETE'
  ]
); {code}
Part of the error message the users sees is:
{code:java}
Can't generate a valid execution plan for the given query:
    Sink(table=..., fields=[id, name, email, status, event_time], 
changelogMode=[NONE])
...{code}
 

 

 

  was:
A foreground query (a bare SELECT, collected with no primary key) over a 
relation that emits an upsert changelog fails with an unhelpful error. The 
message is just "Can't generate a valid execution plan" followed by the 
optimized plan. A user has no way  to tell what went wrong or how to fix it.    
                                                                                
   
                                                                                
                                                  
The plan can emit an upsert changelog, for example via FROM_CHANGELOG with 
PARTITION BY and an op_mapping that has no UPDATE_BEFORE. The foreground sink 
has no primary key, so the planner requires a retract changelog (UPDATE_BEFORE 
+ UPDATE_AFTER). Upsert cannot satisfy that, and the planner gives up.

Reproduce:
{code:java}
SELECT *
FROM FROM_CHANGELOG(
  input => TABLE events PARTITION BY id,
  op    => DESCRIPTOR(operation),
  op_mapping => MAP[
    'c', 'INSERT',
    'u', 'UPDATE_AFTER',
    'd', 'DELETE'
  ]
); {code}

Part of the error message the users sees is:
{code:java}
Can't generate a valid execution plan for the given query:
    Sink(table=[*anonymous_foreground-sink$112*], fields=[id, name, email, 
status, event_time], changelogMode=[NONE])
...{code}
 

 

 


> Improve the error message for unsupported changelog modes
> ---------------------------------------------------------
>
>                 Key: FLINK-39913
>                 URL: https://issues.apache.org/jira/browse/FLINK-39913
>             Project: Flink
>          Issue Type: Improvement
>          Components: Table SQL / API, Table SQL / Planner
>            Reporter: Ramin Gharib
>            Assignee: Ramin Gharib
>            Priority: Major
>              Labels: pull-request-available
>             Fix For: 2.4.0
>
>
> A sink collected with no primary key over a relation that emits an upsert 
> changelog fails with an unhelpful error. The message is just "Can't generate 
> a valid execution plan" followed by the optimized plan. A user has no way  to 
> tell what went wrong or how to fix it.                                        
>                                                
>                                                                               
>                                                     
> The plan can emit an upsert changelog, for example via FROM_CHANGELOG with 
> PARTITION BY and an op_mapping that has no UPDATE_BEFORE. The foreground sink 
> has no primary key, so the planner requires a retract changelog 
> (UPDATE_BEFORE + UPDATE_AFTER). Upsert cannot satisfy that, and the planner 
> gives up.
> Reproduce:
> {code:java}
> SELECT *
> FROM FROM_CHANGELOG(
>   input => TABLE events PARTITION BY id,
>   op    => DESCRIPTOR(operation),
>   op_mapping => MAP[
>     'c', 'INSERT',
>     'u', 'UPDATE_AFTER',
>     'd', 'DELETE'
>   ]
> ); {code}
> Part of the error message the users sees is:
> {code:java}
> Can't generate a valid execution plan for the given query:
>     Sink(table=..., fields=[id, name, email, status, event_time], 
> changelogMode=[NONE])
> ...{code}
>  
>  
>  



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to