[
https://issues.apache.org/jira/browse/FLINK-14987?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Dezhi Cai updated FLINK-14987:
------------------------------
Description:
sample code 1 fail with ValidationException. After investigation, i find that
the root cause may be related to the conversion between DecimalType and
TypeInformation<BigDecimal>, please see sample code 2.
sampe code 1:
{code:java}
public static void main(String[] args) {
JDBCOptions options = JDBCOptions.builder()
.setDBUrl("jdbc:mysql://127.0.0.1/test")
.setTableName("table1")
.setDriverName("com.mysql.jdbc.Driver")
.setUsername("root")
.setPassword("password")
.build();
TableSchema schema = TableSchema.builder()
.field("a", DataTypes.INT())
.field("b", DataTypes.BIGINT())
.field("c", DataTypes.FLOAT())
.field("d", DataTypes.DOUBLE())
.field("e", DataTypes.DECIMAL(24,3))
.field("f", DataTypes.TIMESTAMP(3))
.build();
JDBCTableSource source = JDBCTableSource.builder()
.setOptions(options)
.setSchema(schema)
.build();
TableSourceValidation.validateTableSource(source);
}
{code}
Exception in thread "main" org.apache.flink.table.api.ValidationException: Type
DECIMAL(24, 3) of table field 'LEGACY(BigDecimal)' does not match with type 'e;
of the field 'LEGACY(BigDecimal)' of the TableSource return type.Exception in
thread "main" org.apache.flink.table.api.ValidationException: Type DECIMAL(24,
3) of table field 'LEGACY(BigDecimal)' does not match with type 'e; of the
field 'LEGACY(BigDecimal)' of the TableSource return type. at
org.apache.flink.table.sources.TableSourceValidation.validateLogicalTypeEqualsPhysical(TableSourceValidation.java:184)
at
org.apache.flink.table.sources.TableSourceValidation.validateLogicalToPhysicalMapping(TableSourceValidation.java:156)
at
org.apache.flink.table.sources.TableSourceValidation.validateTableSource(TableSourceValidation.java:69)
at com.moodys.demo.Demo.main(Demo.java:43)
sample code 2 :
{code:java}
public static void main(String[] args) {
DataType originalDataType = DataTypes.DECIMAL(24,3);
TypeInformation legacyType =
LegacyTypeInfoDataTypeConverter.toLegacyTypeInfo(originalDataType);
DataType dataType = LegacyTypeInfoDataTypeConverter.toDataType(legacyType);
System.out.println(originalDataType.equals(dataType));
}
// output: false{code}
was:
below sample code fail ValidationException. After investigation, i find that
the root cause may be related to the conversion between DecimalType and
TypeInformation<BigDecimal>.
LegacyTypeInfoDataTypeConverter.toLegacyTypeInfo
LegacyTypeInfoDataTypeConverter.toDataType
sampe code 1:
{code:java}
public static void main(String[] args) {
JDBCOptions options = JDBCOptions.builder()
.setDBUrl("jdbc:mysql://127.0.0.1/test")
.setTableName("table1")
.setDriverName("com.mysql.jdbc.Driver")
.setUsername("root")
.setPassword("password")
.build();
TableSchema schema = TableSchema.builder()
.field("a", DataTypes.INT())
.field("b", DataTypes.BIGINT())
.field("c", DataTypes.FLOAT())
.field("d", DataTypes.DOUBLE())
.field("e", DataTypes.DECIMAL(24,3))
.field("f", DataTypes.TIMESTAMP(3))
.build();
JDBCTableSource source = JDBCTableSource.builder()
.setOptions(options)
.setSchema(schema)
.build();
TableSourceValidation.validateTableSource(source);
}
{code}
Exception in thread "main" org.apache.flink.table.api.ValidationException: Type
DECIMAL(24, 3) of table field 'LEGACY(BigDecimal)' does not match with type 'e;
of the field 'LEGACY(BigDecimal)' of the TableSource return type.Exception in
thread "main" org.apache.flink.table.api.ValidationException: Type DECIMAL(24,
3) of table field 'LEGACY(BigDecimal)' does not match with type 'e; of the
field 'LEGACY(BigDecimal)' of the TableSource return type. at
org.apache.flink.table.sources.TableSourceValidation.validateLogicalTypeEqualsPhysical(TableSourceValidation.java:184)
at
org.apache.flink.table.sources.TableSourceValidation.validateLogicalToPhysicalMapping(TableSourceValidation.java:156)
at
org.apache.flink.table.sources.TableSourceValidation.validateTableSource(TableSourceValidation.java:69)
at com.moodys.demo.Demo.main(Demo.java:43)
sample code 2 :
{code:java}
public static void main(String[] args) {
DataType originalDataType = DataTypes.DECIMAL(24,3);
TypeInformation legacyType =
LegacyTypeInfoDataTypeConverter.toLegacyTypeInfo(originalDataType);
DataType dataType = LegacyTypeInfoDataTypeConverter.toDataType(legacyType);
System.out.println(originalDataType.equals(dataType));
}
// output: false{code}
> JDBCTableSource can't support DataTypes.DECIMAL
> -----------------------------------------------
>
> Key: FLINK-14987
> URL: https://issues.apache.org/jira/browse/FLINK-14987
> Project: Flink
> Issue Type: Bug
> Components: Connectors / JDBC, Table SQL / API
> Affects Versions: 1.9.0, 1.9.1
> Reporter: Dezhi Cai
> Priority: Blocker
>
>
> sample code 1 fail with ValidationException. After investigation, i find that
> the root cause may be related to the conversion between DecimalType and
> TypeInformation<BigDecimal>, please see sample code 2.
>
> sampe code 1:
> {code:java}
> public static void main(String[] args) {
> JDBCOptions options = JDBCOptions.builder()
> .setDBUrl("jdbc:mysql://127.0.0.1/test")
> .setTableName("table1")
> .setDriverName("com.mysql.jdbc.Driver")
> .setUsername("root")
> .setPassword("password")
> .build();
> TableSchema schema = TableSchema.builder()
> .field("a", DataTypes.INT())
> .field("b", DataTypes.BIGINT())
> .field("c", DataTypes.FLOAT())
> .field("d", DataTypes.DOUBLE())
> .field("e", DataTypes.DECIMAL(24,3))
> .field("f", DataTypes.TIMESTAMP(3))
> .build();
> JDBCTableSource source = JDBCTableSource.builder()
> .setOptions(options)
> .setSchema(schema)
> .build();
> TableSourceValidation.validateTableSource(source);
> }
> {code}
> Exception in thread "main" org.apache.flink.table.api.ValidationException:
> Type DECIMAL(24, 3) of table field 'LEGACY(BigDecimal)' does not match with
> type 'e; of the field 'LEGACY(BigDecimal)' of the TableSource return
> type.Exception in thread "main"
> org.apache.flink.table.api.ValidationException: Type DECIMAL(24, 3) of table
> field 'LEGACY(BigDecimal)' does not match with type 'e; of the field
> 'LEGACY(BigDecimal)' of the TableSource return type. at
> org.apache.flink.table.sources.TableSourceValidation.validateLogicalTypeEqualsPhysical(TableSourceValidation.java:184)
> at
> org.apache.flink.table.sources.TableSourceValidation.validateLogicalToPhysicalMapping(TableSourceValidation.java:156)
> at
> org.apache.flink.table.sources.TableSourceValidation.validateTableSource(TableSourceValidation.java:69)
> at com.moodys.demo.Demo.main(Demo.java:43)
>
> sample code 2 :
> {code:java}
> public static void main(String[] args) {
> DataType originalDataType = DataTypes.DECIMAL(24,3);
> TypeInformation legacyType =
> LegacyTypeInfoDataTypeConverter.toLegacyTypeInfo(originalDataType);
> DataType dataType =
> LegacyTypeInfoDataTypeConverter.toDataType(legacyType);
> System.out.println(originalDataType.equals(dataType));
> }
> // output: false{code}
>
>
--
This message was sent by Atlassian Jira
(v8.3.4#803005)