
Wolf
21.03.2018
12:11:47
А у вас зфс в линуксе или фрибсд?

Vyacheslav
21.03.2018
12:11:53
фря
я не говорил что zfs надо дохера памяти. я сказал что столько данных можно просто запихать в память

Wolf
21.03.2018
12:12:47
Ну нет финансовой возможности везде все запихивать в память

Google

Vyacheslav
21.03.2018
12:13:22
ну речь не про всё. и тут не так и много. а память побьет любую fs
вот терабайты в память запихать уже гораздо сложнее

Pavel
21.03.2018
12:23:50
256 гигабайт должно хватить

Vsevolod
21.03.2018
12:36:40
(всем)

Gantzer
21.03.2018
13:18:35
Добрый день. Как в КХ лучше хранить хэши, в FixedString или в бинарном виде?

Alexander
21.03.2018
13:18:39
Добрый день всем. Стоит волноваться по поводу роста slab reclaimable? За несколько дней, пока пробуем с боевой нагрузкой, только-только начала притормаживать сегодня.

Tima
21.03.2018
13:23:59

papa
21.03.2018
13:25:15

Tima
21.03.2018
13:27:04

Kirill
21.03.2018
13:28:18
А при желании и в String можно все что угодно положить

Google

Gantzer
21.03.2018
13:33:16
Да хэши md5, спасибо положим FixedString

Aloneibreak
21.03.2018
14:06:57
добрый день
в роадмапе update и delete запланированы на 1 квартал.
прям можно ждать или это пока только мечты? )

Артемий
21.03.2018
14:08:00

Kirill
21.03.2018
14:18:16

Артемий
21.03.2018
14:25:55
У меня несолкьо JOIN и в каждом один и тот же IN (...).
Выполняется он столько раз, сколько JOIN'ов. При этом каждый подзапрос JOIN изолирован и не получается построить запрос таким образом, чтобы IN(...) выполнялся всего один раз.
Попробовал оператор WITH, но оказалось, что он тоже не виден в подзапросах.
Думал сделать через временные таблицы, которые были бы доступны во всех подзапросах, однако при создании временной таблицы не работает оператор IF NOT EXISTS, что усложняет реализацию такого варианта.

Kirill
21.03.2018
14:33:31
IF NOT EXISTS поправили, наверное в следующем релизе будет работать.

Артемий
21.03.2018
14:39:25

Pavel
21.03.2018
14:39:59
Привет, подскажите, я делаю запрос (например select quantiles(0.0,0.5,1.0)(x) from table) , получаю одну ячейку в таблице, которая содержить массив. Можно ли как-то этот массив разбомбить на несколько ячеек?

papa
21.03.2018
14:42:33
_[0], _[1]

Konstantin
21.03.2018
14:44:23
вот такое в голову приходит
:) select q[0] as q00, q[1] as q05, q[2] as q10 from (select [1, 2, 3] as q)
SELECT
q[0] AS q00,
q[1] AS q05,
q[2] AS q10
FROM
(
SELECT [1, 2, 3] AS q
)
┌─q00─┬─q05─┬─q10─┐
│ 0 │ 1 │ 2 │
└─────┴─────┴─────┘
1 rows in set. Elapsed: 0.007 sec.
только что-то результат не удался, лол

papa
21.03.2018
14:46:02
индексы 1-based

Konstantin
21.03.2018
14:47:20
неожиданно
ну собственно
SELECT
q[1] AS q00,
q[2] AS q05,
q[3] AS q10
FROM
(
SELECT [1, 2, 3] AS q
)
┌─q00─┬─q05─┬─q10─┐
│ 1 │ 2 │ 3 │
└─────┴─────┴─────┘

Alexey
21.03.2018
14:59:48
Если md5/sha1 - тогда тип строка, бинарного типа данных в КХ нет
В ClickHouse типы данных и String и FixedString позволяют хранить любые бинарные данные - аналогично VARBINARY/BLOB, BINARY.
Хэши надо хранить в FixedString, так как они имеют фиксированную длину. Записывать надо бинарные данные. (Некоторые записывают hex, но это не имеет смысла).
Для примера, MD5 - FixedString(16), SHA256 - FixedString(32).

prll
21.03.2018
15:16:11

Dmitry
21.03.2018
15:17:04
ага, посмотрим

