@clickhouse_ru

Страница 286 из 723
Konstantin
13.10.2017
09:47:46
у меня в тестах с tableau точно такое же поведение odbc драйвера
выяснили что такой таймаут зашит в код, я уже написал запрос чтобы его вынесли в параметр подключения

Sergei
13.10.2017
10:11:04
А вот этот запрос уже не будет выполняться потоково. Функции высшего порядка размножают значения по количеству элементов массива, и в результате в оперативке получаются блоки большого размера. Попробуйте две вещи: 1. Уменьшить max_block_size. По-умолчанию значение 65536, соответсвенно, постепенно пробуйте значения 8192, 1024 и т. п. 2. Если же оперативки не хватает при GROUP BY, то можете включить агрегацию во внешней памяти.
Вот чтобы запрос легче читался продублирую: SELECT z.2 AS strike, count(*) AS count FROM ( SELECT arrayPopFront(arrayMap((a, b) -> (a.1, a.2 - t[(b - 1)].2), arrayPushFront(arrayFilter(t -> (t.2 != 0), arrayMap((a, b) -> if(a != x[(b + 1)], (a, b), (0, 0)), x, arrayEnumerate(x))), (0, toUInt32(0))) AS t, arrayEnumerate(t))) AS z FROM ( SELECT arrayMap(a -> (intHash32(a) % 2), range(150000)) AS x ) ) ARRAY JOIN z GROUP BY z.2 Группировка выполняется после выполнения набора всех функций. Т.е. на выходе из подзапроса имеем массив, причем небольшой, по которому выполняется Array Join и группировка. Поясните пожалуйста в каком мести происходит копирование блоков данных, почему они не шарятся?

Google
Nikolai
13.10.2017
10:11:42
день добрый! подскажите, пожалуйста, есть ли более подробное описание функций для работы с временем/датами? в текущей версии документации не совсем прозрачно например: https://clickhouse.yandex/docs/ru/functions/date_time_functions.html#totime toTime Переводит дату-с-временем на некоторую фиксированную дату, сохраняя при этом время. что такое "некоторая фиксированная дата"? где и как она устанавливается? toRelativeYearNum Переводит дату-с-временем или дату в номер года, начиная с некоторого фиксированного момента в прошлом. что такое "начиная с некоторого фиксированного момента в прошлом"? что это за момент? как он устанавливается? в чём отличие от просто toYear?
toRelativeYearNum сейчас работает полностью аналогично toYear (хотя могла бы работать как toYear + 1). Наверное, сделана для унификации функций toRelative* toTime сохраняет значение времени, а дату заменяет на 1970-01-02. Значение 1970-01-02 умышленно захардкожено (могу только догадываться, зачем). в целом, в документации все написано верно :)

Алексей
13.10.2017
10:14:27
ну, да, верно, только не совсем понятно, что такое "некоторая фиксированная дата" и "некоторый фиксированный момент" :О)

> Значение 1970-01-02 умышленно захардкожено а почему 2 января, а не 1 — есть какие-то мысли?

Nikolai
13.10.2017
10:18:18
я думаю, для того, чтобы toTime('что-то 00:00:00') не приводилась к 1970-01-01 00:00:00, что есть нулевое время, которое отображается как 0000-00-00 00:00:00, а также к которому проводится время, которое не распарсилось

SELECT toDateTime('1970-01-01 00:00:00') ┌─toDateTime(\'1970-01-01 00:00:00\')─┐ │ 0000-00-00 00:00:00 │ └─────────────────────────────────────┘

Алексей
13.10.2017
10:20:50
резонно спасибо!

подскажите, пожалуйста, если индекс (a, b, c), то есть ли отличие по скорости, если группировать (a,b) или (b, a)? интуитивно кажется, что разницы быть не должно, но вдруг...

Nikolai
13.10.2017
10:45:22
мне тоже кажется, что не должно. можно протестировать :)

Алексей
13.10.2017
10:47:39
да, по статистике запросов кажется весьма близким

