public ClickHouseValue newValue(ClickHouseDataConfig config) {
        if (template != null) {
            return template.copy();
        }

        ClickHouseValue value = null;
        switch (dataType) {
            case UInt8:
                value = config.isWidenUnsignedTypes() ? ClickHouseShortValue.ofNull()
                        : ClickHouseByteValue.ofUnsignedNull();
                break;
            case UInt16:
                value = config.isWidenUnsignedTypes() ? ClickHouseIntegerValue.ofNull()
                        : ClickHouseShortValue.ofUnsignedNull();
                break;
            case UInt32:
                value = config.isWidenUnsignedTypes() ? ClickHouseLongValue.ofNull()
                        : ClickHouseIntegerValue.ofUnsignedNull();
                break;
            case DateTime:
            case DateTime32:
            case DateTime64:
                value = ClickHouseDateTimeValue.ofNull(getScale(), config.getUseTimeZone());
                break;
            case SimpleAggregateFunction:
                value = nested.get(0).newValue(config);
                break;
            case AggregateFunction:
                value = ClickHouseEmptyValue.INSTANCE;
                switch (aggFuncType) {
                    case any:
                        value = nested.get(0).newValue(config);
                        break;
                    case groupBitmap:
                        value = ClickHouseBitmapValue.ofEmpty(nested.get(0).getDataType());
                        break;
                    default:
                        break;
                }
                break;
            case Array:
                value = newArrayValue(config);
                break;
            case Map:
                value = ClickHouseMapValue.ofEmpty(getKeyInfo().getObjectClass(config), // NOSONAR
                        getValueInfo().getObjectClass(config)); // NOSONAR
                break;
            default:
                break;
        }

        if (value == null) {
            throw new IllegalArgumentException("Unsupported data type: " + dataType.name());
        }

        return value;
    }
Gets aggregate function when column type is
{@link ClickHouseDataType#AggregateFunction}. So it will return
{@link ClickHouseAggregateFunction#quantile} when the column type is
{@code AggregateFunction(quantiles(0.5, 0.9), UInt64)}.

@return function name, null when column type is not AggregateFunction
clickhouse-data/src/main/java/com/clickhouse/data/ClickHouseColumn.java