Pavel
21.03.2018
15:19:25
В кх как-то можно просто построить гистограмму? quantiles() функция есть, а функции cdf() нет?

Alexey
21.03.2018
15:22:36
Гистограмм нет. Давно хотим.

Google

Slach
21.03.2018
15:23:12

Dmitry
21.03.2018
15:34:18
я напишу тикет пожалуй

Михаил
21.03.2018
18:17:41
Сообщество подскажите, пожалуйста, есть ли возможность сделать индекс по содержимому значению в массиве?
На текущий момент вижу решением - разворачивать массив и записывать его в другую таблицу.
Но при данном подходе база сильно разрастается.
Возможно посоветуете другой подход?

Wolf
21.03.2018
18:18:57
а почему его просто в колонки не разложить ?

Михаил
21.03.2018
18:24:06

papa
21.03.2018
18:32:06
у вас по сути один индекс, который задает порядок сортировки данных. если в массиве у вас какой-то много-ко-многим, то разумно отсортировать по нему вы не можете, я не уверен что по колонке-массиву вообще можно отсортировать в mergetree,

Михаил
21.03.2018
18:41:44
Тогда вопрос разработчикам CH, можно ли будет ожидать в новых версиях функционал по индексу значения массива?

papa
21.03.2018
18:43:43
но если у вас по элементам этого массива есть хорошая селективность и вы можете положить куда-то свзяь элементы массива -> какой-то id полезный с точки зрения основных данных, то может будет работать через подзапрос или два запроса.
а какой у вас пример запросов которые вам надо ускорить и как вы храните данные


Михаил
21.03.2018
20:35:08
Таблица древовидной структуры пользователя:
CREATE TABLE IF NOT EXISTS STRUCTURE (
ID UInt32
,TIDs Nested(
TID UInt32
,LEVEL UInt32
,LINE UInt32
)
,VALID Int8
,TIMESTAMP UInt32
,EventDate Date
) ENGINE=CollapsingMergeTree(EventDate,(ID),8192,VALID);
'ID' = Порядковый номер пользователя в структуре.
'TIDs.TID' = Каждый вышестоящий порядковый номер пользователя до самого основания дерева.
'TIDs.LEVEL' = Уровень глубины в котором находится ID по отношению к TID
'TIDs.LINE' = Указывает номер ответвления ID по отношению к TID
'VALID' = Boolian - служит для диактивации записи в случае перемещения пользователя в другую ветку
Основные запросы приходятся по полю 'TIDs.TID' (вышестоящий пользователь от которого собирается статистика):
-- Узнать количество структуры
-- Прирост структуры за интервал времени
-- Вычисление самых активных пользователей в структурах по уровню глубины и отдельному ответвлению
В данном случае при запросе с указанием 'TIDs.TID' происходит выборка по каждой строке в базе данных.
На текущий момент использую развертывание по триггеру:
CREATE MATERIALIZED VIEW IF NOT EXISTS STRUCTURE_DETAL
ENGINE=CollapsingMergeTree(EventDate,(TID,LEVEL,ID,LINE),8192,VALID) AS SELECT
TIDs.TID as TID
,TIDs.LEVEL as LEVEL
,ID
,TIDs.LINE as LINE
,VALID
,TIMESTAMP
,EventDate
FROM STRUCTURE ARRAY JOIN TIDs


papa
21.03.2018
21:11:19
кажется в этом случае индексы по массивам будут не раньше чем просто появятся какие-то secondary индексы, но ваша текущая вьюха все равно будет быстрее, т.к. в ней все уже сортировано как надо.

Yuran
21.03.2018
21:23:37
боюсь, secondary indexes даже немного противоречат идее кликхауса, потому что он умеет читать только целыми блоками, и для чтения данных, которые не отсортированы в порядке возрастания PK все равно нужно будет прочитать чуть ли не всю таблицу.

Андрей
21.03.2018
22:33:41
Кто-то пробовал для хранения/вычисления дельт (временных интервалов между двумя событиями) использовать SummingMergeTree? И насколько это по феншую?
Помню, неоднократно писали, что дельты лучше считать сразу и писать в КХ уже посчитанное, но что делать, если хочется на КХ возложить это?
Я хочу записывать две записи: сначала юникстайм с минусом, затем юникстайм с плюсом. SummingMergeTree просуммирует это потом и в итоге у меня в колонке будет дельта.