Sergei
13.10.2017
10:53:04
Вот чтобы запрос легче читался продублирую: SELECT z.2 AS strike, count(*) AS count FROM ( SELECT arrayPopFront(arrayMap((a, b) -> (a.1, a.2 - t[(b - 1)].2), arrayPushFront(arrayFilter(t -> (t.2 != 0), arrayMap((a, b) -> if(a != x[(b + 1)], (a, b), (0, 0)), x, arrayEnumerate(x))), (0, toUInt32(0))) AS t, arrayEnumerate(t))) AS z FROM ( SELECT arrayMap(a -> (intHash32(a) % 2), range(150000)) AS x ) ) ARRAY JOIN z GROUP BY z.2 Группировка выполняется после выполнения набора всех функций. Т.е. на выходе из подзапроса имеем массив, причем небольшой, по которому выполняется Array Join и группировка. Поясните пожалуйста в каком мести происходит копирование блоков данных, почему они не шарятся?
Еще один момент. Синтетические тест создать не получилось, но когда работаешь с реальной таблицей КХ умирает. В логе следующее... 2017.10.13 06:47:58.169694 [ 34 ] <Error> BaseDaemon: ######################################## 2017.10.13 06:47:58.169743 [ 34 ] <Error> BaseDaemon: (from thread 33) Received signal Segmentation fault (11). 2017.10.13 06:47:58.169759 [ 34 ] <Error> BaseDaemon: Address: NULL pointer. 2017.10.13 06:47:58.210957 [ 34 ] <Error> BaseDaemon: 0. clickhouse-server(DB::ColumnWithTypeAndName::cloneEmpty() const+0x6d) [0x361c68d] 2017.10.13 06:47:58.210979 [ 34 ] <Error> BaseDaemon: 1. clickhouse-server(DB::Block::cloneEmpty() const+0xac) [0x2ca886c] 2017.10.13 06:47:58.210997 [ 34 ] <Error> BaseDaemon: 2. clickhouse-server(DB::ColumnTuple::cloneEmpty() const+0x32) [0x33d3ac2] 2017.10.13 06:47:58.211013 [ 34 ] <Error> BaseDaemon: 3. clickhouse-server(DB::ColumnWithTypeAndName::cloneEmpty() const+0x2d6) [0x361c8f6] 2017.10.13 06:47:58.211032 [ 34 ] <Error> BaseDaemon: 4. clickhouse-server(DB::Aggregator::initialize(DB::Block const&)+0x2e7) [0x3859ed7] 2017.10.13 06:47:58.211077 [ 34 ] <Error> BaseDaemon: 5. clickhouse-server(DB::Aggregator::executeOnBlock(DB::Block&, DB::AggregatedDataVariants&, std::vector<DB::IColumn const*, std::allocator<DB::IColumn const*> >&, std::vector<std::vector<DB::IColumn const*, std::allocator<DB::IColumn const*> >, std::allocator<std::vector<DB::IColumn const*, std::allocator<DB::IColumn const*> > > >&, std::vector<unsigned long, std::allocator<unsigned long> >&, std::vector<StringRef, std::allocator<StringRef> >&, bool&)+0x67) [0x3864267] 2017.10.13 06:47:58.211099 [ 34 ] <Error> BaseDaemon: 6. clickhouse-server(DB::Aggregator::execute(std::shared_ptr<DB::IBlockInputStream> const&, DB::AggregatedDataVariants&)+0x258) [0x3865e48] 2017.10.13 06:47:58.211115 [ 34 ] <Error> BaseDaemon: 7. clickhouse-server(DB::AggregatingBlockInputStream::readImpl()+0x651) [0x37eefe1] 2017.10.13 06:47:58.211131 [ 34 ] <Error> BaseDaemon: 8. clickhouse-server(DB::IProfilingBlockInputStream::read()+0x221) [0x2cb9c91] 2017.10.13 06:47:58.211148 [ 34 ] <Error> BaseDaemon: 9. clickhouse-server(DB::ExpressionBlockInputStream::readImpl()+0x2d) [0x36903bd] 2017.10.13 06:47:58.211163 [ 34 ] <Error> BaseDaemon: 10. clickhouse-server(DB::IProfilingBlockInputStream::read()+0x221) [0x2cb9c91] 2017.10.13 06:47:58.211179 [ 34 ] <Error> BaseDaemon: 11. clickhouse-server(DB::ExpressionBlockInputStream::readImpl()+0x2d) [0x36903bd] 2017.10.13 06:47:58.211195 [ 34 ] <Error> BaseDaemon: 12. clickhouse-server(DB::IProfilingBlockInputStream::read()+0x221) [0x2cb9c91] 2017.10.13 06:47:58.211214 [ 34 ] <Error> BaseDaemon: 13. clickhouse-server(DB::AsynchronousBlockInputStream::calculate(MemoryTracker*)+0x81) [0x14ccd01] 2017.10.13 06:47:58.211231 [ 34 ] <Error> BaseDaemon: 14. clickhouse-server(ThreadPool::worker()+0x141) [0x38dd251] 2017.10.13 06:47:58.211245 [ 34 ] <Error> BaseDaemon: 15. clickhouse-server() [0x414e0df] 2017.10.13 06:47:58.211272 [ 34 ] <Error> BaseDaemon: 16. /lib/x86_64-linux-gnu/libpthread.so.0(+0x76ba) [0x7f0eac9306ba] версия 1.1.54292

