
Petr
30.08.2018
06:29:03
Через count ?

Michal
30.08.2018
06:29:32
Тоже обращал внимание что что-то не так с индексацией сайта. Сейчас посмотрел что может быть причиной - похоже вызвано проблемами с sitemaps.xml.
Добавил issue: https://github.com/yandex/ClickHouse/issues/2995
Там надо проверить настройки mkdocs и поправить https://github.com/yandex/ClickHouse/blob/master/website/sitemap.xml
Через count ?
Ну если вы выполняете селект из данных за год, при этом ваши условия + LIMIT собирают необходимое количество строк в диапазоне месяца, то просто нужно заузить селект чтоб не "прочёсывал" весь год, а просто брал один месяц.

Petr
30.08.2018
06:33:06
Выборка по всем данным

Google

Petr
30.08.2018
06:34:24
Ну вообщем с ордером DB::Exception: Memory limit схватил

Michal
30.08.2018
06:36:21
Выборка по всем данным
Зачем вам все данные проверять чтоб собрать несколько строк? Добавьте какие-то ограничения.

Petr
30.08.2018
06:38:19
Да, но вот понадобилось получить все данные по маске

Michal
30.08.2018
06:41:01
Ну если вам нужны все - то почему LIMIT? :)

Petr
30.08.2018
06:46:50
Просто для теста чтобы долго не ждать
Но не попорядку, а с ORDER BY он после выполнится (
вообщем если захочу все то в несколько запрсов делать?

Denis
30.08.2018
06:49:50
так если вы limit снимете, то разница в ответах будет только в порядке строк

Petr
30.08.2018
06:52:14
хм, так то да. Спасибо
А вот если я захочу получть лимит в 1000 по запросу с LIKE, но при этом чтобы данные были не в перемешку. И ограничить через WHERE можно только по стобцу с датой ипморта. Причем данные могут быть записаны в разное время. То получается мне нужно будет итерироваться по промужткам например в месяц и сортировать его. И так вибирать до тех пор пока не доберусь до лимита?

Denis
30.08.2018
07:01:54
ордер бай просто

Petr
30.08.2018
07:03:10
На ORDER BY по всем данным сразу получаю Code: 241, e.displayText() = DB::Exception: Memory limit

Denis
30.08.2018
07:04:17
странно. с лимитом 1000? а дата у вас в первичный ключ входит же?

Google

Petr
30.08.2018
07:05:25
Да, MergeTree
Почему странно? он же сначало сортирует а потом LIMIT

Denis
30.08.2018
07:07:02
он знает границы дат из индекса. и по идее не должен слишком далеко идти. я делал запросы с лимитом на больших выборках и вроде было норм

Petr
30.08.2018
07:13:23
Только если вот либа ограничиват после выборки

Eduard
30.08.2018
07:33:12
Привет народ,
Есть два сервера ClickHouse + на одном из них ZooKeeper. На сколько данная реализация устойчива, при условии что UPDATE будет приходить только на реплику с ZooKeeper, а SELECT делаться со второй?
Спасибо

Alexey
30.08.2018
07:39:33
Это касается и ClickHouse'a и Zookeeper'a
иначе отказоустойчивость будет так себе

Petr
30.08.2018
07:58:15

Sergey
30.08.2018
07:58:36

Tima
30.08.2018
07:59:33

Wolf
30.08.2018
07:59:46

Denis
30.08.2018
07:59:54

Wolf
30.08.2018
08:01:13

Petr
30.08.2018
08:03:33
Вообщем нужно добавить дату в сортировку?

Wolf
30.08.2018
08:04:37
Ну а что тут учитывать если в запросе ее нет

Michal
30.08.2018
08:04:55

Wolf
30.08.2018
08:06:13

Michal
30.08.2018
08:06:55
Если хотите потестировать - то в тестах делаете WHERE date BETWEEN '2018-08-30' AND '2018-08-30' а для продукцийного запроса WHERE date BETWEEN '2017-08-30' AND '2018-08-30' (если за год нужно, для примера).

Google

Denis
30.08.2018
08:07:37
а есть какая-то возможность, посмотреть параметры engine существующей таблицы? в system.tables и в describe этого нет (об этом дока говорит даже)

Michal
30.08.2018
08:08:01

Denis
30.08.2018
08:11:16
так-с, проблемка.
ENGINE = MergeTree(eventtime, id, 4096)
select * from telemetry order by eventtime limit 100;
сканирует всё. хотя очевидно, что 100 самых маленьких дат лежат в первых партах

Wolf
30.08.2018
08:12:03

Danz
30.08.2018
08:16:14
Привет. Кто-то уже решал такую задачу: произвести мутацию данных в распределенной таблице?

Michal
30.08.2018
08:18:01
Т.е. в вашем случае нужно ручками добавить какое-то ограничение на eventtime чтоб он не пробовал посортировать всё подряд.

Danz
30.08.2018
08:20:58
Или по другому поставлю вопрос: как удалить данные в распределённой на 4 источника таблице? Возможно ли удалить данные (alter table delete where) или партиции (drop partition) каким-то простым способом? Или нужно удалять на каждом источнике?

Michal
30.08.2018
08:21:50
Что одно, что другое.

Danz
30.08.2018
08:22:46
Distributed

Wolf
30.08.2018
08:24:01
On cluster вроде все работает

Danz
30.08.2018
08:27:28
Что именно?

Denis
30.08.2018
08:30:54

Michal
30.08.2018
08:33:24
Насколько мне известно, для ORDER BY не используются ключи (ни первичный, ни партиционирования). Там выше давал ссылку на issue в гитхабе, там Алексей в комментариях писал что в относительно близких планах, и есть уже скелет реализации.
Первичный ключ и ключ партиционирования используются для фильтрации данных ( where ).

Denis
30.08.2018
08:37:12
order by не даёт инфы для отсечения партов, только limit+order by

Michal
30.08.2018
08:38:54
А потом все данные посортировать.

Denis
30.08.2018
08:39:25
часть же хранит мин/макс ключа партиционирования

Google

Michal
30.08.2018
08:40:13
и что из этого следует? Там 2 записи между этими мин/макс или 2 триллиона записей?
И в общем случае вы же можете и условие какое-то добавить, и тогда вообще не понятно сколько записей выберется из этой партиции. В связи с этим заранее не известно - нужно читать только одну партицию или сразу 10.

Denis
30.08.2018
08:42:19
а, ну да. схема немного другая. допустим, работаем в 8 процессоров.
8 процессоров обработали 8 партов (а может и больше)и взяли следующие. далее стрим отсортировали и если видим, что лимит набран, то горшочек не вари.
но это работает только если сортировка по ключу партиционирования

Michal
30.08.2018
08:45:42
Ну допустим что 8 процессоров обрабатывали данные. Но никто не может гарантировать что в 9 куске той же партиции не будет данных которые в результате вашего ORDER BY не должны были бы встрать "перед" тем что выбралось в начале.
Ведь первичный ключ и ключ партиционирования (чаще всего) не совпадают.

Denis
30.08.2018
08:46:42
я имею в виду целиком обработанные парты, для которых мы мин-макс знаем
по первичному не прокатит, так как вот он как раз может быть в любом парте - надо индекс вычитать и это уже другая оптимизация будет

Michal
30.08.2018
08:48:19

Denis
30.08.2018
08:50:29
я имею в виду столбец, по которому ключ. вот столбец eventdate к примеру. дефолтное партиционирование по нему будет по месяцам. соответственно мин-макс этого стобца 2018-08-01 и 2018-08-31 для последнего парта

Michal
30.08.2018
08:51:01
Но данные-то посортированы по первичному ключу. Не по ключу партиционирования.
Т.е. в январьской партиции может быть 30 кусков и все они содержат данные с 1 по 31 января.

Denis
30.08.2018
08:52:43
надо всю партицию читать. но это всё равно лучше, чем все данные вообще
я про это и говорил. наверно, в терминах запутался(

Michal
30.08.2018
08:56:06
На самом деле оптимизаций, отсутствующих в КХ, и потенциально возможных - есть вагон и маленькая тележка. Проблема в ограниченных ресурсах программистов, а не в идеях "а было бы классно сделать вот такое".

Алексей
30.08.2018
08:59:41
Всем, привет.
Подскажите пожалуйста для Alter table T optimize partition X final, важно чтобы партиция была подключена? или может и в detached быть?

Konstantin
30.08.2018
08:59:45
ребят, не могу при джойне вывести столбец из левой таблицы по которому делается джойн - сервер падает, это баг или фича?)

Michal
30.08.2018
09:02:31

Konstantin
30.08.2018
09:02:46

Michal
30.08.2018
09:06:21
А стек-трейс (есть в errorlog) и версия сервера какие? Чтоб наверняка знать что это за фичер? :)

