I have a table with one million rows of data. And It's schema is like:
```
create table redis_dictionary_test
(
	date String,
	id String,
	value Int64
)
engine = MergeTree()
partition by date
order by id
settings index_granularity = 8192;
```

I also inserted one million key-value pairs into Redis.
The dictionary is like:
```
create dictionary redis_dict
(
	date String,
	id String,
	value Int64
)
PRIMARY KEY date, id
SOURCE(REDIS(
	host '127.0.0.1'
	port 6379
	storage_type 'hash_map'
	db_index 0
))
LAYOUT(COMPLEX_KEY_DIRECT())
```
When I execute this query: `SELECT COUNT(DISTINCT dictGet('redis_dict', 'value', tuple(date, id))) FROM redis_dictionary_test;`, ClickHouse seems stuck. Progress was in this state: 122.88 thousand rows, 5.84 MB (1.20 million rows/s., 56.83 MB/s.)  12% about five minutes. Finally, I canceled query.

I am sure Redis is fine. Because I monitored Redis and it could accept read and write commands.

I also executed this query on 1000, 10000 and 100000 rows of data. They can return data normally.

What happened to ClickHouse? Where can I find out the reason?
const auto & keys_array = keys.get<RedisArray>(cursor);
                if (keys_array.size() < 2)
                {
                    throw Exception(ErrorCodes::LOGICAL_ERROR,
                        "Too low keys in request to source: {}, expected 2 or more",
                        DB::toString(keys_array.size()));
                }
                if (num_rows + keys_array.size() - 1 > max_block_size)
                    break;
                Poco::Redis::Command command_for_values("HMGET");
                for (const auto & elem : keys_array)
                    command_for_values.addRedisType(elem);
                auto values = client->execute<RedisArray>(command_for_values);
                if (keys_array.size() != values.size() + 1) 
                    throw Exception(ErrorCodes::NUMBER_OF_COLUMNS_DOESNT_MATCH,
                        "Inconsistent sizes of keys and values in Redis request");
                const auto & primary_key = keys_array.get<RedisBulkString>(0);
                for (size_t i = 0; i < values.size(); ++i)
                {
                    const auto & secondary_key = keys_array.get<RedisBulkString>(i + 1);
                    const auto & value = values.get<RedisBulkString>(i);
                    
                    if (!value.isNull())
                    {
                        insert_value_by_idx(0, primary_key);
                        insert_value_by_idx(1, secondary_key);
                        insert_value_by_idx(2, value);
                        ++num_rows;
                    }
                }