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

Доброго времени суток, есть фундаментальный вопрос. Как может сломаться min-max

в partitione но данные быть правильными?

в какой момент это может сломаться?

таблица имеет этот clause:
PARTITION BY (operationid, toYYYYMMDDhhmmss(operationstarttimestamp))

данные и метадата парта расходяться...

select
toString((arrayDistinct(groupArray(_partition_value)) as pval).2) as part_dt,
'countIf' as "use case",
min(operationstarttimestamp) as mindt,
max(operationstarttimestamp) as maxdt,
version() chversion
from "tbl"
where "operationid" = '1a957750-bfd4-4963-b912-3aca2ad4ead4';

ответ:
Row 1:
──────
part_dt: [20220210045800]
use case: countIf
mindt: 2022-02-10 03:58:00
maxdt: 2022-02-10 03:58:00
chversion: 21.9.7.2

если сделать insert-select - все нормально, новый парт правильный...

29 ответов

19 просмотров

из-за таймзоны ?

【D】【J】- Автор вопроса
Denny [Altinity]
из-за таймзоны ?

да, но непонятно как минмакс неверный а данные верные

【D】【J】
да, но непонятно как минмакс неверный а данные вер...

поменяли в КХ , у нас наступил на это клиент, переливал данные

【D】【J】- Автор вопроса
Denny [Altinity]
поменяли в КХ , у нас наступил на это клиент, пере...

аааааааааааааааааааааааааа, а есть тикет или куда копать и где смотреть... и главное где отличить до и после )

【D】【J】
аааааааааааааааааааааааааа, а есть тикет или куда ...

пытаюсь вспомнить, а вы таймзону в КХ не меняли?

【D】【J】- Автор вопроса
Denny [Altinity]
пытаюсь вспомнить, а вы таймзону в КХ не меняли?

не, но сервер находится в ТЗ где есть summer daylight saving

【D】【J】- Автор вопроса
Denny [Altinity]
пытаюсь вспомнить, а вы таймзону в КХ не меняли?

для полной красоты, minmax файлы - идентичны ))) newly created part [user@host tbl]# hexdump c6835b30aa53bd4523b9ca5fc1193b36_0_0_0/minmax_operationstarttimestamp.idx 0000000 7128 6204 7128 6204 0000008 old part (broken) [user@host tbl]# hexdump 74ee8d35dfc71a4fab823c1124d089f2_0_0_0_22/minmax_operationstarttimestamp.idx 0000000 7128 6204 7128 6204 0000008

【D】【J】- Автор вопроса
Denny [Altinity]
пытаюсь вспомнить, а вы таймзону в КХ не меняли?

в общем проблема скорее что при вставке с клиента через http toYYYYMMDDmmss делается как то по другому (когда клиент в другой таймзоне), и получается битый partition.dat. # incorrect value [user@host tbl]# hexdump 74ee8d35dfc71a4fab823c1124d089f2_24_24_0/partition.dat 0000000 3124 3961 3735 3537 2d30 6662 3464 342d 0000010 3639 2d33 3962 3231 332d 6361 3261 6461 0000020 6534 6461 *68*34 6fe3 63e2 0012 0000 # correct value [user@host tbl]# hexdump c6835b30aa53bd4523b9ca5fc1193b36_0_0_0/partition.dat 0000000 3024 3030 3030 3030 2d30 6662 3464 342d 0000010 3639 2d33 3962 3231 332d 6361 3261 6461 0000020 6534 6461 *58*34 6fbc 63e2 0012 0000 ну и раз partition.dat учитывается в checksum - это не лечится...

【D】【J】- Автор вопроса
Denny [Altinity]
пытаюсь вспомнить, а вы таймзону в КХ не меняли?

короче, use-client-timezone вообще плохо работает с прунингом если в partitionkey было toYYYYMMxxxxx, и на вставке, и на селект... chserver :) select dtkey, _partition_value from default.testpartitiondat t ; SELECT dtkey, _partition_value FROM default.testpartitiondat AS t Query id: 2882d80c-020c-4e64-9c16-f72074010995 ┌───────────────dtkey─┬─_partition_value─┐ │ 2022-02-10 03:58:00 │ (20220210005800) │ └─────────────────────┴──────────────────┘ ┌───────────────dtkey─┬─_partition_value─┐ │ 2022-02-10 06:58:00 │ (20220210035800) │ └─────────────────────┴──────────────────┘ ┌───────────────dtkey─┬─_partition_value─┐ │ 2022-02-10 02:58:00 │ (20220209235800) │ └─────────────────────┴──────────────────┘ ┌───────────────dtkey─┬─_partition_value─┐ │ 2022-02-10 06:58:00 │ (20220210035800) │ └─────────────────────┴──────────────────┘ ┌───────────────dtkey─┬─_partition_value─┐ │ 2022-02-10 07:58:00 │ (20220210045800) │ └─────────────────────┴──────────────────┘ 5 rows in set. Elapsed: 0.161 sec. chserver :) select dtkey, _partition_value from default.testpartitiondat where dtkey=toDateTime('2022-02-10 02:58:00'); SELECT dtkey, _partition_value FROM default.testpartitiondat WHERE dtkey = toDateTime('2022-02-10 02:58:00') Query id: 05ca0acd-70d0-4afb-927c-4ed826dec868 Ok. 0 rows in set. Elapsed: 0.104 sec.

【D】【J】- Автор вопроса
Denny [Altinity]
пытаюсь вспомнить, а вы таймзону в КХ не меняли?

в общем клиент не причем, вставки все правильные. проблема при переходах в DST и назад так как partition.dat - integer. короче все эти примеры в документации с toYYYYMMHHddmmss надо бы переписать на toStartOfxxxx()

