You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@flink.apache.org by "Jark Wu (Jira)" <ji...@apache.org> on 2020/07/24 09:03:00 UTC

[jira] [Created] (FLINK-18701) NOT NULL constraint is not guaranteed when aggregation split is enabled

Jark Wu created FLINK-18701:
-------------------------------

             Summary: NOT NULL constraint is not guaranteed when aggregation split is enabled
                 Key: FLINK-18701
                 URL: https://issues.apache.org/jira/browse/FLINK-18701
             Project: Flink
          Issue Type: Bug
          Components: Table SQL / Planner
            Reporter: Jark Wu


Take the following test: 

{{org.apache.flink.table.planner.runtime.stream.sql.SplitAggregateITCase#testMinMaxWithRetraction}}

{code:scala}
    val t1 = tEnv.sqlQuery(
      s"""
         |SELECT
         |  c, MIN(b), MAX(b), COUNT(DISTINCT a)
         |FROM(
         |  SELECT
         |    a, COUNT(DISTINCT b) as b, MAX(b) as c
         |  FROM T
         |  GROUP BY a
         |) GROUP BY c
       """.stripMargin)

    val sink = new TestingRetractSink
    t1.toRetractStream[Row].addSink(sink)
    env.execute()
    println(sink.getRawResults)
{code}


The query schema is

{code:java}
root
 |-- c: INT
 |-- EXPR$1: BIGINT NOT NULL
 |-- EXPR$2: BIGINT NOT NULL
 |-- EXPR$3: BIGINT NOT NULL
{code}


This should be correct as the count is never null and thus min/max are never null, however, we can receive null in the sink.


{code}
List((true,1,null,null,1), (true,2,2,2,1), (false,1,null,null,1), (true,6,2,2,1), (true,5,1,1,0), (false,5,1,1,0), (true,5,1,1,2), (true,4,2,2,0), (false,5,1,1,2), (true,5,1,3,2), (false,4,2,2,0), (false,5,1,3,2), (true,5,1,4,2))
{code}





--
This message was sent by Atlassian Jira
(v8.3.4#803005)