[
https://issues.apache.org/jira/browse/FLINK-40945?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Yaoxuan Wu updated FLINK-40945:
-------------------------------
Description:
{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)
was:
{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)
> -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
> Priority: Major
>
> {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)