函数实现逻辑
import org.apache.flink.table.api.DataTypes;
import org.apache.flink.table.api.dataview.ListView;
import org.apache.flink.table.runtime.functions.aggregate.BuiltInAggregateFunction;
import org.apache.flink.table.types.DataType;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
public class GroupConcatFullUDF extends BuiltInAggregateFunction<String, GroupConcatFullUDF.GroupConcatAccumulator> {
private static final String DEFAULT_SEPARATOR = ",";
@Override
public DataType getOutputDataType() {
return DataTypes.STRING();
}
@Override
public List<DataType> getArgumentDataTypes() {
List<DataType> types = new ArrayList<>(3);
types.add(DataTypes.STRING());
types.add(DataTypes.STRING());
types.add(DataTypes.BOOLEAN());
return types;
}
@Override
public DataType getAccumulatorDataType() {
return DataTypes.STRUCTURED(
GroupConcatUDF.GroupConcatAccumulator.class,
DataTypes.FIELD(
"list",
ListView.newListViewDataType(
DataTypes.STRING())),
DataTypes.FIELD(
"retractList",
ListView.newListViewDataType(
DataTypes.STRING())));
}
public void resetAccumulator(GroupConcatUDF.GroupConcatAccumulator acc) {
acc.list.clear();
acc.retractList.clear();
}
@Override
public GroupConcatAccumulator createAccumulator() {