I want to convert dataStream to Table. The type of dataSream is a POJO, which
contains a enum field.
1. The enum field is RAW('classname', '...') in table. When I execute `SELECT *
FROM t_test` and print the result, It throws EOFException.
2. If I assign the field is STRING in schema, It throws cannot cast "TestEnum"
to "java.lang.String"
Is there any way to define the enum field as STRING in table?
My code is as follows:
Flink 1.17.1
final StreamExecutionEnvironment env =
StreamExecutionEnvironment.getExecutionEnvironment();
StreamTableEnvironment tableEnv = StreamTableEnvironment.create(env);
DataStreamSource<TestData> source = env.fromElements(
new TestData("1", TestEnum.A),
new TestData("2", TestEnum.B)
);
Schema schema = Schema
.newBuilder()
.column("s", DataTypes.STRING())
.column("en", DataTypes.STRING())
.build();
Table table = tableEnv.fromDataStream(source);
tableEnv.createTemporaryView("t_test", table);
tableEnv.executeSql("DESC t_test").print();
tableEnv.executeSql("select * from t_test").print();
@Data
@NoArgsConstructor
@AllArgsConstructor
public static class TestData {
private String s;
private TestEnum en;
}
public enum TestEnum {
A, B, C
}
+----+--------------------------------+--------------------------------+
| op | s | en |
+----+--------------------------------+--------------------------------+
| +I | 1 | SqlRawValue{?} |
Exception in thread "main" org.apache.flink.util.FlinkRuntimeException:
java.io.EOFException
at
org.apache.flink.table.data.binary.BinaryRawValueData.toObject(BinaryRawValueData.java:66)
at GeneratedCastExecutor$1.cast(Unknown Source)
at
org.apache.flink.table.planner.functions.casting.RowDataToStringConverterImpl.lambda$init$0(RowDataToStringConverterImpl.java:74)
at
org.apache.flink.table.planner.functions.casting.RowDataToStringConverterImpl.convert(RowDataToStringConverterImpl.java:87)
at
org.apache.flink.table.utils.print.TableauStyle.rowFieldsToString(TableauStyle.java:167)
at
org.apache.flink.table.utils.print.TableauStyle.print(TableauStyle.java:148)
at
org.apache.flink.table.api.internal.TableResultImpl.print(TableResultImpl.java:153)
Caused by: java.io.EOFException
at java.base/java.io.DataInputStream.readFully(DataInputStream.java:202)
at java.base/java.io.DataInputStream.readFully(DataInputStream.java:170)
at
org.apache.flink.table.runtime.typeutils.RawValueDataSerializer.deserialize(RawValueDataSerializer.java:96)
at
org.apache.flink.table.runtime.typeutils.RawValueDataSerializer.deserialize(RawValueDataSerializer.java:36)
at
org.apache.flink.util.InstantiationUtil.deserializeFromByteArray(InstantiationUtil.java:505)
at
org.apache.flink.table.data.binary.BinaryRawValueData.toObject(BinaryRawValueData.java:64)
... 7 more