flink1.14.5我用table api从mysql写入es,mysql源中有一个字段通过collect聚合函数默认得到了MULTISET类型,该字段需要对应输出到es的array类型中,但是报错:Exception in thread "main" java.lang.UnsupportedOperationException: JSON format doesn't support non-string as key type of map. The type is: MULTISET?
这个问题是由于Flink的Table API在处理MySQL数据时,将MULTISET类型的字段转换为这个问题是由于Flink的Table API在处理MySQL数据时,将MULTISET类型的字段转换为了JSON格式,而JSON格式不支持非字符串类型的键。为了解决这个问题,你可以尝试以下方法:
在MySQL源中,将需要输出到ES的字段类型更改为字符串类型。例如,如果原始字段类型为
INT
,则将其更改为VARCHAR(255)
。在Flink的Table API中,使用
CAST
函数将MULTISET类型的字段转换为字符串类型。例如:
tableEnv.from("your_mysql_source")
.select("id", "name", CAST("multiset_field", DataTypes.STRING()).as("multiset_field"))
.writeTo("your_es_sink");
这样,你就可以将MULTISET类型的字段转换为字符串类型,并将其写入ES。