
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
может баг просто?)

papa
20.02.2018
12:05:39
Приветствую! Подскажите, пожалуйста, самостоятельно найти ответа не получилось.
Можно ли каким-то способом использовать 2 разных limit-by ?
например
SELECT
day,
client,
domain,
count(*) as count
FROM table
ARRAY JOIN domain
GROUP BY
toDate(date) AS day,
client,
domain
ORDER BY
day ASC,
client ASC,
count DESC
LIMIT 2 BY
day,
client
LIMIT 10 BY
dayт.е. получить в итоге по 10 записей на day, а внутри по 2 записи на day, client. т.е. по 5 уникальным client на день
сейчас скорее нет чем да, хотя есть некоторые кейсы, когда бы это пригодилось.


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
А запрос во вьюху идет с условием?

Alexey
20.02.2018
12:46:21

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
У нас была подобная проблема с инсертом большого файла. Там порядка 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

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

Vladimir
20.02.2018
15:07:33

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

Артемий
20.02.2018
15:27:37

Wolf
20.02.2018
15:28:59
В нативе он просто данные раскладывает не по строкам , а по колонкам, так что натив дамп занимает места столько же как и не натив. Хотя в первый раз я думал что он отдаст пожатые данные, как бинарный формат в 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
Приветствую! Подскажите, пожалуйста, самостоятельно найти ответа не получилось.
Можно ли каким-то способом использовать 2 разных limit-by ?
например
SELECT
day,
client,
domain,
count(*) as count
FROM table
ARRAY JOIN domain
GROUP BY
toDate(date) AS day,
client,
domain
ORDER BY
day ASC,
client ASC,
count DESC
LIMIT 2 BY
day,
client
LIMIT 10 BY
dayт.е. получить в итоге по 10 записей на day, а внутри по 2 записи на day, client. т.е. по 5 уникальным client на день
Если в подзапрос засунуть всё кроме последнего LIMIT BY, то должно эффективно работать:
SELECT * FROM (... LIMIT 2 BY day, client) LIMIT 10 BY day
а есть способы узнать кардинальность сета?
Простого способа нет, но можно так:
При запуске или при аттаче таблицы, сервер пишет:
"State has " « getSize() « " unique rows."
Если сделать DETACH TABLE, ATTACH TABLE, то в логе будет это сообщение.
Подскажите, пожалуйста, по движкам. У нас есть хиты и по части из них - клики. Сейчас мы уже положили все это в ReplicatedMergeTree в виде последовательного лога событий с EventType = Hit/Click, но получили ситуацию, когда по одному хиту может быть больше одного клика, что не подходит, т.к. портит статистику. Поможет ли тут CollapsingMergeTree? Я так понимаю, тогда в первичный ключ нужно добавить HitID? Предполагаю, что это сильно усложнит схлопывание данных?
CollapsingMergeTree - довольно сложная вещь; им весьма сложно пользоваться корректным образом. Поэтому не рекомендую.
В качестве возможного решения - сделать отдельно какую-то key-value базу, в которой писать, для какого хита уже был клик, за последние несколько дней. Перед записью в ClickHouse смотреть в эту базу.

Google

Alexey
20.02.2018
18:17:42


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

Danil
20.02.2018
18:34:13
Предикаты, не входящие в PRIMARY KEY, также могут использоваться для оптимизации, которая называется "PREWHERE". Суть её в том, что сначала читается часть нужных столбцов, производится частичная фильтрация данных, и потом читаются остальные столбцы, но только там, где условие выполнено.
Для проверки, сравните скорость работы оригинального запроса, в зависимости от значения настройки optimize_move_to_prewhere (0 или 1).
изменил настройку, проверил через system.settings, изменение применилось, но результат тот же - к таблице быстро, к подзапросу медленно

Alexey
20.02.2018
18:34:49

Igor
20.02.2018
18:35:24

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

Zo zo
20.02.2018
18:59:48

Alexey
20.02.2018
19:02:11

Zo zo
20.02.2018
19:09:26

Alexey
20.02.2018
19:10:32