May 11
Clickhouse. Использование ключа типа String в словаре (draft). complex_key_hashed
В заметке рассказывается о том, что делать, если ключ в словаре имеет не числовой тип, а строковый.
Существует несколько способов хранения словарей в памяти, каждый из которых имеет свои компромиссы между использованием CPU и RAM (дока Clickhouse). И если - так сложились обстоятельства - ключ словаря это натуральный ключ из источника имеющий строковый тип, а не UInt64, то параметр Layout придётся делать complex_key_hashed.
Посмотрим на примере из пет-проекта. Есть такой источник
CREATE DICTIONARY portfolio.actual_quotation_dict
(
ticker String,
quotation Decimal64(6)
)
PRIMARY KEY ticker
SOURCE(CLICKHOUSE(
QUERY 'SELECT ticker, quotation FROM portfolio.actual_quotation'
USER 'username'
PASSWORD 'password'
HOST 'localhost'
PORT 9000
))
LIFETIME(MIN 600 MAX 900)
LAYOUT(complex_key_hashed())И теперь при использовании словаря вызывая dictGet, нужно обернуть значение из словаря в tuple()
SELECT instr_short, ticker, qty, quotation
,dictGet('portfolio.actual_quotation_dict', 'quotation', tuple(ticker)) as act_quotation
, equity, balance_datetime
FROM portfolio.portfolio_history