**Describe the unexpected behaviour**
maxMap is removing entries with empty string or zero value.

**How to reproduce**

String array
SELECT maxMap(a, b) from values ('a Array(String), b Array(String)',(['A'],['']),(['B'],['']));

┌─maxMap(a, b) ─┐
│ ([],[])                    │ 
└───────────┘

Numeric array
`SELECT maxMap(a, b) from values ('a Array(String), b Array(UInt64)',(['A'],[0]),(['B'],[0]));

┌─maxMap(a, b) ─┐
│ ([],[])                    │ 
└───────────┘
`
It happens with all versions published.

**Expected behavior**
We expect this to maintain those keys with its value (empty string or zero).

auto & to_values_arr = assert_cast<ColumnArray &>(to_tuple.getColumn(col + 1));
            auto & to_values_offsets = to_values_arr.getOffsets();
            to_values_offsets.push_back(to_values_offsets.back() + size);
            to_values_arr.getData().reserve(size);
        }
        
        for (const auto & elem : merged_maps)
        {
            
            to_keys_col.insert(elem.first);
            
            for (size_t col = 0; col < values_types.size(); ++col)
            {
                auto & to_values_col = assert_cast<ColumnArray &>(to_tuple.getColumn(col + 1)).getData();
                to_values_col.insert(elem.second[col]);
            }
        }
    }
    bool keepKey(const T & key) const { return static_cast<const Derived &>(*this).keepKey(key); }
    String getName() const override { return static_cast<const Derived &>(*this).getName(); }
};
template <typename T, bool overflow, bool tuple_argument>
class AggregateFunctionSumMap final :
    public AggregateFunctionMapBase<T, AggregateFunctionSumMap<T, overflow, tuple_argument>, FieldVisitorSum, overflow, tuple_argument>
{
private:
    using Self = AggregateFunctionSumMap<T, overflow, tuple_argument>;
    using Base = AggregateFunctionMapBase<T, Self, FieldVisitorSum, overflow, tuple_argument>;
public:
    AggregateFunctionSumMap(const DataTypePtr & keys_type_,