@clickhouse_ru

Страница 427 из 723
Vsevolod
20.02.2018
11:53:31
да если бы

Гаврилов
20.02.2018
11:53:51
а если скобочки добавить

Vsevolod
20.02.2018
11:53:55
CREATE TABLE default.whitelisted ( domain String) ENGINE = Set

not tlds in whitelisted всегда срабатывает, даже если эта строка есть в сете

Google
Vsevolod
20.02.2018
11:54:52
синтаксически оно работает, а семантически - фиг

Гаврилов
20.02.2018
11:54:54
a NOT IN ... - функция notIn(a, b)

notIn( tlds, whitelisted) не работает?

Vsevolod
20.02.2018
11:55:39
она работает, но возвращает всю выборку

Смотрите раздел "Операторы IN".

а где этот раздел вообще?

По вашему поиску не найдено ни одного документа. Проверьте, что все слова написаны без ошибок, и что вы выбрали достаточно категорий.

так это нашел, но оно все равно не работает

Гаврилов
20.02.2018
12:04:44
может баг просто?)

Gregory
20.02.2018
12:07:29
сейчас скорее нет чем да, хотя есть некоторые кейсы, когда бы это пригодилось.
Я просто пытаюсь перевести запрос эластика, где вложенные агрегации terms с указанием кастомного size для каждой группировки. В данном случае пока вижу решение только через select * from (select *from(...) limit X by a) limit Y by b Хотя фактически это тоже самое, если бы была возможность просто подряд указать несколько ... GROUP BY ... LIMIT X BY a LIMIT Y BY b

Artem
20.02.2018
12:08:46
Привет. Люди добрые, подскажите пожалуйста, на сервере 200ГБ оператики, но падает INSERT (Cannot allocate memory). Memory Peak при этом пишет 19GiB. Куда копать?

Google
Wolf
20.02.2018
12:09:40
в лимиты памяти в системе и кликхауесе если оперативы свободной достаточно.

Блин чувствую себя бомжом, у меня ноды кликхауса крутятся на 3-6 гигах оперативы.

Vsevolod
20.02.2018
12:10:24
в общем, при вставке из stdin не указал клиенту —multiquery

поэтому в сете было аж одно боярское значение :)

а есть способы узнать кардинальность сета?

Alexander
20.02.2018
12:15:38
Есть таблица с полем "dt DateTime DEFAULT now()" и в нее вставляются данные с использованием формата TSKV. При этом, если в запросе явно указывать список полей ("INSERT INTO table (...) FORMAT TSKV") - то выражение DEFAULT now() выполняется, а если не указывать ("INSERT INTO table FORMAT TSKV") - то вместо выражения DEFAULT now() используется значения по-умолчанию для типа DateTime ("0000-00-00 00:00:00"). https://pastebin.com/raw/AcVXDDFL Подскажите, пожалуйста, это ожидаемое поведение? Версия: 1.1.54343

Danil
20.02.2018
12:37:59
Всем привет. А кто-нибудь замечал катастрофическое падение производительности при работе с вьюхами (нематериализованными)? Есть таблица MergeTree, несколько миллиардов записей, простой запрос вида получить количество строк, min/max по одному полю работает за пару секунд, скорость обработки в районе полутора миллиардов строк в секунду. Вьюха вида create view as select field_list from table выдает 7-8 миллионов стров в секунду

Alexander
20.02.2018
12:46:01
А запрос во вьюху идет с условием?

Danil
20.02.2018
12:48:39
@alexeysetevoi Alexander в том и дело, что запрос вообще без условий. Я просто переименовал таблицы и сделал вьюхи со старыми именами, чтобы у пользователей ничего не сломалось. Тем не менее, теперь у всех connection timeout, так что непонятно, то ли откатывать все назад, то ли искать пути обхода

