大家好:

  我最近在使用 Flink SQL 做一些性能测试,我发现 Flink Buildin 的 Aggr 性能都很慢,比如 COUNT,LISTAGG 等等。
我采用自己写的 count 性能是 buildin 的 COUNT 的函数的两倍都不止。(各种窗口都测试过,不知道是不是我使用错误)


SQL:


select
      query_nor,
      sum(cast (1asbigint))as query_nor_counter
    from ods_search_track
    groupby
      query_nor,
      HOP(
        event_time,interval'30'SECOND,interval'30'MINUTE)
sum:
public class Sum extends AggregateFunction<Long, AtomicLong> {

@Override
public boolean isDeterministic() {
return false;
}

@Override
public AtomicLong createAccumulator() {
return new AtomicLong();
}

@Override
public void open(FunctionContext context) throws Exception {

    }

@Override
public Long getValue(AtomicLong acc) {
return acc.get();
}

@Override
public TypeInformation getResultType() {
return Types.LONG;
}

public void merge(AtomicLong acc, Iterable<AtomicLong> it) {
        Iterator<AtomicLong> iter = it.iterator();
        while (iter.hasNext()) {
            AtomicLong a = iter.next();
acc.addAndGet(a.get());
}
    }

public void accumulate(AtomicLong datas, Long data) {
        datas.addAndGet(data);
}
}


使用 Flink buildin COUNT


select
      query_nor,
      count(1) as query_nor_counter
    from ods_search_track
    groupby
      query_nor,
      HOP(
        event_time,interval'30'SECOND,interval'30'MINUTE)

回复