data0_cluster
(
nation_id UInt16,
pu_id UInt64,
start_wend_id UInt32,
first_wend_id UInt32,
second_wend_id UInt32
)
PRIMARY KEY nation_id, pu_id
SOURCE(CLICKHOUSE(
host 'localhost'
port 9000
user 'default'
password 'ххх'
db 'cub7'
table 'v$film_weekends'
))
LAYOUT(COMPLEX_KEY_HASHED())
LIFETIME(MIN 500 MAX 700);
При этом в логе постоянно возникает ошибка на всех нодах:
<Error> ExternalDictionariesLoader: Could not update external dictionary 'EXTERNAL_DICTS.film_weekends', leaving the previous version, next update is scheduled at 2022-02-15 11:53:07: Code: 393. DB::Exception: There is no query or query context has expired. (THERE_IS_NO_QUERY)
И в system.dictionaries:
Code: 393. DB::Exception: There is no query or query context has expired. (THERE_IS_NO_QUERY) (version 21.10.6.2 (official build))
Но, если ему сказать system reload dictionary EXTERNAL_DICTS.film_weekends, то ошибки нет, словарь обновляется.
Как с этим бороться?
v$film_weekends - это вью.
привет. Удалось разобраться? Столкнулся с аналогичной проблемой
Ох, как давно это было. Сейчас уже не могу точно вспомнить как решилось... Возможно, просто обновлением КХ... Но до какой версии уже тоже не помню.
у вас source тоже clickhouse?
Да. source clickhouse, table тоже view, внутри самой view запрос с использованием mysql(). И в самом словаре, и в mysql() для подключения используются named_collections. system reload dictionary работает.
игла в яйце, яйцо в еже, йож в утке ... утка офигевает =) нужен полный стектрейс из логов чтобы порпобовать понять что происходит
Аналогичная проблема была с view в словаре. Отказались от словарей в пользу обычных таблиц
Да, проблема возникает, если во view есть обращение к mysql(). Но не сразу. Несколько раз обновляется нормально. https://pastila.nl/?00803883/89e4febe2282bfd4fec906a2a61bd009
единственное что странное вижу откуда в stacktrace у вас DB::JoinedTables::getLeftTableStorage() если у вас там Join нигде и в помине нет? а только GROUP BY
Меня это тоже смутило. Сейчас утром на свежую голову перепроверил. И group by убрал еще. Все тоже самое: https://pastila.nl/?00e2dd31/5268cd8131c81ea2341edd079569b455 Еще момент: если после создания словаря не делать system reload dictionary, то судя по system.dictionaries он сам по себе не обновляется, но и ошибок нет (ждал несколько периодов обновления), то есть как-будто не встает в расписание вообще (или так и должно быть?). Если сделать dictGet() к такому необновленному словарю, то данные возвращаются, и в system.dictionaries появляется время обновления. Сначала без ошибки, и через пару обновлений опять ошибка вылезает. Вот на двух нодах сделал dictGet() в разное время: https://pastila.nl/?10538c84/6922a0cd791cdd6b8d1b3ce4137b2bf5
нет не должно быть так...
делайте воспроизводимый пример на docker-compose и добавляйте issue на github явно какая то бага в комбинации view и engine=MySQL() попробуйте view вообще убрать? просто словарь который SOURCE(CLICKHOUSE()) а таблица Engine=MySQL()
Что не подумал об этом, спасибо. Пока несколько обновлений сработало, как с таблицей Engine=MySQL(), так и с вьюхой, которая смотрит на таблицу с Engine=MySQL()
Обсуждают сегодня