Kirill
22.03.2018
04:28:25
боюсь, secondary indexes даже немного противоречат идее кликхауса, потому что он умеет читать только целыми блоками, и для чтения данных, которые не отсортированы в порядке возрастания PK все равно нужно будет прочитать чуть ли не всю таблицу.
Там, наверное, больше сложностей не с тем что нужно прочитать всё т.к. чтоб и сейчас не всё читать есть файлы "засечек", а с тем что потеряется "локальность данных", и придется бегать по диску. По сути ПК останется кластерным индексом, а вторичные могут быть где-то рядом (как у MySQL), но да, при специфике КХ он будет читать чуть больше, но гранулярность индекса можно настраивать и сейчас, Cloudflare этим успешно пользуется (вообще этим для ускорения можно пользоваться).


Egor
22.03.2018
07:24:27
А Яндекс планирует натравить jespen test suite на кликхаус?)

Nik
22.03.2018
07:37:14
день добрый

Google

Nik
22.03.2018
07:39:49
использую ClickHouse 1.1.54343 и команда
select sumMap([],[])
ведет себя несколько не предсказуемо
У меня клиент после выполнения не может подключиться к КХ до его перезапуска. Это у меня так или у всех или надо обновиться?

prll
22.03.2018
07:41:33
Что в логе сервера ?

Nik
22.03.2018
07:42:49
<Error> BaseDaemon: ########################################
а потом
Couldn't start replication: DB::Exception, DB::Exception
на все реплики

prll
22.03.2018
07:47:29
Упало. А поподробней сам запрос и то что вокруг ### можно увидеть ?


