@clickhouse_ru

Страница 641 из 723
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 + на одном из них ZooKeeper. На сколько данная реализация устойчива, при условии что UPDATE будет приходить только на реплику с ZooKeeper, а SELECT делаться со второй? Спасибо
Лучше всего для отказоустойчивого кластера на базе любой СУБД использовать три физически отдельных сервера. Либо три виртуальные машины расположенные на трех физически отдельных серверах. То есть минимум три, а не два.

Это касается и ClickHouse'a и Zookeeper'a

иначе отказоустойчивость будет так себе

Petr
30.08.2018
07:58:15
он знает границы дат из индекса. и по идее не должен слишком далеко идти. я делал запросы с лимитом на больших выборках и вроде было норм
SELECT * FROM `weather` WHERE lowerUTF8(state) LIKE lowerUTF8('M%') ORDER BY state LIMIT 0, 1000 по идеи такой запрос должен учитывать дату из индекса?

Sergey
30.08.2018
07:58:36
Привет народ, Есть два сервера ClickHouse + на одном из них ZooKeeper. На сколько данная реализация устойчива, при условии что UPDATE будет приходить только на реплику с ZooKeeper, а SELECT делаться со второй? Спасибо
Один инстанс ZK изначально плохая идея. В вашей схеме достаточно одной железке сгореть или ZK упасть (по OOM), чтобы всё решение сложилось на пол.

Tima
30.08.2018
07:59:33
SELECT * FROM `weather` WHERE lowerUTF8(state) LIKE lowerUTF8('M%') ORDER BY state LIMIT 0, 1000 по идеи такой запрос должен учитывать дату из индекса?
С чего бы? Если добавите условие на дату - будет использоватт индекс. А так - нет

Wolf
30.08.2018
08:01:13
SELECT * FROM `weather` WHERE lowerUTF8(state) LIKE lowerUTF8('M%') ORDER BY state LIMIT 0, 1000 по идеи такой запрос должен учитывать дату из индекса?
Как он будет учитывать дату если у вас в запросе ее нет и вы сортируете по Стейт, это фулскан однозначно и такие запросы запрещены

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

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

Michal
30.08.2018
08:04:55
Вообщем нужно добавить дату в сортировку?
В общем если данных у вас много то дату нужно всегда добавлять в условие WHERE

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 этого нет (об этом дока говорит даже)

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

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

Michal
30.08.2018
08:18:01
так-с, проблемка. ENGINE = MergeTree(eventtime, id, 4096) select * from telemetry order by eventtime limit 100; сканирует всё. хотя очевидно, что 100 самых маленьких дат лежат в первых партах
Насколько мне известно оптимизация ORDER BY с использованием primary key в КХ на данный момент отсутствует. ORDER BY выполняется на всех данных выбраных с помощью WHERE. https://github.com/yandex/ClickHouse/issues/1344#issuecomment-336231382

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

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

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
Насколько мне известно оптимизация ORDER BY с использованием primary key в КХ на данный момент отсутствует. ORDER BY выполняется на всех данных выбраных с помощью WHERE. https://github.com/yandex/ClickHouse/issues/1344#issuecomment-336231382
проблема последних записей решается - кто-то кидал сюда уже запрос, как выбирать только из последнего парта таблицы. а вот то, что оптимизации по ключу партиционирования нет - это очень странно

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
order by не даёт инфы для отсечения партов, только limit+order by
В общем случае limit + order by тоже не даёт. Чтобы узнать сколько данных выберется из конкретной части - нужно эти данные из этой части выбрать.

А потом все данные посортировать.

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
ребят, не могу при джойне вывести столбец из левой таблицы по которому делается джойн - сервер падает, это баг или фича?)

Konstantin
30.08.2018
09:02:46
Сервер падает? Фича, без всяких сомнений :P
прям нормально так с сегфолтом)

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

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

prll
30.08.2018
09:13:13
https://pastebin.com/ZsRFYwHA 18.10.3
А минимальное воспроизведение можете сделать? create table + insert + select join ...

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
а вот еще, новые строки, со словарем которые, они с какого релиза доступны?

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

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

можно подробнее для нубасов как это всё работает

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