184 похожих чатов

Доброе утро, коллеги! Может вы что-то подскажите по следующей ситуации. Загружаем

словари в витрины в CH по следующему алгоритму:
- создали 2 таблицы с одинаковой структурой: целевая и tmp; имена разные.
- ключ партиционирования batch_id (все записи грузятся с одним batch_id, но день ото дня он разный)
- загрузили данные в tmp
- 2 операции move partition: старый батч из целевой -> в tmp, и новый из tmp -> в целевую.
- при следующей загрузке - truncate tmp. И алгоритм выше.
Грузим ежедневно 100500 словарей, все автоматизировано, алгоритм одинаковый для всех.

Но один конкретный словарь периодически остаётся пустым.

По приложению, через которое грузим (etl) ошибок нет.
Если тут же повторить загрузку конкретно для этого словаря - данные появляются.
По логам CH: 2 запроса, один insert, второй move. Ошибок нет. Insert успешно, на 824тыс.записей.

Не отрабатывает insert. Move потом успешно перемещает ничего в целевую.
Куда хоть копать?

Единственное, таблицы старые, после их создания меняли маску пути в зукипере на uuid. Пересоздала словарь - не помогло.

27 ответов

128 просмотров

движок какой у tmp и в целевой? ReplicatedMergeTree?

Maria Besedina
да

тогда может INSERT в таблицу скипаться через дедупликацию если это один блок и он имеет теже самые значения по контрольнной сумме среди 100 последних вставленных блоков

> - загрузили данные в tmp если тут INSERT и tmp Replicated тогда если это теже самые значения. INSERT скипнется.. хотя у вас batch_id меняется... может не меняется? может повторяться среди последних 100 insert?

Maria-Besedina Автор вопроса
Slach [altinity]
> - загрузили данные в tmp если тут INSERT и tmp ...

меняется, это автоинкрементное поле из постгреса смотрела это уже, блок один, и он разный день ото дня - и батч разный и кол-во записей\байт в блоке

Maria-Besedina Автор вопроса
Slach [altinity]
system.part_log смотрели по времени на NewPart ?

посмотрела, все корректно: - 5-9 строки - загрузка, которая вернула пустую таблицу - 1-4 - повтор загрузки, который вернут корректный результат - 8 строка - как раз вставка в tmp, батч 50032 ( = 3 строке из повторной загрузки)

Maria Besedina
посмотрела, все корректно: - 5-9 строки - загрузка...

а можно system.query_log query и event_time все таки посмотреть чтобы понять в каком порядке и что именно вы делаете? я правильно понимаю.. вы это запускаете только на одной реплике? или паралельно сразу на нескольких репликах? расшарьте на pastila.nl ?

Maria-Besedina Автор вопроса
Slach [altinity]
а можно system.query_log query и event_time все та...

пара глупых вопросов: нужен "дамп" с таблицы system.query_log, верно? в каком виде и с фильтрацией по интересующим таблицам? что значит "и event_time"? да, выполняем на одной машине, на вторую "реплицируется" через ZK

Maria Besedina
пара глупых вопросов: нужен "дамп" с таблицы syst...

SELECT query, event_time FROM system.query_log WHERE has(tables,'...') OR has(tables,'...') AND event_date=... AND event_time BETWEN ... почитайте про system.query_log вообще

Maria-Besedina Автор вопроса
Slach [altinity]
SELECT query, event_time FROM system.query_log WHE...

в каком формате нужно выложить на pastila.nl ? чтобы это читаемо было я уточняла про формат, что такое query_log - известно

Maria-Besedina Автор вопроса
Maria Besedina
screenshot в каком формате нужно выложить на pastila.nl ? что...

select * from system.query_log where (has(tables, 'ims.dic_meg_pos') or has(tables, 'service_part.ims_dic_meg_pos')) and event_date = '2023-10-26' and event_time between '2023-10-26 13:00:00' and '2023-10-26 13:46:00' order by event_time_microseconds desc ;

Maria Besedina
select * from system.query_log where (has(table...

ну... все верно... катинкой то результат зачем шарить? pastila.nl он для текста... попробуйте использовать clickhouse-client вместо JetBrains это надежнее и информативнее...

глядя на картинку вы паралельно партиции пытаетесь move делать? так?

Maria-Besedina Автор вопроса
Slach [altinity]
глядя на картинку вы паралельно партиции пытаетесь...

все последовательно очистили service_part залили в service_part партицию 50032 узнали, какая партиция в ims (49955) переместили ims->service_part партицию 49955 переместили service_part->ims партицию 50032

Maria-Besedina Автор вопроса
Slach [altinity]
ну логи показывают что это не так

да, согласна, последние 2 альтера в параллель

Maria Besedina
screenshot в каком формате нужно выложить на pastila.nl ? что...

будем общаться картинками, может ощуитте на себе всю боль

Maria-Besedina Автор вопроса
Maria Besedina
все последовательно очистили service_part залили ...

результат этих операций: 49955 - в service_part и null - в ims

Maria-Besedina Автор вопроса

да, поняла подскажите возможные причины такого поведения?

Maria Besedina
да, поняла подскажите возможные причины такого пов...

ну попробуйте ALTER все таки последовательно сделать ... а не паралельно... если partition by у вас это batch_id то вроде бы должно норм отработать... ну и в логах поискать что там было в /var/log/clickhouse-server/clickhouse-server.log по query_id из system.query_log

Maria-Besedina Автор вопроса
Slach [altinity]
ну попробуйте ALTER все таки последовательно сдела...

у нас уровень лога Warning нужно до debug поднять, верно?

Maria-Besedina Автор вопроса

Похожие вопросы

Обсуждают сегодня

30500 за редактор? )
Владимир
47
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
1
Он в одиночку это дело запилил или была какая-то команда?
Aquinary
12
~ 2m21s  nix shell github:nixos/nixpkgs#stack ~  stack ghc -- --version error: … while calling the 'derivationStrict' builtin at /builtin/derivation.nix:...
Rebuild your mind.
6
Всем привет, нужна как никогда, нужна помощь с IO в загрузчике. Пишу в code16 после установки сегментных регистров, пишу вывод символа. Пробовал 2 варианта: # 1 mov $0x0E, %a...
Shadow Akira
14
Карта сайта