Nik
22.03.2018
07:50:46
select sumMap([],[])
это и есть весь запрос
полный текст ошибки
—---
[ 124 ] <Error> BaseDaemon: ########################################
[ 124 ] <Error> BaseDaemon: (from thread 30) Received signal Segmentation fault (11).
[ 124 ] <Error> BaseDaemon: Address: NULL pointer.
[ 124 ] <Error> BaseDaemon: 0. clickhouse-server(DB::ExpressionAnalyzer::analyzeAggregation()+0x5e9) [0x2ef5729]
[ 124 ] <Error> BaseDaemon: 1. clickhouse-server(DB::ExpressionAnalyzer::init()+0x325) [0x2ef8275]
[ 124 ] <Error> BaseDaemon: 2. clickhouse-server(DB::ExpressionAnalyzer::ExpressionAnalyzer(std::shared_ptr<DB::IAST> const&, DB::Context const&, std::shared_ptr<DB::IStorage> const&, DB::NamesAndTypesList const&, unsigned long, bool)+0x42f) [0x2ef87bf]
[ 124 ] <Error> BaseDaemon: 3. clickhouse-server(DB::InterpreterSelectQuery::basicInit(std::shared_ptr<DB::IBlockInputStream> const&)+0xc0) [0x2b40550]
[ 124 ] <Error> BaseDaemon: 4. clickhouse-server(DB::InterpreterSelectQuery::init(std::shared_ptr<DB::IBlockInputStream> const&, std::vector<std::string, std::allocator<std::string> > const&)+0x81) [0x2b3fb91]
[ 124 ] <Error> BaseDaemon: 5. clickhouse-server(DB::InterpreterSelectQuery::InterpreterSelectQuery(std::shared_ptr<DB::IAST> const&, DB::Context const&, DB::QueryProcessingStage::Enum, unsigned long, std::shared_ptr<DB::IBlockInputStream>)+0x190) [0x2b40080]
[ 124 ] <Error> BaseDaemon: 6. clickhouse-server(DB::InterpreterFactory::get(std::shared_ptr<DB::IAST>&, DB::Context&, DB::QueryProcessingStage::Enum)+0x8a) [0x2f02e9a]
[ 124 ] <Error> BaseDaemon: 7. clickhouse-server() [0x2bd1bbd]
[ 124 ] <Error> BaseDaemon: 8. clickhouse-server(DB::executeQuery(DB::ReadBuffer&, DB::WriteBuffer&, bool, DB::Context&, std::function<void (std::string const&)>)+0x1e3) [0x2bd2763]
[ 124 ] <Error> BaseDaemon: 9. clickhouse-server(DB::HTTPHandler::processQuery(Poco::Net::HTTPServerRequest&, HTMLForm&, Poco::Net::HTTPServerResponse&, DB::HTTPHandler::Output&)+0x2b23) [0x1335783]
[ 124 ] <Error> BaseDaemon: 10. clickhouse-server(DB::HTTPHandler::handleRequest(Poco::Net::HTTPServerRequest&, Poco::Net::HTTPServerResponse&)+0x377) [0x1337b07]
[ 124 ] <Error> BaseDaemon: 11. clickhouse-server(Poco::Net::HTTPServerConnection::run()+0x2a2) [0x3526822]
[ 124 ] <Error> BaseDaemon: 12. clickhouse-server(Poco::Net::TCPServerConnection::start()+0xf) [0x352275f]
[ 124 ] <Error> BaseDaemon: 13. clickhouse-server(Poco::Net::TCPServerDispatcher::run()+0x110) [0x3522dc0]
[ 124 ] <Error> BaseDaemon: 14. clickhouse-server(Poco::PooledThread::run()+0x77) [0x339cfd7]
[ 124 ] <Error> BaseDaemon: 15. clickhouse-server(Poco::ThreadImpl::runnableEntry(void*)+0x38) [0x339a738]
[ 124 ] <Error> BaseDaemon: 16. clickhouse-server() [0x35cecbf]
[ 124 ] <Error> BaseDaemon: 17. /lib64/libpthread.so.0(+0x7e25) [0x7efe16975e25]
[ 29 ] <Error> BaseDaemon: ########################################
[ 29 ] <Error> BaseDaemon: (from thread 28) Received signal Segmentation fault (11).
[ 29 ] <Error> BaseDaemon: Address: NULL pointer.
[ 29 ] <Error> BaseDaemon: 0. clickhouse-server(DB::ExpressionAnalyzer::analyzeAggregation()+0x5e9) [0x2ef5729]
[ 29 ] <Error> BaseDaemon: 1. clickhouse-server(DB::ExpressionAnalyzer::init()+0x325) [0x2ef8275]
[ 29 ] <Error> BaseDaemon: 2. clickhouse-server(DB::ExpressionAnalyzer::ExpressionAnalyzer(std::shared_ptr<DB::IAST> const&, DB::Context const&, std::shared_ptr<DB::IStorage> const&, DB::NamesAndTypesList const&, unsigned long, bool)+0x42f) [0x2ef87bf]
[ 29 ] <Error> BaseDaemon: 3. clickhouse-server(DB::InterpreterSelectQuery::basicInit(std::shared_ptr<DB::IBlockInputStream> const&)+0xc0) [0x2b40550]
[ 29 ] <Error> BaseDaemon: 4. clickhouse-server(DB::InterpreterSelectQuery::init(std::shared_ptr<DB::IBlockInputStream> const&, std::vector<std::string, std::allocator<std::string> > const&)+0x81) [0x2b3fb91]
[ 29 ] <Error> BaseDaemon: 5. clickhouse-server(DB::InterpreterSelectQuery::InterpreterSelectQuery(std::shared_ptr<DB::IAST> const&, DB::Context const&, DB::QueryProcessingStage::Enum, unsigned long, std::shared_ptr<DB::IBlockInputStream>)+0x190) [0x2b40080]
[ 29 ] <Error> BaseDaemon: 6. clickhouse-server(DB::InterpreterFactory::get(std::shared_ptr<DB::IAST>&, DB::Context&, DB::QueryProcessingStage::Enum)+0x8a) [0x2f02e9a]
[ 29 ] <Error> BaseDaemon: 7. clickhouse-server() [0x2bd1bbd]
[ 29 ] <Error> BaseDaemon: 8. clickhouse-server(DB::executeQuery(DB::ReadBuffer&, DB::WriteBuffer&, bool, DB::Context&, std::function<void (std::string const&)>)+0x1e3) [0x2bd2763]
[ 29 ] <Error> BaseDaemon: 9. clickhouse-server(DB::HTTPHandler::processQuery(Poco::Net::HTTPServerRequest&, HTMLForm&, Poco::Net::HTTPServerResponse&, DB::HTTPHandler::Output&)+0x2b23) [0x1335783]
[ 29 ] <Error> BaseDaemon: 10. clickhouse-server(DB::HTTPHandler::handleRequest(Poco::Net::HTTPServerRequest&, Poco::Net::HTTPServerResponse&)+0x377) [0x1337b07]
[ 29 ] <Error> BaseDaemon: 11. clickhouse-server(Poco::Net::HTTPServerConnection::run()+0x2a2) [0x3526822]
[ 29 ] <Error> BaseDaemon: 12. clickhouse-server(Poco::Net::TCPServerConnection::start()+0xf) [0x352275f]
[ 29 ] <Error> BaseDaemon: 13. clickhouse-server(Poco::Net::TCPServerDispatcher::run()+0x110) [0x3522dc0]
[ 29 ] <Error> BaseDaemon: 14. clickhouse-server(Poco::PooledThread::run()+0x77) [0x339cfd7]
[ 29 ] <Error> BaseDaemon: 15. clickhouse-server(Poco::ThreadImpl::runnableEntry(void*)+0x38) [0x339a738]
[ 29 ] <Error> BaseDaemon: 16. clickhouse-server() [0x35cecbf]
[ 29 ] <Error> BaseDaemon: 17. /lib64/libpthread.so.0(+0x7e25) [0x7fbb59ba6e25]
[ 5 ] <Error> (StorageReplicatedMergeTree, RestartingThread): Couldn't start replication: DB::Exception, DB::Exception: Replica, stack trace:
0. clickhouse-server(StackTrace::StackTrace()+0x16) [0x3317996]
1. clickhouse-server(DB::Exception::Exception(std::string const&, int)+0x1f) [0x131a3df]
2. clickhouse-server(DB::ReplicatedMergeTreeRestartingThread::activateReplica()+0x17e9) [0x2d4e639]
3. clickhouse-server(DB::ReplicatedMergeTreeRestartingThread::tryStartup()+0x24) [0x2d4e7c4]
4. clickhouse-server(DB::ReplicatedMergeTreeRestartingThread::run()+0xef) [0x2d4f45f]
5. clickhouse-server() [0x35cecbf]
6. /lib64/libpthread.so.0(+0x7e25) [0x7f4b7b738e25]
—-


