[
https://issues.apache.org/jira/browse/FLINK-5750?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Fabian Hueske updated FLINK-5750:
---------------------------------
Description:
Calcite's union operator is supports more than two input relations. However,
Flink's translation rules only consider the first two relations because we
assumed that Calcite's union is binary.
This problem exists for batch and streaming queries.
The following query can be used to validate the problem.
{code:java}
@Test
public void testValuesWithCast() throws Exception {
ExecutionEnvironment env =
ExecutionEnvironment.getExecutionEnvironment();
BatchTableEnvironment tableEnv =
TableEnvironment.getTableEnvironment(env, config());
String sqlQuery = "VALUES (1, cast(1 as BIGINT) )," +
"(2, cast(2 as BIGINT))," +
"(3, cast(3 as BIGINT))";
String sqlQuery2 = "VALUES (1,1)," +
"(2, 2)," +
"(3, 3)";
Table result = tableEnv.sql(sqlQuery);
DataSet<Row> resultSet = tableEnv.toDataSet(result, Row.class);
List<Row> results = resultSet.collect();
Table result2 = tableEnv.sql(sqlQuery2);
DataSet<Row> resultSet2 = tableEnv.toDataSet(result2,
Row.class);
List<Row> results2 = resultSet2.collect();
String expected = "1,1\n2,2\n3,3";
compareResultAsText(results2, expected);
compareResultAsText(results, expected);
}
{code}
AR for {{results}} variable
{noformat}
java.lang.AssertionError: Different elements in arrays: expected 3 elements and
received 2
expected: [1,1, 2,2, 3,3]
received: [1,1, 2,2]
Expected :3
Actual :2
{noformat}
was:
Calcite's union operator is supports more than two input relations. However,
Flink's translation rules only consider the first two relations because we
assumed that Calcite's union is binary.
This problem exists for batch and streaming queries.
The following query can be used to validate the problem.
{code:java}
@Test
public void testValuesWithCast() throws Exception {
ExecutionEnvironment env =
ExecutionEnvironment.getExecutionEnvironment();
BatchTableEnvironment tableEnv =
TableEnvironment.getTableEnvironment(env, config());
String sqlQuery = "VALUES (1, cast(1 as BIGINT) )," +
"(2, cast(2 as BIGINT))," +
"(3, cast(3 as BIGINT))";
String sqlQuery2 = "VALUES (1,1)," +
"(2, 2)," +
"(3, 3)";
Table result = tableEnv.sql(sqlQuery);
DataSet<Row> resultSet = tableEnv.toDataSet(result, Row.class);
List<Row> results = resultSet.collect();
Table result2 = tableEnv.sql(sqlQuery2);
DataSet<Row> resultSet2 = tableEnv.toDataSet(result2,
Row.class);
List<Row> results2 = resultSet2.collect();
String expected = "1,1\n2,2\n3,3";
compareResultAsText(results2, expected);
compareResultAsText(results, expected);
}
{code}
AR for {{results}} variable
{noformat}
java.lang.AssertionError: Different elements in arrays: expected 3 elements and
received 2
expected: [1,1, 2,2, 3,3]
received: [1,1, 2,2]
Expected :3
Actual :2
{noformat}
It seems that
> Incorrect translation of n-ary Union
> ------------------------------------
>
> Key: FLINK-5750
> URL: https://issues.apache.org/jira/browse/FLINK-5750
> Project: Flink
> Issue Type: Bug
> Components: Table API & SQL
> Affects Versions: 1.2.0, 1.3.4, 1.5.0, 1.4.2, 1.6.0
> Reporter: Anton Mushin
> Assignee: Alexander Koltsov
> Priority: Critical
> Labels: pull-request-available
>
> Calcite's union operator is supports more than two input relations. However,
> Flink's translation rules only consider the first two relations because we
> assumed that Calcite's union is binary.
> This problem exists for batch and streaming queries.
> The following query can be used to validate the problem.
> {code:java}
> @Test
> public void testValuesWithCast() throws Exception {
> ExecutionEnvironment env =
> ExecutionEnvironment.getExecutionEnvironment();
> BatchTableEnvironment tableEnv =
> TableEnvironment.getTableEnvironment(env, config());
> String sqlQuery = "VALUES (1, cast(1 as BIGINT) )," +
> "(2, cast(2 as BIGINT))," +
> "(3, cast(3 as BIGINT))";
> String sqlQuery2 = "VALUES (1,1)," +
> "(2, 2)," +
> "(3, 3)";
> Table result = tableEnv.sql(sqlQuery);
> DataSet<Row> resultSet = tableEnv.toDataSet(result, Row.class);
> List<Row> results = resultSet.collect();
> Table result2 = tableEnv.sql(sqlQuery2);
> DataSet<Row> resultSet2 = tableEnv.toDataSet(result2,
> Row.class);
> List<Row> results2 = resultSet2.collect();
> String expected = "1,1\n2,2\n3,3";
> compareResultAsText(results2, expected);
> compareResultAsText(results, expected);
> }
> {code}
> AR for {{results}} variable
> {noformat}
> java.lang.AssertionError: Different elements in arrays: expected 3 elements
> and received 2
> expected: [1,1, 2,2, 3,3]
> received: [1,1, 2,2]
> Expected :3
> Actual :2
> {noformat}
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)