Alexander
20.02.2018
12:51:15
тогда даже не подскажу(

Alexey
20.02.2018
13:30:19
При чтении из представления, этот сохранённый запрос, используется в качестве подзапроса в секции FROM.

https://clickhouse.yandex/docs/ru/single/#create-view там пример расписан

то есть условия не прокинутся, запрос из вьюхи будет в подзапросе

то есть ваш запрос (select field_list from table) сначала захочет полностью выполнится и результат попробует залезть в оперативку

Artem
20.02.2018
13:41:32
Кто-нибудь сталкивался с нехваткой памяти при запросах? max_memory_usage стоит 200Гб, запускаю INSERT - падает с ошибкой: 2018.02.20 [ 94 ] HTTPHandler: Code: 173, e.displayText() = DB::Exception: Allocator: Cannot mmap 64.00 MiB., errno: 12, strerror: Cannot allocate memory, e.what() = DB::Exception, Stack trace:

при этомЖ MemoryTracker: Peak memory usage (total): 19.40 GiB

ради всего святого, помогите

Александр
20.02.2018
13:43:11
Artem
20.02.2018
13:44:43
total used free shared buff/cache available Mem: 251G 15G 62G 40G 173G 192G Swap: 4.0G 3.3M 4.0G

Google
Александр
20.02.2018
13:49:46
total used free shared buff/cache available Mem: 251G 15G 62G 40G 173G 192G Swap: 4.0G 3.3M 4.0G
Странное поведение. А такое ТОЛЬКО на инсертах?

У нас была подобная проблема с инсертом большого файла. Там порядка 2 гигов пихали с кучей nested колонок.

Alexey
20.02.2018
13:51:09
insert select?

Александр
20.02.2018
13:52:20
Вылечить так и не удалось. Пихали маленькими файлами.

Artem
20.02.2018
13:52:25
Insert из CSV

Александр
20.02.2018
13:53:31
Insert из CSV
Файл большой?

Artem
20.02.2018
13:54:11
да, у нас тоже - если разбить на несколько файлов меньшего размера - работает :<

Александр
20.02.2018
13:55:09
да, у нас тоже - если разбить на несколько файлов меньшего размера - работает :<
Есть мнение, что кх не батчит данные в размер блока, либо блок в строках стандартный, но в объеме большой

Ну т.е. если блок например 8192 строк, а мы пихаем 1ярд строк, то он одни блоком это пытается проглотить

Но это лишь мои предположения

Alexsandr
20.02.2018
13:56:00
попробуйте вот так clickhouse-client —query="insert into table name format native" < file.native я обычно так файлы большие вставляю 100-140гб файлик

Wolf
20.02.2018
13:57:13
Так у него csv, а не натив, в натив такой проблемы нет.

Alexsandr
20.02.2018
13:58:10
а null значения есть? ( там экранировать нужно такие значения )

Александр
20.02.2018
14:01:18
Артемий
20.02.2018
14:06:21
Может быть не совсем по теме, но актуально для метирки. Параметр containsSampledData (Google Analytics Core Reporting API) не позволяет отключать сэмлирование, и чтобы получить реальный total приходится делать несолкьо запросов, ожидая, когда в ответе придет containsSampledData=false. Можно ли как то в метрике отключить сэмплирвоание, когда необходимо получить total?

Artem
20.02.2018
14:19:33
Вот запрос: psql "sslmode=require host=localhost port=5432 dbname=db" —username=user —variable="FETCH_COUNT=100000" -c "COPY (SELECT * FROM db.table) TO STDOUT WITH (FORMAT csv, DELIMITER E'\t', ENCODING 'UTF8');" | docker exec -i clickhouse-client clickhouse-client —stacktrace —host clickhouse-server —query="INSERT INTO db.table FORMAT TSV"

Egor
20.02.2018
15:01:58
если таблица занимает в КХ 1500М, сколько примерно её native дамп займёт?

уже 25гиг и растёт

а, вот на 25 и остановилось

Andrey
20.02.2018
15:02:44
ого сжатие, not bad

Google
Alexsandr
20.02.2018
15:05:21
ну зайди в папку где БД сделай du --si -s и умножай примерно на 2-3

Maxim
20.02.2018
15:15:26
народ, подскажите, если в настройках сервера стоит utc timezone, а на сервере msk, при работе с фукциями времени из клиента kshvakov будет учитываться msk?

Артемий
20.02.2018
15:27:37
А для обычного API есть accuracy=full
Да, но хотелось использовать именно Google/Yandex решение. И непонятно, зачем containsSampledData, я думал он и выполняет роль того самого accuracy

Wolf
20.02.2018
15:28:59
если таблица занимает в КХ 1500М, сколько примерно её native дамп займёт?
займет как не пожатые данные, я pigz сжимаю нативные дампы они становятся даже меньше чем таблица занимает в кликхаусе, в последний раз таблица на 50 гигов из кх в натив дампе у меня была овер 500 гигов.

В нативе он просто данные раскладывает не по строкам , а по колонкам, так что натив дамп занимает места столько же как и не натив. Хотя в первый раз я думал что он отдаст пожатые данные, как бинарный формат в postgres

Zo zo
20.02.2018
15:47:02
Подскажите, пожалуйста, по движкам. У нас есть хиты и по части из них - клики. Сейчас мы уже положили все это в ReplicatedMergeTree в виде последовательного лога событий с EventType = Hit/Click, но получили ситуацию, когда по одному хиту может быть больше одного клика, что не подходит, т.к. портит статистику. Поможет ли тут CollapsingMergeTree? Я так понимаю, тогда в первичный ключ нужно добавить HitID? Предполагаю, что это сильно усложнит схлопывание данных?

Mike
20.02.2018
16:06:17
Коллеги, добрый вечер, есть вопрос по clickhouse-cpp-lib, поскольку доки особо никакой нет, по коду не совсем ясно. Есть ли какой-то способ вызвать client.Select() без коллбека? Нужна блокировка, грубо говоря. Может быть какую-то другую функцию использовать?

Константин
20.02.2018
17:17:50
Добрый день! Скажите, можно ли создать копию ReplicatedMergeTree таблицы, но с другим партиционированием и потом переключить на нее Distributed таблицу?

Alexey
20.02.2018
17:45:21
а просто not tlds in whitelisted вообще не о том
Предполагается, что именно так должно работать. Можете показать более подробный пример? Если большой, можно на почту clickhouse-feedback отправить.

а есть способы узнать кардинальность сета?
Простого способа нет, но можно так: При запуске или при аттаче таблицы, сервер пишет: "State has " « getSize() « " unique rows." Если сделать DETACH TABLE, ATTACH TABLE, то в логе будет это сообщение.

то есть ваш запрос (select field_list from table) сначала захочет полностью выполнится и результат попробует залезть в оперативку
Это не верно. Подзапросы выполняются потоково - то есть, поток данных результата подзапроса будет передаваться дальше по конвейеру выполнения запроса. Например, если вы напишете SELECT * FROM (SELECT * FROM system.numbers) - не смотря на то, что таблица system.numbers содержит бесконечное количество строк, запрос будет использовать ограниченное количество оперативки.

@alexeysetevoi Alexander в том и дело, что запрос вообще без условий. Я просто переименовал таблицы и сделал вьюхи со старыми именами, чтобы у пользователей ничего не сломалось. Тем не менее, теперь у всех connection timeout, так что непонятно, то ли откатывать все назад, то ли искать пути обхода
Например, во VIEW не прокидываются условия из WHERE и в результате не работает индекс. Но в этом случае вы бы получили такую же скорость в строчках в секунду, но при этом большее количество обработанных строк. Проверьте аналогичный вариант с подзапросом. Правда ли, что этот вариант тоже выполняется медленно?

Кто-нибудь сталкивался с нехваткой памяти при запросах? max_memory_usage стоит 200Гб, запускаю INSERT - падает с ошибкой: 2018.02.20 [ 94 ] HTTPHandler: Code: 173, e.displayText() = DB::Exception: Allocator: Cannot mmap 64.00 MiB., errno: 12, strerror: Cannot allocate memory, e.what() = DB::Exception, Stack trace:
Тут не очевидно. Напишите, какая ОС и версия ClickHouse. Далее хотелось бы получить кусок strace: sudo strace -f -p $(pidof clickhouse-server) где виден этот неудачный mmap. Мне не очевидно, почему не удаётся выделить кусок памяти 64 МБ. Также попробуйте уменьшить max_insert_block_size. По-умолчанию он 1048576. Можете попробовать clickhouse-client --max_insert_block_size=100000 ...

Ну т.е. если блок например 8192 строк, а мы пихаем 1ярд строк, то он одни блоком это пытается проглотить
При INSERT поток вставляемых данных разбивается на блоки не более max_insert_block_size строк, по-умолчанию = 1048576.

Подскажите, пожалуйста, по движкам. У нас есть хиты и по части из них - клики. Сейчас мы уже положили все это в ReplicatedMergeTree в виде последовательного лога событий с EventType = Hit/Click, но получили ситуацию, когда по одному хиту может быть больше одного клика, что не подходит, т.к. портит статистику. Поможет ли тут CollapsingMergeTree? Я так понимаю, тогда в первичный ключ нужно добавить HitID? Предполагаю, что это сильно усложнит схлопывание данных?
CollapsingMergeTree - довольно сложная вещь; им весьма сложно пользоваться корректным образом. Поэтому не рекомендую. В качестве возможного решения - сделать отдельно какую-то key-value базу, в которой писать, для какого хита уже был клик, за последние несколько дней. Перед записью в ClickHouse смотреть в эту базу.

Добрый день! Скажите, можно ли создать копию ReplicatedMergeTree таблицы, но с другим партиционированием и потом переключить на нее Distributed таблицу?
Вы можете создать новую таблицу, вставить в неё данные (при изменении ключа партиционирования, единственный способ - INSERT SELECT). Если сделать это на всех серверах, то можно будет просто указать новое имя в Distributed таблице. Для этого удалите Distributed таблицу и создайте заново. Можно иметь ввиду, что Distributed таблица сама не хранит данные, а только "смотрит" на кластер.

Google
Danil
20.02.2018
18:25:20
Например, во VIEW не прокидываются условия из WHERE и в результате не работает индекс. Но в этом случае вы бы получили такую же скорость в строчках в секунду, но при этом большее количество обработанных строк. Проверьте аналогичный вариант с подзапросом. Правда ли, что этот вариант тоже выполняется медленно?
получается, что вариант с view и с подзапросом работает совершенно одинаково: view - 1 rows in set. Elapsed: 51.246 sec. Processed 4.03 billion rows, 16.13 GB (78.71 million rows/s., 314.83 MB/s.) подзапрос - 1 rows in set. Elapsed: 51.235 sec. Processed 4.03 billion rows, 16.13 GB (78.73 million rows/s., 314.90 MB/s.) Напрямую к таблице вот - 1 rows in set. Elapsed: 0.973 sec. Processed 4.03 billion rows, 16.13 GB (4.14 billion rows/s., 16.58 GB/s.) Предикаты в запрос не включают поля из primary key, поэтому я вполне ожидаю full table scan, просто удивляет такая разница в производительности

Александр
20.02.2018
18:26:03
Alexey
20.02.2018
18:28:06
получается, что вариант с view и с подзапросом работает совершенно одинаково: view - 1 rows in set. Elapsed: 51.246 sec. Processed 4.03 billion rows, 16.13 GB (78.71 million rows/s., 314.83 MB/s.) подзапрос - 1 rows in set. Elapsed: 51.235 sec. Processed 4.03 billion rows, 16.13 GB (78.73 million rows/s., 314.90 MB/s.) Напрямую к таблице вот - 1 rows in set. Elapsed: 0.973 sec. Processed 4.03 billion rows, 16.13 GB (4.14 billion rows/s., 16.58 GB/s.) Предикаты в запрос не включают поля из primary key, поэтому я вполне ожидаю full table scan, просто удивляет такая разница в производительности
Предикаты, не входящие в PRIMARY KEY, также могут использоваться для оптимизации, которая называется "PREWHERE". Суть её в том, что сначала читается часть нужных столбцов, производится частичная фильтрация данных, и потом читаются остальные столбцы, но только там, где условие выполнено. Для проверки, сравните скорость работы оригинального запроса, в зависимости от значения настройки optimize_move_to_prewhere (0 или 1).

Igor
20.02.2018
18:32:56
Поправлю в ближайших версиях -- insert select будет без maxRows

Alexey
20.02.2018
18:34:49
Поправлю в ближайших версиях -- insert select будет без maxRows
На самом деле нам тоже надо поправить - ограничение на результат запроса не должно действовать на INSERT SELECT.

Alexey
20.02.2018
18:35:43
Не обязательно, у меня внутри в трекере есть.

Alexey
20.02.2018
19:02:11
Есть такое хранилище и примерно такую проверку "на скорую руку" уже сделали. Принципиально не помогло - скорее всего, эти дублирующиеся клики почти одновременны.
Если достаточно дедупликации в фоне, которая производится в неизвестное время и не полностью, то можете использовать ReplacingMergeTree. От увеличения количества столбцов в ключе проблемы не будет. Мержи не станут существенно сложнее.

Zo zo
20.02.2018
19:09:26
Если достаточно дедупликации в фоне, которая производится в неизвестное время и не полностью, то можете использовать ReplacingMergeTree. От увеличения количества столбцов в ключе проблемы не будет. Мержи не станут существенно сложнее.
в случае ReplacingMergeTree пока не произойдет слияния, будут копии записей с разной версией, правильно понимаю? если так и нет гарантий относительно времени слияния, то это скорее всего даст бОльшие искажения статистики, чем двойные клики

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