Bettle created FLINK-40658:
------------------------------

             Summary: UNNEST silently drops null ROW elements from ARRAY
                 Key: FLINK-40658
                 URL: https://issues.apache.org/jira/browse/FLINK-40658
             Project: Flink
          Issue Type: Bug
          Components: Table SQL / Runtime
    Affects Versions: 2.4.0
            Reporter: Bettle


While implementing DataFrame.explode() for FLINK-40435, I noticed that UNNEST 
silently drops null ROW elements from an ARRAY.

This reproduces through direct Table API/SQL calls on an unchanged baseline, 
without importing or using the new DataFrame implementation.

h3. Reproduction

Run the following code in a configured PyFlink environment:

{code:python}
from pyflink.table import EnvironmentSettings, TableEnvironment

t_env = TableEnvironment.create(EnvironmentSettings.in_batch_mode())
source = t_env.sql_query(
    "SELECT ARRAY[CAST(NULL AS ROW<n INT, s STRING>), "
    "ROW(1, 'a')] AS items"
)

for join, condition in [
    ("CROSS JOIN", ""),
    ("LEFT JOIN", " ON TRUE"),
]:
    query = (
        f"SELECT expanded.* FROM `{str(source)}` AS src "
        f"{join} UNNEST(src.items) AS expanded(n, s){condition}"
    )
    with t_env.sql_query(query).execute().collect() as rows:
        actual = list(rows)
    print(join, actual)
{code}

h3. Expected result

Both join variants should return two rows, regardless of order:

{code}
(NULL, NULL)
(1, 'a')
{code}

h3. Actual result

Both join variants return only:

{code}
(1, 'a')
{code}

Execution completes without an exception, but the null ROW element is missing.

The input is a nonempty array containing a null ROW element. This is different 
from an empty array, a null array, or a non-null ROW whose fields are all null.

h3. Environment

* Flink 2.4-SNAPSHOT, baseline e01bbcacd96
* Batch mode
* Java 17.0.14
* Python 3.12.11

The equivalent direct Table API/SQL tests reproduced this behavior for both 
CROSS JOIN and LEFT JOIN. Released versions and streaming mode have not been 
verified for this issue.

h3. Related work

This was discovered during FLINK-40435, but reproduces without the new 
DataFrame wrappers. I am reporting it separately to keep that work focused on 
the DataFrame API. No underlying runtime fix is included in that work.

If this is confirmed to be a bug that needs fixing, I would be happy to 
investigate further and try to contribute a fix.



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

Reply via email to