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(); } |
2.版本0.189之後請使用:
@OutputFunction("array(bigint)") public static void output(@AggregationState SliceState state, BlockBuilder out) { // 獲取狀態 Slice slice = state.getSlice(); // 數據爲空, 返回一個空數組 if (slice == null) { out.appendNull(); return; } // 構造結果: [A:100, B:50, C:10, ......] BlockBuilder blockBuilder = out.beginBlockEntry(); for (int index = 0; index < slice.length(); index += 4) { BIGINT.writeLong(blockBuilder, slice.getInt(index)); } //返回結果 out.closeEntry(); } |
上面兩段代碼實現的邏輯相同