You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@flink.apache.org by "Timo Walther (Jira)" <ji...@apache.org> on 2020/12/08 14:48:00 UTC

[jira] [Commented] (FLINK-20539) Type mismatch when using ROW in computed column

    [ https://issues.apache.org/jira/browse/FLINK-20539?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17245926#comment-17245926 ] 

Timo Walther commented on FLINK-20539:
--------------------------------------

This would work:
{code}
public static class S extends ScalarFunction {
	public @DataTypeHint("ROW<s1 STRING, s2 STRING>") Row eval(String s1, String s2) {
		return Row.of(s1, s2);
	}
}
env.createTemporarySystemFunction("CREATEROW", S.class);
{code}

> Type mismatch when using ROW in computed column
> -----------------------------------------------
>
>                 Key: FLINK-20539
>                 URL: https://issues.apache.org/jira/browse/FLINK-20539
>             Project: Flink
>          Issue Type: Sub-task
>          Components: Table SQL / Planner
>            Reporter: Timo Walther
>            Assignee: Timo Walther
>            Priority: Major
>
> The following SQL:
> {code}
> env.executeSql(
> 	"CREATE TABLE Orders (\n"
> 	+ "    order_number BIGINT,\n"
> 	+ "    price        INT,\n"
> 	+ "    first_name   STRING,\n"
> 	+ "    last_name    STRING,\n"
> 	+ "    buyer_name AS ROW(first_name, last_name)\n"
> 	+ ") WITH (\n"
> 	+ "  'connector' = 'datagen'\n"
> 	+ ")");
> env.executeSql("SELECT * FROM Orders").print();
> {code}
> Fails with:
> {code}
> Exception in thread "main" java.lang.AssertionError: Conversion to relational algebra failed to preserve datatypes:
> validated type:
> RecordType(BIGINT order_number, INTEGER price, VARCHAR(2147483647) CHARACTER SET "UTF-16LE" first_name, VARCHAR(2147483647) CHARACTER SET "UTF-16LE" last_name, RecordType:peek_no_expand(VARCHAR(2147483647) CHARACTER SET "UTF-16LE" EXPR$0, VARCHAR(2147483647) CHARACTER SET "UTF-16LE" EXPR$1) NOT NULL buyer_name) NOT NULL
> converted type:
> RecordType(BIGINT order_number, INTEGER price, VARCHAR(2147483647) CHARACTER SET "UTF-16LE" first_name, VARCHAR(2147483647) CHARACTER SET "UTF-16LE" last_name, RecordType(VARCHAR(2147483647) CHARACTER SET "UTF-16LE" EXPR$0, VARCHAR(2147483647) CHARACTER SET "UTF-16LE" EXPR$1) NOT NULL buyer_name) NOT NULL
> rel:
> LogicalProject(order_number=[$0], price=[$1], first_name=[$2], last_name=[$3], buyer_name=[ROW($2, $3)])
>   LogicalTableScan(table=[[default_catalog, default_database, Orders]])
> 	at org.apache.calcite.sql2rel.SqlToRelConverter.checkConvertedType(SqlToRelConverter.java:467)
> 	at org.apache.calcite.sql2rel.SqlToRelConverter.convertQuery(SqlToRelConverter.java:582)
> {code}



--
This message was sent by Atlassian Jira
(v8.3.4#803005)