Luka Zdravic created SPARK-59749:
------------------------------------

             Summary: ASOF JOIN MATCH_CONDITION rejects empty STRUCT operands 
accepted by the comparison operator
                 Key: SPARK-59749
                 URL: https://issues.apache.org/jira/browse/SPARK-59749
             Project: Spark
          Issue Type: Bug
          Components: SQL
    Affects Versions: 5.0.0
            Reporter: Luka Zdravic


Inside a MATCH_CONDITION, comparing two empty structs (STRUCT<>) fails with 
ASOF_JOIN_MATCH_CONDITION_INVALID_TYPE. The same comparison outside ASOF works: 
two empty structs compare as equal. The error says the operands must be 
orderable, but STRUCT<> is orderable. ASOF adds its own check that rejects any 
type that contains an empty struct.

SET spark.sql.join.asofJoin.enabled = true;
-- fails:
SELECT * FROM VALUES (named_struct()) AS l(s)
ASOF JOIN VALUES (named_struct()) AS r(s)
MATCH_CONDITION (l.s >= r.s);        -- ASOF_JOIN_MATCH_CONDITION_INVALID_TYPE: 
"STRUCT<>" and "STRUCT<>"
-- works:
SELECT named_struct() >= named_struct();   -- true

The same check also rejects nested empty structs, for example STRUCT<x: 
STRUCT<>> and ARRAY<STRUCT<>>.

Expected: MATCH_CONDITION accepts empty struct operands, nested or not, same as 
the comparison operator. An empty struct paired with a non-empty struct stays 
rejected.
The check does not depend on ANSI mode.
Impact: an as-of condition that is a legal comparison cannot be written.

Umbrella: SPARK-59526



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

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to