Martijn Visser created FLINK-40948:
--------------------------------------

             Summary: Planner crashes with "Type mismatch" when a window 
aggregate groups on the nullable side of an outer window join
                 Key: FLINK-40948
                 URL: https://issues.apache.org/jira/browse/FLINK-40948
             Project: Flink
          Issue Type: Bug
          Components: Table SQL / Planner
    Affects Versions: 2.4.0
            Reporter: Martijn Visser


When the output of a LEFT (or RIGHT or FULL) window join is aggregated again on 
the window_start and window_end columns of the null-generating side, planning 
fails with an internal Calcite error instead of a plan or a validation message. 
EXPLAIN is enough to trigger it, no data is needed:

{code:sql}
CREATE TABLE a (id STRING, ts TIMESTAMP(3), WATERMARK FOR ts AS ts) WITH 
('connector' = 'datagen');
CREATE TABLE b (id STRING, ts TIMESTAMP(3), WATERMARK FOR ts AS ts) WITH 
('connector' = 'datagen');

EXPLAIN
SELECT window_start, window_end, id, SUM(cnt)
FROM (
  SELECT r.window_start, r.window_end, r.id, r.cnt
  FROM (
    SELECT id, window_start, window_end, COUNT(*) AS cnt
    FROM TABLE(TUMBLE(TABLE a, DESCRIPTOR(ts), INTERVAL '5' SECOND))
    GROUP BY id, window_start, window_end
  ) l
  LEFT JOIN (
    SELECT id, window_start, window_end, COUNT(*) AS cnt
    FROM TABLE(TUMBLE(TABLE b, DESCRIPTOR(ts), INTERVAL '5' SECOND))
    GROUP BY id, window_start, window_end
  ) r
  ON l.window_start = r.window_start AND l.window_end = r.window_end AND l.id = 
r.id
)
GROUP BY window_start, window_end, id;
{code}

{code}
java.lang.RuntimeException: Error while applying rule 
StreamPhysicalWindowAggregateRule(in:LOGICAL,out:STREAM_PHYSICAL), args 
[rel#889:FlinkLogicalAggregate.LOGICAL.any.None: 
0.[NONE].[NONE].[NONE](input=RelSubset#888,group={0, 1, 2},EXPR$3=SUM($3))]
Caused by: java.lang.IllegalArgumentException: Type mismatch:
rel rowtype: RecordType(TIMESTAMP(3) NOT NULL window_start, TIMESTAMP(3) NOT 
NULL window_end, VARCHAR(2147483647) CHARACTER SET "UTF-16LE" id, BIGINT 
EXPR$3) NOT NULL
equiv rowtype: RecordType(TIMESTAMP(3) window_start, TIMESTAMP(3) window_end, 
VARCHAR(2147483647) CHARACTER SET "UTF-16LE" id, BIGINT EXPR$3) NOT NULL
Difference:
window_start: TIMESTAMP(3) NOT NULL -> TIMESTAMP(3)
window_end: TIMESTAMP(3) NOT NULL -> TIMESTAMP(3)
{code}



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

Reply via email to