I upgraded from 21.4.3 to 21.4.4 and my `complex_key_hashed` dictionaries with `update_field` cannot load anymore
```
2021.04.30 13:13:01.913021 [ 7023 ] {} <Error> ExternalDictionariesLoader: Could not load external dictionary 'complex_key_hashed_dict', next update is scheduled at 2021-04-30 13:14:06: std::exception. Code: 1001, type: std::length_error, e.what() = basic_string, Stack trace (when copying this message, always include the lines below):

0. ? @ 0x891bc99 in /usr/bin/clickhouse
1. ? @ 0x891bc60 in /usr/bin/clickhouse
2. ? @ 0x1435753b in ?
3. ? @ 0x1435871c in ?
4. DB::Field::operator=(std::__1::basic_string_view<char, std::__1::char_traits<char> > const&) @ 0xf997726 in /usr/bin/clickhouse
5. DB::ColumnString::get(unsigned long, DB::Field&) const @ 0xfa7d1d2 in /usr/bin/clickhouse
6. auto DB::HashedDictionary<(DB::DictionaryKeyType)1, false>::blockToAttributes(DB::Block const&)::'lambda'(auto&)::operator()<HashMapTable<StringRef, HashMapCellWithSavedHash<StringRef, StringRef, DefaultHash<StringRef, void>, HashTableNoState>, DefaultHash<StringRef, void>, HashTableGrower<8ul>, Allocator<true, true> > >(auto&) const @ 0xda21c0d in /usr/bin/clickhouse
7. DB::HashedDictionary<(DB::DictionaryKeyType)1, false>::blockToAttributes(DB::Block const&) @ 0xd91f299 in /usr/bin/clickhouse
8. DB::HashedDictionary<(DB::DictionaryKeyType)1, false>::updateData() @ 0xd9211a4 in /usr/bin/clickhouse
9. DB::HashedDictionary<(DB::DictionaryKeyType)1, false>::loadData() @ 0xd91dd5a in /usr/bin/clickhouse
10. DB::HashedDictionary<(DB::DictionaryKeyType)1, false>::HashedDictionary(DB::StorageID const&, DB::DictionaryStructure const&, std::__1::unique_ptr<DB::IDictionarySource, std::__1::default_delete<DB::IDictionarySource> >, DB::ExternalLoadableLifetime, bool, std::__1::shared_ptr<DB::Block>) @ 0xd91dad9 in /usr/bin/clickhouse
11. ? @ 0xda26b8d in /usr/bin/clickhouse
12. ? @ 0xda26ecc in /usr/bin/clickhouse
13. DB::DictionaryFactory::create(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, Poco::Util::AbstractConfiguration const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, DB::Context const&, bool) const @ 0xee13c28 in /usr/bin/clickhouse
14. DB::ExternalDictionariesLoader::create(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, Poco::Util::AbstractConfiguration const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) const @ 0xf40bea1 in /usr/bin/clickhouse
15. DB::ExternalLoader::LoadingDispatcher::loadSingleObject(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, DB::ExternalLoader::ObjectConfig const&, std::__1::shared_ptr<DB::IExternalLoadable const>) @ 0xf417de7 in /usr/bin/clickhouse
16. DB::ExternalLoader::LoadingDispatcher::doLoading(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, unsigned long, bool, unsigned long, bool) @ 0xf415249 in /usr/bin/clickhouse
17. ThreadFromGlobalPool::ThreadFromGlobalPool<void (DB::ExternalLoader::LoadingDispatcher::*)(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, unsigned long, bool, unsigned long, bool), DB::ExternalLoader::LoadingDispatcher*, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&, unsigned long&, bool&, unsigned long&, bool>(void (DB::ExternalLoader::LoadingDispatcher::*&&)(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, unsigned long, bool, unsigned long, bool), DB::ExternalLoader::LoadingDispatcher*&&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&, unsigned long&, bool&, unsigned long&, bool&&)::'lambda'()::operator()() @ 0xf41a421 in /usr/bin/clickhouse
18. ThreadPoolImpl<std::__1::thread>::worker(std::__1::__list_iterator<std::__1::thread, void*>) @ 0x8954fef in /usr/bin/clickhouse
19. ? @ 0x8958a83 in /usr/bin/clickhouse
20. start_thread @ 0x74a4 in /lib/x86_64-linux-gnu/libpthread-2.24.so
21. __clone @ 0xe8d0f in /lib/x86_64-linux-gnu/libc-2.24.so
 (version 21.4.4.30 (official build))
```
{
public:
    explicit DefaultValueProvider(Field default_value_, ColumnPtr default_values_column_ = nullptr)
        : default_value(std::move(default_value_))
        , default_values_column(default_values_column_)
    {
    }
    inline bool isConstant() const { return default_values_column == nullptr; }
    Field getDefaultValue(size_t row) const
    {
        if (default_values_column)
            return (*default_values_column)[row];
        return default_value;
    }
private:
    Field default_value;
    ColumnPtr default_values_column;
};
/** Support class for dictionary storages.
    The main idea is that during fetch we create all columns, but fill only columns that client requested.
    We need to create other columns during fetch, because in case of serialized storage we can skip
    unnecessary columns serialized in cache with skipSerializedInArena method.
    When result is fetched from the storage client of storage can filterOnlyNecessaryColumns
    and get only columns that match attributes_names_to_fetch.
 */
class DictionaryStorageFetchRequest