如何将多集数据类型转换为flink sql中的字符串?



当我在flink sql中做这样的查询时:

SELECT COLLECT(col1) OVER (
PARTITION BY col2
ORDER BY col3
ROWS BETWEEN 1 PRECEDING AND CURRENT ROW
) AS col4
FROM table 

我怎么能把col4,这是一个多集数据类型,字符串?

我试过cast(col4 as string),但它不起作用。例外是Cast function cannot convert value of type BIGINT MULTISET to type VARCHAR(2147483647)

或者我如何将多集数据传递给java udf,然后转换为字符串?如何编写这样的udf?

目前,多集的强制转换是有限的。社区目前正在努力改进这一点。

在此之前,我建议使用标量函数。udf可以接受所有类型。因为自动反射逻辑为MAP类型保留了Map类。你必须添加一个类型提示。
public class MultisetToString extends ScalarFunction {
public String eval(@DataTypeHint("MULTISET<STRING>") Map<String, Integer> multiset) {
return multiset.toString();
}
}

还有另一个正在积极解决的开放问题,它与支持打印有关,但也将所有结构化类型强制转换为STRING

最新更新