Presto UDAF 输出数组(array)

本文介绍了Presto中UDAF(用户定义聚合函数)处理数组(array)的方式,对比了版本0.189之前和之后的使用方法,虽然逻辑相同,但存在使用上的差异。
摘要由CSDN通过智能技术生成

1.版本0.189之前的使用:

@OutputFunction("array(" + StandardTypes.BIGINT + ")")

    public static void output(SliceState state, BlockBuilder out) {

        // 获取状态

        Slice slice = state.getSlice();

        // 数据为空, 返回一个空数组

        if (null == slice) {

            BlockBuilder blockBuilder = BigintType.BIGINT.createBlockBuilder(new BlockBuilderStatus(), 0);

            out.writeObject(blockBuilder.build());

            out.closeEntry();

            return;

        }

        // 构造结果: [A:100, B:50, C:10, ......]

        BlockBuilder blockBuilder = BigintType.BIGINT.createBlockBuilder(new BlockBuilderStatus(), slice.length() / 4);

        for (int index = 0; index < slice.length(); index += 4) {

            BigintType.BIGINT.writeLong(blockBuilder, slice.getInt(index));

        }

        // 返回结果

        out.writeObject(blockBuilder.build());

        out.closeEntry();

    }
<
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值