column_name
'value_int'
'value_string'
'value_decimal'
'value_string_nullable'
elements_count
5000000
7500000
layout_suffix
HASHED
SPARSE_HASHED
CREATE TABLE simple_key_dictionary_source_table
(
id UInt64,
value_int UInt64,
value_string String,
value_decimal Decimal64(8),
value_string_nullable Nullable(String)
) ENGINE = Memory
CREATE TABLE complex_key_dictionary_source_table
(
id UInt64,
id_key String,
value_int UInt64,
value_string String,
value_decimal Decimal64(8),
value_string_nullable Nullable(String)
) ENGINE = Memory
CREATE DICTIONARY IF NOT EXISTS simple_key_{layout_suffix}_dictionary
(
id UInt64,
value_int UInt64,
value_string String,
value_decimal Decimal64(8),
value_string_nullable Nullable(String)
)
PRIMARY KEY id
SOURCE(CLICKHOUSE(TABLE 'simple_key_dictionary_source_table'))
LAYOUT({layout_suffix}())
LIFETIME(0)
CREATE DICTIONARY IF NOT EXISTS complex_key_{layout_suffix}_dictionary
(
id UInt64,
id_key String,
value_int UInt64,
value_string String,
value_decimal Decimal64(8),
value_string_nullable Nullable(String)
)
PRIMARY KEY id, id_key
SOURCE(CLICKHOUSE(TABLE 'complex_key_dictionary_source_table'))
LAYOUT(COMPLEX_KEY_{layout_suffix}())
LIFETIME(0)
INSERT INTO simple_key_dictionary_source_table
SELECT number, number, toString(number), toDecimal64(number, 8), toString(number)
FROM system.numbers
LIMIT 5000000
INSERT INTO complex_key_dictionary_source_table
SELECT number, toString(number), number, toString(number), toDecimal64(number, 8), toString(number)
FROM system.numbers
LIMIT 5000000
SYSTEM RELOAD DICTIONARY simple_key_{layout_suffix}_dictionary
SYSTEM RELOAD DICTIONARY complex_key_{layout_suffix}_dictionary
SYSTEM RELOAD DICTIONARY simple_key_{layout_suffix}_dictionary
SYSTEM RELOAD DICTIONARY complex_key_{layout_suffix}_dictionary
WITH rand64() % toUInt64({elements_count}) as key
SELECT dictGet('default.simple_key_{layout_suffix}_dictionary', {column_name}, key)
FROM system.numbers
LIMIT {elements_count}
FORMAT Null
WITH rand64() % toUInt64({elements_count}) as key
SELECT dictHas('default.simple_key_{layout_suffix}_dictionary', key)
FROM system.numbers
LIMIT {elements_count}
FORMAT Null
SELECT * FROM simple_key_{layout_suffix}_dictionary FORMAT Null
WITH (rand64() % toUInt64({elements_count}), toString(rand64() % toUInt64({elements_count}))) as key
SELECT dictGet('default.complex_key_{layout_suffix}_dictionary', {column_name}, key)
FROM system.numbers
LIMIT {elements_count}
FORMAT Null
WITH (rand64() % toUInt64({elements_count}), toString(rand64() % toUInt64({elements_count}))) as key
SELECT dictHas('default.complex_key_{layout_suffix}_dictionary', key)
FROM system.numbers
LIMIT {elements_count}
FORMAT Null
SELECT * FROM complex_key_{layout_suffix}_dictionary FORMAT Null
DROP TABLE IF EXISTS simple_key_dictionary_source_table
DROP TABLE IF EXISTS complex_key_dictionary_source_table
DROP DICTIONARY IF EXISTS simple_key_{layout_suffix}_dictionary
DROP DICTIONARY IF EXISTS complex_key_{layout_suffix}_dictionary