Daeyeon Bae created FLINK-29873:
-----------------------------------

             Summary: CannotPlanException raised after "CROSS JOIN UNNEST"
                 Key: FLINK-29873
                 URL: https://issues.apache.org/jira/browse/FLINK-29873
             Project: Flink
          Issue Type: Bug
          Components: Table SQL / Planner
    Affects Versions: 1.15.2
            Reporter: Daeyeon Bae
         Attachments: error-log.txt

When I create a VIEW as a result of "CROSS JOIN UNNEST" and then use the 
condition in the WHERE clause of the VIEW, it throws an exception 
"org.apache.calcite.plan.RelOptPlanner$CannotPlanException".

Why am I getting this exception and how should I handle it the right way?

The following is the test code in which an error occurs.
{code:java}
it should "filter with object_key" in {
    tEnv.executeSql(
      s"""CREATE TABLE s3_put_event (
         |  Records ARRAY<
         |    ROW<
         |      s3 ROW<
         |        bucket ROW<name STRING>,
         |        object ROW<key STRING, size BIGINT>
         |      >
         |    >
         |  >
         |) WITH (
         |  'connector' = 'datagen',
         |  'number-of-rows' = '3',
         |  'rows-per-second' = '1',
         |  'fields.Records.element.s3.bucket.name.length' = '8',
         |  'fields.Records.element.s3.object.key.length' = '15',
         |  'fields.Records.element.s3.object.size.min' = '1',
         |  'fields.Records.element.s3.object.size.max' = '1000'
         |)
         |""".stripMargin
    )

    tEnv.executeSql(
      s"""CREATE TEMPORARY VIEW s3_objects AS
         |SELECT object_key, bucket_name
         |FROM (
         |  SELECT
         |    r.s3.bucket.name AS bucket_name,
         |    r.s3.object.key AS object_key,
         |    r.s3.object.size AS object_size
         |  FROM s3_put_event
         |  CROSS JOIN UNNEST(s3_put_event.Records) AS r(s3)
         |) rs
         |WHERE object_size > 0
         |""".stripMargin
    )

    tEnv.executeSql(
      s"""CREATE TEMPORARY VIEW filtered_s3_objects AS
         |SELECT bucket_name, object_key
         |FROM s3_objects
         |WHERE object_key > ''
         |""".stripMargin)

    val result = tEnv.sqlQuery("SELECT * FROM filtered_s3_objects")
    tEnv.toChangelogStream(result).print()
    env.execute()
  } {code}
If I remove the condition object_key > '' in the "filtered_s3_objects" VIEW, 
and do it in the "s3_objects" VIEW, no exception is thrown.However, my actual 
query is complicated, so it is not easy to move the condition of the WHERE 
clause like this. It's hard to use especially if I need to separate the output 
stream.

I have attached the error log.



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

Reply via email to