prll
22.03.2018
08:11:21
возможно уже исправлено в последних версиях, чуть пожже проверю

Андрей
22.03.2018
08:34:19

Kirill
22.03.2018
08:37:17

Андрей
22.03.2018
08:38:26
Хочется, чтобы ещё и по объёму/количеству записей оптимально было :)
В идеале - одна запись для каждого события.
Так-то понятно, что брать можно обычныйMergeTree и понеслась.

Kirill
22.03.2018
08:44:52

Vasilij
22.03.2018
08:57:02
Надо посчитать нарастающий итог, и я что-то не соображу, можно ли в КХ это запросом сделать?
Элементарно: таблица из Date и Amount, посчитать нарастающий итог по Amount.
Ткните носом в нужную функцию, плиз, если пропустил.

Konstantin
22.03.2018
09:02:48

Vasilij
22.03.2018
09:07:02
Это разница между соседними, а не нарастающий итог.

Kirill
22.03.2018
09:11:32

Konstantin
22.03.2018
09:11:33

Google

Vasilij
22.03.2018
09:21:32
Прекрасно, это то что надо! Работает.
Спасибо!

prll
22.03.2018
09:23:43

Александр
22.03.2018
09:25:00
Всем привет!
Не планируется ли что-то вроде range_complex_key_hashed словаря?

Kirill
22.03.2018
09:52:22
Коллеги нужна помощь. Есть бинарный дамп, его нужно развернуть в кликхаусе. Проблема в том, что структуры таблицы нет, а заказчик говорит, что можно и без него.
помогите

Ruslan
22.03.2018
09:54:18
бинарный дамп в каком формате?

Kirill
22.03.2018
09:54:35
.dump

Kirill
22.03.2018
09:54:56
.dump
А с чего хоть его дампили ?

Kirill
22.03.2018
09:55:16
тоже с кликхауса

Alexey
22.03.2018
09:55:43
а как дампили? =) есть запрос?

Kirill
22.03.2018
09:56:00
нет к сожалению

Kirill
22.03.2018
09:56:45
тоже с кликхауса
Тогда` cat dump | clickhouse client —query "INSERT INTO table FORMAT Native" `

Kirill
22.03.2018
09:57:30