You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@flink.apache.org by "Martijn Visser (Jira)" <ji...@apache.org> on 2026/02/16 08:07:00 UTC

[jira] [Commented] (FLINK-39095) [SQL] Display ChangelogMode in Execution Plan for Streaming Queries

    [ https://issues.apache.org/jira/browse/FLINK-39095?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18058839#comment-18058839 ] 

Martijn Visser commented on FLINK-39095:
----------------------------------------

Why isn't the existing capability around EXPLAIN sufficient? https://nightlies.apache.org/flink/flink-docs-stable/docs/dev/table/sql/explain/

> [SQL] Display ChangelogMode in Execution Plan for Streaming Queries
> -------------------------------------------------------------------
>
>                 Key: FLINK-39095
>                 URL: https://issues.apache.org/jira/browse/FLINK-39095
>             Project: Flink
>          Issue Type: Improvement
>          Components: Table SQL / Planner
>            Reporter: featzhang
>            Priority: Minor
>              Labels: enhancement, pull-request-available, table-planner, usability
>
> Currently, Flink's execution plan (ExecNode level) does not display the ChangelogMode information for streaming queries. This makes it difficult for users to understand:
> - Whether the stream is append-only
> - Whether it contains retractions (UPDATE_BEFORE, UPDATE_AFTER, DELETE)
> - The exact changelog semantics of each operator
> While the physical plan (StreamPhysicalRel) already supports displaying ChangelogMode via ExplainDetail.CHANGELOG_MODE, the execution plan (ExecNode) does not expose this information.
> This enhancement proposes to add ChangelogMode display to the execution plan output, making it more transparent for users to understand the streaming semantics.
> Motivation:
> Many users are confused about:
> 1. Whether their query produces append-only results or retract streams
> 2. Which operators introduce retractions
> 3. The changelog semantics of intermediate results
> This information is critical for:
> - Understanding query behavior
> - Performance tuning
> - Debugging unexpected results
> - Choosing appropriate sink connectors
> Proposed Changes:
> 1. Add a method to ExecNode interface or StreamExecNode to retrieve ChangelogMode
> 2. Modify ExecNodePlanDumper to display ChangelogMode information
> 3. Format: Display as "changelogMode=[I,UB,UA,D]" where:
>    - I = INSERT
>    - UB = UPDATE_BEFORE
>    - UA = UPDATE_AFTER
>    - D = DELETE
> Example Output:
> Before:
> ```
> Calc(select=[a, b])
> +- TableSourceScan(table=[[my_table]])
> ```
> After:
> ```
> Calc(select=[a, b], changelogMode=[I,UB,UA])
> +- TableSourceScan(table=[[my_table]], changelogMode=[I,UB,UA,D])
> ```
> Implementation Location:
> - ExecNode.java or StreamExecNode.java: Add getChangelogMode() method
> - ExecNodePlanDumper.java: Modify to display ChangelogMode in tree/DAG output
> - ExecNodeBase.java: Provide default implementation that derives from ModifyKindSetTrait and UpdateKindTrait



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