Yaoxuan Wu created FLINK-40945:
----------------------------------

             Summary: -0.0 and 0.0 are different keys in GROUP BY, DISTINCT, 
UNION and hash joins
                 Key: FLINK-40945
                 URL: https://issues.apache.org/jira/browse/FLINK-40945
             Project: Flink
          Issue Type: Bug
          Components: Table SQL / Runtime
    Affects Versions: 2.3.0, 2.4.0
            Reporter: Yaoxuan Wu


{code:java}
CREATE TEMPORARY VIEW v AS SELECT CAST(s AS DOUBLE) AS x FROM (VALUES ('-0.0'), 
('0.0')) AS t(s);SELECT a.x, b.x, a.x = b.x FROM v a, v b;   -- TRUE for all 
four pairs
SELECT DISTINCT x FROM v;                   -- Flink: -0.0, 0.0       expected: 
one row
SELECT COUNT(DISTINCT x) FROM v;            -- Flink: 2               expected: 
1
SELECT x, COUNT(*) FROM v GROUP BY x;       -- Flink: (-0.0, 1), (0.0, 1)   
expected: one group with count 2
SELECT x FROM v UNION SELECT x FROM v;      -- Flink: 2 rows          expected: 
1 rowSET 'table.exec.disabled-operators' = 'SortMergeJoin,NestedLoopJoin';
SELECT a.x, b.x FROM v a JOIN v b ON a.x = b.x;
-- HashJoin: (-0.0, -0.0), (0.0, 0.0)      expected: all 4 pairs (SortMergeJoin 
/ NestedLoopJoin return 4) {code}
The comparison -0.0 = 0.0 is TRUE, but grouping, deduplication and hash join 
keys treat the two zeros as different values, so the result depends on the 
operator (and, for joins, on the join algorithm). IN (subquery) and INTERSECT 
treat them as equal. FLOAT behaves the same. Streaming mode behaves the same 
for DISTINCT, GROUP BY and JOIN.

(The CAST over a string column is only there to produce -0.0: a literal -0.0 or 
CAST('-0.0' AS DOUBLE) is constant-folded to 0.0.)

Also reproduces on current master (2.4-SNAPSHOT, a47e4bf).

Related: FLINK-40693 (same problem for constant IN lists, fixed in 2.4.0)



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

Reply via email to