Mike
13.10.2017
10:54:20
Подскажите плиз по такому кейсу: есть старый кластер (2 шарада х2 реплики) - добавили железа и сформировали новыйх (3х2). Имеем 2 кластера. Так как решардинг не работает, создали дистрибутед таблицу на новом кластере и простым insert to x select from old_x данные переливаем (из дистрибутет в дитрибутед). но как-то уж очень медленно дело идет. больше 150-200 мегабайт в сек не поднимается скорость. при простом iинсерте из csv скорость раза в 3-4 выше. Куда посмотреть в таком случае?

Google
Nikolai
13.10.2017
11:03:30
также, могу предположить, что дело пойдет быстрее, если запустить вставки из каждой локальной таблицы (одной на шард). В таком случае, по крайней мере, не будет двойной передачи по сети

Mike
13.10.2017
11:10:52
хм, а хорошая идея. т.е. селект из старой локальной таблицы -> инсерт в новую дистрибудет?

Nikolai
13.10.2017
11:16:30
да. главное, не вставить дважды из разных реплик :)

Mike
13.10.2017
11:27:38
попробовал, получается такая же скорость как с дистрибьютед, но за счет того, что локальных две - х2 скорость. спасибо :)

Vladislav
13.10.2017
13:25:58
Никто не сталкивался у JDBC драйвера с Magic is not correct 105. Это неверная чексумма, но вроде как с подключением всё нормально

Cargeh
13.10.2017
13:28:44
хотя там код 112 был... тогда скорей всего 105 - что-то другое, сори

Vladislav
13.10.2017
13:29:17
Да, с паролем вроде 112

Alex
13.10.2017
14:26:26
Коллеги, можно ли ограничить количество ядер в конкретном запросе до 50% нагрузки 1ого ядра.

?

как ограничить до 1 ядра я знаю. Есть просто очень маленький по приоритету запрос, надо чтобы работал долго и малоресурсно.

Shamil
13.10.2017
14:29:03
включите гипертрединг)

Дед Пегас
13.10.2017
14:54:03
Если он есть ваще.

Shamil
13.10.2017
17:07:05
Нет возможности.
может быть будет достаточно занайсить тред?

Alexey
13.10.2017
17:18:58
Может быть, но найти его будет неудобно.

Oleg
13.10.2017
17:32:21
добрый день вложенный IN оч долго работает select Path from data where Date=today() and Path in ('test') group by Path; 0 rows in set. Elapsed: 0.368 sec. Processed 61.24 thousand rows, 3.57 MB (166.60 thousand rows/s., 9.72 MB/s.) а вот так select Path from data where Date=today() and Path in (select 'test') group by Path; 0 rows in set. Elapsed: 155.085 sec. Processed 44.17 billion rows, 473.71 GB (284.80 million rows/s., 3.05 GB/s.) почему так?

можно как-то заставить использовать индекс?

papa
13.10.2017
17:34:55
Это известное неудобство, давно хотим исправить. Связано оно с составлением конвейера запроса.

Павел Максимов
14.10.2017
11:38:44


Google
kamish
14.10.2017
12:36:20
привет, то есть если добавить таб перед переводом строки, то всё парсится?

Павел Максимов
14.10.2017
12:43:08


привет, то есть если добавить таб перед переводом строки, то всё парсится?
я понял в чем ошибка, местами столбцы поменялись, в загружаемых данных

Vladimir
14.10.2017
13:17:37
Ребята привет! а как в jdbc драйвере можно задать параметры запроса?

sha-bang
14.10.2017
17:04:08
/stat

Combot
14.10.2017
17:04:09
combot.org/chat/-1001080295593

sha-bang
14.10.2017
17:33:23
Всем привет! Не поможете с внешними словарями? Есть вот такой запрос и он хорошо работает select dictGetString('api_keys','descr', number) from system.numbers where number in (1365,1,933,1437,669,1114) limit 5; Но помимо “descr” я хотел еще вывести и номер ключа. Как вывести две колонки через внешний словарь? В словаре я прописал <attribute> <name>key</name> <type>String</type> <null_value /> </attribute> <attribute> <name>descr</name> <type>String</type> <null_value /> </attribute> и по отдельности либо “descr” либо “key” выводятся, а вот как их вместе вывести - ума не приложу

papa
14.10.2017
17:51:54
а что такое "вывести вместе"?

select dictGetString('api_keys','descr', number), dictGetString('api_keys','key', number) не работает?

Nikita
14.10.2017
17:55:34
/stat

Combot
14.10.2017
17:55:35
combot.org/chat/-1001080295593

sha-bang
14.10.2017
18:02:05
а что такое "вывести вместе"?
это чтобы было вот так 3 OneKey 89 LastKey 21 SimpleExKEY и так далее Сейчас он может либо одно вывести 3 89 21 либо другое OneKey LastKey SimpleExKEY

