использовать словари вместо джойнов шардировать данные по одному ключу чтобы избавиться от GLOBAL
А как нибудь можно создать словарь на основе таблицы? У меня одна из таблиц как раз состоит из 2 столбцов (ключ-значение)
да, можно, https://clickhouse.tech/docs/ru/sql-reference/dictionaries/external-dictionaries/external-dicts-dict-sources/#dicts-external_dicts_dict_sources-clickhouse
А что за параметр LIFETIME?
Периодичность обновления словаря
А если таблица, на основе которой создается словарь не обновляется? То какой LIFETIME устанавливать?
это периодичность подгрузки словарей из таблицы
И каким тогда его лучше установить?
можете выставить в 0 и тогда словарь не будет обновляться
Тут можно поподробнее ознакомиться https://clickhouse.tech/docs/ru/sql-reference/dictionaries/external-dictionaries/external-dicts-dict-lifetime/
А получается для создания словаря нужен обязательно PRIMARY KEY?
да, вы по нему достаёте значения из словаря
dictGet('dict_auto_weight', 'coeff_weight', cast(regno, 'UInt64')) as Num У меня просто уникальное поле regno и оно типа String, а dictGet требует UInt64 Как можно это обойти?
Использовать составной ключ, тут больше инфы https://clickhouse.tech/docs/ru/sql-reference/dictionaries/external-dictionaries/external-dicts-dict-structure/
Да, спасибо, это отличный выход, но после создания у меня не видит атрибута coeff_weight Int16 и выдает ошибку Exception: external dictionary 'dict_auto_weight' not found CREATE DICTIONARY dict_auto_weight ( regno String, coeff_weight Int16 ) PRIMARY KEY regno SOURCE(CLICKHOUSE( host '' user '' password '' db '' table 's_auto_coef_weight' secure 1 )) LAYOUT(complex_key_hashed()) LIFETIME(MIN 3600 MAX 5400);
а как вызываете? ошибка же в том что словарь не может найти, скорее всего имя базы не указываете в dictGet
dictGet('dict_auto_weight', 'coeff_weight', tuple('string for regno'))
dictGet(‘databasename.dict_auto_weight’…
Все равно та же ошибка
а что тут? ошибки нет? database совпадает? select * from system.dictionaries where name = 'dict_auto_weight'
Он даже атрибуты не увидел
а вы вызываете как? dictGet(‘default.dict_auto_weight’… ?
прокажите столбец last_exception
Пустой полностью
system reload dictionary default.dict_auto_weight;
Не совсем понял
перезагрузите словарь
Poco::Exception. Code: 1000, e.code() = 0, e.displayText() = Not found: dictionary.source.clickhouse.port (version 20.1.16.120 (official build))
порт указали для подключения?
попробуйте указать
Только указывать 9000 а не http 8123
Обсуждают сегодня