Alexandre Decuq created FLINK-29759:
---------------------------------------
Summary: Cast type in LEFT JOIN
Key: FLINK-29759
URL: https://issues.apache.org/jira/browse/FLINK-29759
Project: Flink
Issue Type: Bug
Components: API / Core
Affects Versions: 1.14.5
Reporter: Alexandre Decuq
Hello,
I would like to use LEFT JOIN in order to implement a non blocking join without
two tables (relationship is optional).
There is a specificity: key on both side has not the same type (STRING vs INT).
Here a snap a code:
Avro input:
{code:java}
{
"name": "CompanyBankAccountMessage",
"type": "record",
"namespace": "com.kyriba.dataproduct.core.model.input",
"fields": [
{
"name": "data",
"type": {
"fields": [
{
"name": "CURRENCY_ID",
"type": [
"null",
"string"
],
"default": null,
},
...
]
}
}
]
}{code}
Avro output:
{code:java}
{
"name": "CurrencyMessage",
"type": "record",
"namespace": "com.kyriba.dataproduct.core.model.input",
"fields": [
{
"name": "data",
"type": {
"fields": [
{
"name": "CURRENCY_ID",
"type": "int"
},
...
]
}
}
]
}{code}
Sql query:
{code:java}
SELECT ...
FROM `my.input.COMPANY_BANK_ACCOUNT.v1.avro` as COMPANY_BANK_ACCOUNT
LEFT JOIN `my.input.CURRENCY.v1.avro` as CURRENCY
ON CAST(COMPANY_BANK_ACCOUNT.CURRENCY_ID as INT) = CURRENCY.CURRENCY_ID{code}
I got this exception:
{code:java}
Conversion to relational algebra failed to preserve datatypes:
validated type:
RecordType(BIGINT currencyUid, ...)
converted type:
RecordType(BIGINT currencyUid NOT NULL, ...)
rel:
LogicalProject(currencyUid=[CAST($116.CURRENCY_ID):BIGINT NOT NULL], ...)
LogicalJoin(condition=[=($11, $117)], joinType=[left])
LogicalTableScan(table=[[data-platform, core,
kyriba.flink-sql-test.core.cdc.COMPANY_BANK_ACCOUNT.v1.avro]])
LogicalProject(the_port_key=[$0], data=[$1], $f2=[$1.CURRENCY_ID])
LogicalTableScan(table=[[data-platform, core,
kyriba.flink-sql-test.core.cdc.CURRENCY.v1.avro]])
at
org.apache.calcite.sql2rel.SqlToRelConverter.checkConvertedType(SqlToRelConverter.java:467){code}
Did I make something wrong or this is a bug?
--
This message was sent by Atlassian Jira
(v8.20.10#820010)