papa
14.10.2017
18:03:14
хорошо. а тот вариант, который я предложил, что выводит?

sha-bang
14.10.2017
18:04:28
хорошо. а тот вариант, который я предложил, что выводит?
Да то, что нужно!!! Премного благодарен Вам!!!

kamish
14.10.2017
18:40:26
тут, конечно, есть нюанс, потому что делается два запроса к внешнему словарю, но это мелочь

sha-bang
14.10.2017
18:48:21
а не подскажите почему получаю ошибку: Column alias mismatch in UNION ALL chain Когда два селекта объединяю. Причем по отдельности каждый селект выполняется без проблем



Александр
14.10.2017
18:58:26
Колонки в обоих запросах должны быть одного типа и названия

sha-bang
14.10.2017
18:59:56
Колонки в обоих запросах должны быть одного типа и названия
ааа… то есть все настолько строго?! Я понял, спасибо!

Александр
14.10.2017
19:00:11
Google
Alexander
14.10.2017
21:04:24
Всем доброй ночи) Такой вопрос: Есть 4 сервера: 2 шарды по 2 реплики, поднят зукипер. на каждой ноде создаем таблицу: … () ENGINE = ReplicatedMergeTree('/clickhouse/tables/ch-1-1/pulse/adv_sharded', 'ch-1-1', localEventDate, (… fields …), 8192) ; на каждой ноде меняем ch-1-1 на ch-1-2, ch-2-1, ch-2-2 в конфиге стоит параметр internal_replication=true и distributed-таблицу: CREATE TABLE adv AS adv_sharded ENGINE = Distributed(pulse, default, adv_sharded, rand()); после заливки данных count по adv возвращает 4 разных числа.

подскажите, пожалуйста, куда имеет смысл копать или какую информацию еще подсказать сюда?

Alexander
14.10.2017
21:10:18
Спасибо, это помогло. Также нашли ещё несколько проблем с конфигом - но теперь всё ок.

Дмитрий
16.10.2017
06:47:45
Slach
16.10.2017
07:06:47
Народ, я только что проверил последний clickhouse и последний zetcd вполне нормально работают https://github.com/Slach/clickhouse-zetcd issue 777 https://github.com/yandex/ClickHouse/issues/777 закрыл =) клево, рад что получилось сделать юзабельный стенд

бля

поторопился

первые вставки в таблицу проходят а потом облом

Alex
16.10.2017
08:11:55
Доброе утро, коллеги. Скажите, нормальной практикой считается масштабирование базы данных шардированием без репликаций? есть ограниченный бюджет на выделенные сервера.

kamish
16.10.2017
08:22:04
если дампы будете снимать, то, мне кажется, нет чего-то особенно страшного

Alex
16.10.2017
08:22:37
дампы снимать безусловно.

будем)

У нас сервер где 2 SSD для raid 1 есть. Заказываем еще 2 NVMe Диска (тоже raid 1) и хотим, чтобы система стояла на маленьких дисках, а кх на nvme . Такое возможно вообще?

или кх не умеет менять место расположения баз

Slach
16.10.2017
08:49:10
кликхаусу ... nmve диски в общем как мертвому припарка

он random seek не много делает =)

Alex
16.10.2017
08:49:20
почему?

Slach
16.10.2017
08:50:20
потому что clickhouse читает большими порциями с диска... обычно последовательно и фигачит аггрегационные функции и фильтрацию в ThreadPool модели... но делать старается это максимально эффективно

Google
Slach
16.10.2017
08:50:49
и пишет на диск тоже с большими буферами... последовательно

Alex
16.10.2017
08:50:51
но я так понимаю прирост скорости чтение и обработки селектов должна вырасти

Slach
16.10.2017
08:51:37
ну только если NMVe диски в целом дают большую пропускную способность за счет драйверов и шины...

Alex
16.10.2017
08:51:53
я имею ввиду по сравнению с hdd

и я не сравниваю ssd и nvme, я просто говорю, что 250 гигов что идет в сервер по умолчанию нам не хватит, есть возможно доставить два nvme диска по терабайту

поэтому я спрашиваю можно ли систему поставить на эти 250 гигов, а кх чтобы читал с nvm e дисков

Slach
16.10.2017
08:53:31
IMHO select ускорятся только если ядер будет больше в CPU и cache miss для CPU меньше, то есть будет большой L3 и RAM для JOIN будет хватать

kamish
16.10.2017
08:53:43
можно всё, что может делать линукс

монтируешь NVMe в /var/lib/clickhouse и всё...

Alex
16.10.2017
08:54:15
до установки. так?

@kamish просто и гениально)))

kamish
16.10.2017
08:54:39
ага

Alex
16.10.2017
08:54:50
чета я не задуплил) перешалось в голове)

Страница 286 из 723