CREATE TABLE simple_key_direct_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_direct_dictionary_source_table ( id UInt64, id_key String, value_int UInt64, value_string String, value_decimal Decimal64(8), value_string_nullable Nullable(String) ) ENGINE = TinyLog; CREATE DICTIONARY simple_key_direct_dictionary ( id UInt64, value_int UInt64, value_string String, value_decimal Decimal64(8), value_string_nullable Nullable(String) ) PRIMARY KEY id SOURCE(CLICKHOUSE(DB 'default' TABLE 'simple_key_direct_dictionary_source_table')) LAYOUT(DIRECT()) CREATE DICTIONARY complex_key_direct_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(DB 'default' TABLE 'complex_key_direct_dictionary_source_table')) LAYOUT(COMPLEX_KEY_DIRECT()) INSERT INTO simple_key_direct_dictionary_source_table SELECT number, number, toString(number), toDecimal64(number, 8), toString(number) FROM system.numbers LIMIT 100000; INSERT INTO complex_key_direct_dictionary_source_table SELECT number, toString(number), number, toString(number), toDecimal64(number, 8), toString(number) FROM system.numbers LIMIT 100000; column_name 'value_int' 'value_string' 'value_decimal' 'value_string_nullable' elements_count 25000 50000 75000 100000 SELECT dictGet('default.simple_key_direct_dictionary', {column_name}, number) FROM system.numbers LIMIT {elements_count} FORMAT Null; SELECT dictGet('default.simple_key_direct_dictionary', ('value_int', 'value_string', 'value_decimal', 'value_string_nullable'), number) FROM system.numbers LIMIT {elements_count} FORMAT Null; SELECT dictHas('default.simple_key_direct_dictionary', number) FROM system.numbers LIMIT {elements_count} FORMAT Null; SELECT dictGet('default.complex_key_direct_dictionary', {column_name}, (number, toString(number))) FROM system.numbers LIMIT {elements_count} FORMAT Null; SELECT dictGet('default.complex_key_direct_dictionary', ('value_int', 'value_string', 'value_decimal', 'value_string_nullable'), (number, toString(number))) FROM system.numbers LIMIT {elements_count} FORMAT Null; SELECT dictHas('default.complex_key_direct_dictionary', (number, toString(number))) FROM system.numbers LIMIT {elements_count} FORMAT Null; DROP TABLE IF EXISTS simple_key_direct_dictionary_source_table; DROP TABLE IF EXISTS complex_key_direct_dictionary_source_table; DROP DICTIONARY IF EXISTS simple_key_direct_dictionary; DROP DICTIONARY IF EXISTS complex_key_direct_dictionary;