Google

Konstantin
30.08.2018
09:08:57

Vyacheslav
30.08.2018
09:10:22
догадываюсь, что не первый с этим вопросом, но все же: как проще и эффективней вставлять бинарные данные? только как строку с экранированием? исходно еть строка хексов.

Алексей
30.08.2018
09:12:07

prll
30.08.2018
09:13:13

Vyacheslav
30.08.2018
09:13:56

Konstantin
30.08.2018
09:15:54
А минимальное воспроизведение можете сделать? create table + insert + select join ...
create table test.tab1 (a1 Int32, b1 Int32) engine = MergeTree order by a1;
create table test.tab1_copy (a1 Int32, b1 Int32) engine = MergeTree order by a1;
insert into test.tab1 values (1, 2);
insert into test.tab1_copy values (2, 3);
select tab1.a1, tab1_copy.a1, tab1.b1 from test.tab1 any left join test.tab1_copy on tab1.b1 + 3 = b1 + 2

Vyacheslav
30.08.2018
09:19:00
а вот еще, новые строки, со словарем которые, они с какого релиза доступны?

prll
30.08.2018
10:24:34

Daniel
30.08.2018
10:26:59
А что с UPDATE?

Alex
30.08.2018
10:33:08
Всем привет!
Подскажите, есть какой-то мануал по добавлению нод в кластер?
У меня есть кластер из 8 нод, я докинул ещё 4 и при чтении получаю ошибки о том, что таблиц не существует.
Мне нужно просто пустые таблички на новых серверах создать или что?
можно подробнее для нубасов как это всё работает