CREATE TABLE simple_key_range_hashed_dictionary_source_table ( id UInt64, value UInt64, start UInt64, end UInt64 ) ENGINE = Memory; CREATE TABLE complex_key_range_hashed_dictionary_source_table ( id UInt64, id_key String, value UInt64, start UInt64, end UInt64 ) ENGINE = Memory; CREATE DICTIONARY simple_key_range_hashed_dictionary ( id UInt64, value UInt64, start UInt64, end UInt64 ) PRIMARY KEY id SOURCE(CLICKHOUSE(DB 'default' TABLE 'simple_key_range_hashed_dictionary_source_table')) LAYOUT(RANGE_HASHED()) RANGE(MIN start MAX end) LIFETIME(MIN 0 MAX 1000); CREATE DICTIONARY complex_key_range_hashed_dictionary ( id UInt64, id_key String, value UInt64, start UInt64, end UInt64 ) PRIMARY KEY id, id_key SOURCE(CLICKHOUSE(DB 'default' TABLE 'complex_key_range_hashed_dictionary_source_table')) LAYOUT(COMPLEX_KEY_RANGE_HASHED()) RANGE(MIN start MAX end) LIFETIME(MIN 0 MAX 1000); INSERT INTO simple_key_range_hashed_dictionary_source_table SELECT key, key, range_start * 2, range_start * 2 + 1 FROM (SELECT number as key FROM numbers(10000)) as keys, (SELECT number as range_start FROM numbers(1000)) as ranges; INSERT INTO complex_key_range_hashed_dictionary_source_table SELECT key, toString(key), key, range_start * 2, range_start * 2 + 1 FROM (SELECT number as key FROM numbers(10000)) as keys, (SELECT number as range_start FROM numbers(1000)) as ranges; elements_count 500000 750000 WITH rand64() % 5000 as key SELECT dictGet('default.simple_key_range_hashed_dictionary', 'value', toUInt64(key), key) FROM system.numbers LIMIT {elements_count} FORMAT Null; WITH rand64() % 5000 as key SELECT dictHas('default.simple_key_range_hashed_dictionary', toUInt64(key), key) FROM system.numbers LIMIT {elements_count} FORMAT Null; SELECT * FROM simple_key_range_hashed_dictionary FORMAT Null; WITH (rand64() % toUInt64(5000) as key, toString(key) as key_id) as complex_key SELECT dictGet('default.complex_key_range_hashed_dictionary', 'value', complex_key, key) FROM system.numbers LIMIT {elements_count} FORMAT Null; WITH (rand64() % toUInt64(5000) as key, toString(key) as key_id) as complex_key SELECT dictHas('default.complex_key_range_hashed_dictionary', complex_key, key) FROM system.numbers LIMIT {elements_count} FORMAT Null; SELECT * FROM complex_key_range_hashed_dictionary FORMAT Null; DROP DICTIONARY IF EXISTS simple_key_range_hashed_dictionary; DROP DICTIONARY IF EXISTS complex_key_range_hashed_dictionary; DROP TABLE IF EXISTS simple_key_range_hashed_dictionary_source_table; DROP TABLE IF EXISTS complex_key_range_hashed_dictionary_source_table;