【D】【J】- Автор вопроса
Denny [Altinity]
пытаюсь вспомнить, а вы таймзону в КХ не меняли?

я все ещё жив, и тут вообще ещё такая проблема... почему при смене ТЗ сервера меняются данные которые считываются из таблицы если она хранит данные без ТЗ (подразумевается всегда локальная дата)?

【D】【J】
я все ещё жив, и тут вообще ещё такая проблема... ...

данные хранятся в UTC, таймзона влияет на то как данные преобразуются при инсертах и селектах если у сервера или колонки задана таймзона то при инсертах datetime (строк 2022-01-01 00:00:00) они преобразуются из этой таймзоны в UTC. Т.е. у вас одни и теже значения времени из-за DST попали в разные партиции?

【D】【J】- Автор вопроса
Denny [Altinity]
данные хранятся в UTC, таймзона влияет на то как д...

Я вообще только сегодня узнал что локально хранится в UTC, а не as-is (привет из других баз где по умолчанию используют 'WITHOUT TIMEZONE'). Т.е. при смене ТЗ сервера все данные будут битыми =) и что будет происходить если есть репликация между двумя таймзонами и данные падают в обе? время будет разное? о_О у нас это и произошло... вставка прошла в одну таймзону, парт создался, partition.dat записал время цифрой (toYYYYMMHHdd) парт среплицировался и запросы в другую реплику естесственно не возвращают ничего

【D】【J】
Я вообще только сегодня узнал что локально хранитс...

команда КХ считает что при смене таймзоны данные не будут битыми, потому что внутри сервера как бы все UTC, это конечно не так из-за партиционирования и нигде не упомянуто что таймзону менять нельзя. >и что будет происходить если есть репликация между двумя таймзонами и данные падают в обе? время будет разное? о_О время не будет разное. Отображение в строку разное в разной таймзоне, время-то в UTC

【D】【J】- Автор вопроса
Denny [Altinity]
команда КХ считает что при смене таймзоны данные н...

нет, если я делаю запрос select a,b from t where dt='2021-01-01 22:00:00' в одну реплику мне вернутся данные, в другую не вернутся... потому что у серверов разные ТЗ

【D】【J】- Автор вопроса
Denny [Altinity]
команда КХ считает что при смене таймзоны данные н...

про partition pruning на базе toYYYYMMDDhhmmss/toHour вообще молчу

【D】【J】
нет, если я делаю запрос select a,b from t where ...

ну потому что каждая реплика '2021-01-01 22:00:00' переводит в UTC в зависимости от своей таймзоны

【D】【J】- Автор вопроса
Denny [Altinity]
ну потому что каждая реплика '2021-01-01 22:00:00'...

ну да... вот просто не с той базы копировали КХ (только mysql такой по умолчанию вроде хранящий utc). наверно надо добавить тип DateTime(unspecified). Но Алексей тут сказал что это уже так! https://github.com/ClickHouse/ClickHouse/issues/8941#issuecomment-657287867

【D】【J】
ну да... вот просто не с той базы копировали КХ (т...

= '2021-01-01 22:00:00' переводится из TZ сервера в UTC т.е. делаем инсерт '2021-01-01 22:00:00' -> UTC -> Таблица делаем селест where ='2021-01-01 22:00:00' -> UTC-> = время_в UTC -> для отображения конвертим в TZ сервера видим снова '2021-01-01 22:00:00'

【D】【J】
ну да... вот просто не с той базы копировали КХ (т...

может вам на всех репликах просто поставить TZ у КХ TGTTZ

【D】【J】- Автор вопроса
Denny [Altinity]
может вам на всех репликах просто поставить TZ у К...

ну да, пока так сделаем, плюс перейдем везде c toYYYYMMHH на toStartOfxxxx

【D】【J】- Автор вопроса
Denny [Altinity]
может вам на всех репликах просто поставить TZ у К...

но эт не решает вопроса привоза тест данных с продов с разных стран на тестбед

【D】【J】- Автор вопроса
Denny [Altinity]
может вам на всех репликах просто поставить TZ у К...

надо придумать как открыть FR на хранение типа DateTime(NONE) чтоб не закрыли...

【D】【J】- Автор вопроса
Denny [Altinity]
может вам на всех репликах просто поставить TZ у К...

все что на тех серверах где сменится ТЗ поломается ((( аксиома эскобара в действии...

【D】【J】
но эт не решает вопроса привоза тест данных с прод...

А почему вы не пользуетесь UTC? Или это клиенты?

Denny [Altinity]
А почему вы не пользуетесь UTC? Или это клиенты?

Denny, очень интересно Ваше мнение. У меня кластер 30 шардов по 2 реплики. Очень хочется иметь бекап всех данных + место для экспериментов в виде еще одного кластера, с другой конфигурацией (2 шарда по 2 реплики). Не выглядит ли выстрелом в коленку решение вида "навесим на все таблицы боевого кластера materialized view, которые будут писать в remote, смотрящий на новый кластер". Записи не так много - десятки гигабайт в сутки. Чтения на боевом кластере - несколько петабайт в сутки.

vlad
Denny, очень интересно Ваше мнение. У меня кластер...

в remote не надо, у вас инсерты будут падать, если новый кластер не доступен. можно сделать distributed таблицу которая смотрит на новый кластер, и из мат.вью вставлять в нее, тогда если тестовый кластер недоступен, то проблем не будет

【D】【J】- Автор вопроса
Denny [Altinity]
А почему вы не пользуетесь UTC? Или это клиенты?

данные для сенсоров по разным ТЗ разбросаны, группировать надо по локальному времени тоже обычно ну и партиционировать тоже по дням в локальном времени...

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
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
Карта сайта