当我在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?
发布于 2021-10-20 07:32:37
目前,多集的强制转换是有限的。这个社区是improving this上的currently working。
在此之前,我建议使用标量函数。UDF可以接受所有类型。因为自动反射逻辑为映射类型保留了Map
类。您必须添加类型提示。
public class MultisetToString extends ScalarFunction {
public String eval(@DataTypeHint("MULTISET<STRING>") Map<String, Integer> multiset) {
return multiset.toString();
}
}
发布于 2021-10-20 13:56:00
还有另一个正在积极开发的open issue,它不仅支持打印,而且还将所有结构化类型转换为字符串
https://stackoverflow.com/questions/69640052
复制相似问题