11238
Обсуждаем ClickHouse
ошибка я так понял возникает во время бэкапа
Читать полностью…
интересно.
надо как-нибудь обновится)
стабильно работает, по этому не сильно нуждается в частом обновлении.
используется как правило для внутренних отчетов.
вот сейчас появилась необходимость делать запросы клиентов, привожу в порядок все
version 20.4.3.16 -- это КХ из далекого прошлого
там не было вообще user_directories
Уточните, что значит "связать"?
Если вы говорите о том, что например, значение 0xFF....FF, которое будет в Int64 означать -1, а в UInt64 будет 2^64, то вам нужно
reinterpretAsUInt64
там их один в другой какак-то можно перевести?
добавив 9223372036854775807 к Int64 например...
insert into test (id, j) values(1, '{"value": 10000000000000000001}');
insert into test (id, j) values(2, '{"value": 100000000000000000001}');
insert into test (id, j) values(3, '{"value": 1000000000000000000001}');
Читать полностью…
┌─id─┬─j────────────────────────────────┐
1. │ 3 │ {"value":1000000000000000000010} │
2. │ 1 │ {"value":10000000000000000001} │
3. │ 2 │ {"value":100000000000000000003} │
└────┴──────────────────────────────────┘
Добрый вечер.
Подскажите пожаоуйста, как связать таблицы если в одной Int64 а в другой UInt64?
CREATE TABLE test (
id UInt32,
j JSON(value UInt128)
) ENGINE = MergeTree
order by id;
insert into test (id, j) values(1, '{"value": 10000000000000000001}');
insert into test (id, j) values(2, '{"value": 100000000000000000001}'); -- error
Code: 117. DB::Exception: Cannot parse JSON object here: {"value": 100000000000000000001}: while executing 'FUNCTION if(isNull(-dummy-0) : 3, defaultValueOfTypeName('JSON(value UInt128)') :: 2, _CAST(-dummy-0, 'JSON(value UInt128)') :: 4) -> if(isNull(-dummy-0), defaultValueOfTypeName('JSON(value UInt128)'), _CAST(-dummy-0, 'JSON(value UInt... JSON(value UInt128) : 1': While executing ValuesBlockInputFormat. (INCORRECT_DATA) (version 25.8.2.29 (official build))
ну попробуйте при создании как то структуру описать...
CREATE TABLE test (
json JSON(your.path.to.column UInt128)
) ENGINE = MergeTree;
спасибо не добрался до этой части rfc с llm и без нее...
Читать полностью…
Это валидный JSON, но спецификация повзоляет имплементации накладывать ограничения на диапазон и точность валидных чисел.
https://datatracker.ietf.org/doc/html/rfc8259#page-7
This specification allows implementations to set limits on the range
and precision of numbers accepted.
Да, конечно. Сейчас отошёл, минут через 20-30 скину
Читать полностью…
Если оставить один шард с одной репликой в кластере, то локально с этой реплики distributed запрос работает. А вот со второй падает, хотя если вернуть вместо сикрета техническую учетку - проблем не будет
Читать полностью…
Я бы не рисковал без поднятия нового кластера рядом 🙂
Читать полностью…
как и вообще system-табличек, относящихся к юзерам, даже system.users ещё тогда не завезли
Читать полностью…
Всем привет
Нашел в логах такие сообщения:
DB::Exception: Table system.user_directories doesn't exist. (version 20.4.3.16 (official build)) (from 127.0.0.1:43980) (in query: SELECT name FROM system.user_directories WHERE type='replicated')
DB::Exception: Table system.user_directories doesn't exist. (version 20.4.3.16 (official build)) (from 127.0.0.1:51314) (in query: SELECT JSONExtractString(params,'path') AS access_path FROM system.user_directories WHERE type='local directory')
куда копать ? в настройки кх ?
p.s. репликации нет, юзеры хранятся в файлике.
Я нашел такую штуку в коде , rapid json.
https://github.com/ClickHouse/ClickHouse/blob/master/src/Common/JSONParsers/RapidJSONParser.h
Можно же вот так код поменять, здесь я првоеряю переполнение IsDouble
?
ALWAYS_INLINE ElementType type() const
{
switch (ptr->GetType())
{
case rapidjson::kNumberType:
if (ptr->IsDouble()) {
// проверка на переполненние 2^53
if (ptr->GetDouble() > 9007199254740992.0)
return ElementType::STRING;
return ElementType::DOUBLE;
}
return ptr->IsUint64() ? ElementType::UINT64 : ElementType::INT64;
case rapidjson::kStringType: return ElementType::STRING;
case rapidjson::kArrayType: return ElementType::ARRAY;
case rapidjson::kObjectType: return ElementType::OBJECT;
case rapidjson::kTrueType:
case rapidjson::kFalseType: return ElementType::BOOL;
case rapidjson::kNullType: return ElementType::NULL_VALUE;
}
}
Вот что будет, если из этой таблицы сделать селект
https://fiddle.clickhouse.com/aeb91a61-df49-4d25-88c9-78f7e2a137ac
Я думаю, что это ошибка преобразования Float64
думаю стоит завести еще одно issue на github
это прямо забавно
Так работает, но вставляет неправильные значения
Читать полностью…
https://fiddle.clickhouse.com/51b9a847-a845-4d21-bf05-19c6bc9ac222
SET allow_simdjson = 0;Читать полностью…
Логично, я этого бы и ждал от любого обработчика JSON.
Вам не будут при имплементации числового поля использовать динамический тип, который умеет во все числовые типы, которые только можно вообразить.
Например, в JavaScript у вас будет любое число Float64, даже если это integer. Поэтому в JavaScript целые числа только до 2^53-1. Я понимаю, что это не JS, но поставьте себя на место разработчика, и представьте, как реализовать динамический числовой тип, который поддерживает что угодно.
Если вам нужен UInt128, то делайте в виде строки, и парсите в UInt128
Спасибо, но проблема в другом. Даже если отключить simdjson
То вставка в json поле происходит корректно, но при обращении к значению, точность начинает плавать, это критично, если у меня в json приходят id.
Т.е. автопарсилка определяет тип поля как float64, а нужно Uint128
Вот кусок из preprocessed_configs/config.xml с описанием тестового кластера. Он одинаковый на обеих нодах из него:
<test_cluster>Читать полностью…
<secret>my_secret_value</secret>
<shard>
<internal_replication>True</internal_replication>
<replica>
<host>clickhouse1...</host>
<port>9000</port>
</replica>
</shard>
<shard>
<internal_replication>True</internal_replication>
<replica>
<host>clickhouse2...</host>
<port>9000</port>
</replica>
</shard>
</test_cluster>
Покажите кусок XML. Замените креды на ...
Читать полностью…
Это ямловый конфиг клика, символы корректные. Пробовал просто цифры указывать, без результата.
В preprocessed_configs точно та же строчка, что указана в remote_servers, на обеих нодах...