场景描述:Flink API废弃后的一个问题。

大家担心的终于来了。


 

问题

前两天群友反应了一个问题:
Flink1.9进行了数据类型的转化目前使用的Type被弃用,推荐使用Datatypes类型,但是之前使用的Type类型的方法对应的schema typeinformation没有对应的API,无法使用。


一个Flink API的废弃引发的血案_java

一个Flink API的废弃引发的血案_java_02

一个Flink API的废弃引发的血案_java_03
 

解决办法

整个问题的根本原因是废弃了一个tablesink的注册方法。

一个Flink API的废弃引发的血案_java_04

一个Flink API的废弃引发的血案_java_05

一个Flink API的废弃引发的血案_java_06

一个Flink API的废弃引发的血案_java_07

一个Flink API的废弃引发的血案_java_08

一个Flink API的废弃引发的血案_java_09


解决方案如下:

一个Flink API的废弃引发的血案_java_10代码如下:

TableSink csvSink = new CsvTableSink("/path/to/file", "|");String[] fieldNames = {"product", "amount"};


TypeInformation[] fieldTypes = {Types.STRING, Types.INT};


DataType[] newFieldType = {DataTypes.STRING(), DataTypes.INT()};TypeInformation<?>[] newtypeInformations = TypeConversions.fromDataTypeToLegacyInfo(newFieldType);


// 也可以下面这样//TypeInformation<?> str = LegacyTypeInfoDataTypeConverter.toLegacyTypeInfo(DataTypes.STRING());//TypeInformation<?> integ = LegacyTypeInfoDataTypeConverter.toLegacyTypeInfo(DataTypes.INT());//TypeInformation[] newTypInfo = {str, integ};tableEnv.registerTableSink("RubberOrders", fieldNames, newtypeInformations, csvSink);
 

思考

没有最坑,只有更坑,请问Flink集群大家升级了几次了?一个Flink API的废弃引发的血案_java_11