@clickhouse_ru

Страница 88 из 723
f1yegor
13.03.2017
17:51:36
т.е. за прокси с относительным путем /frontend/ фронтэнд запрашивает из корня. это должно работать?

Геннадий
13.03.2017
17:55:01
ЧЯДНТ? https:/site.com/styles/vendor-3f2c460027.css 404
Я поправил index.html, дописав location в путях до статики

prll
13.03.2017
18:37:34
<base href="http://guiclickhouse.smi2.ru/">

Google
Dmitry
13.03.2017
22:04:14
в кх есть where, а есть prewhere
При этом оптимизатор может решить перенести where в prewhere, но если есть понимание, что после where данных будет мало, лучше явно prewhere задать

Dmitriy
14.03.2017
05:18:58
Alter table drop partition на каждом шарде. А в чём вопрос?
Так и сделал. Выполнил запрос на удаление на каждой реплике. Для верности. Еще момент что если дата при импорте не проставляется, то надо удалять партицию 197001

Shine
14.03.2017
09:01:25
Ребят, а тут некоторые писали, что с кафкой есть опыт

может кто отозваться, есть пара вопросов

Alexey
14.03.2017
09:10:25
Используем, но пока не с CH. Но работаем над тем чтоб flink докрутить до правильной загрузки в CH.

В чем вопрос?

Aleksey
14.03.2017
09:26:26
Добрый ! подскажите как лучше организовать данные в КХ. есть товары и есть их категории, каждый товар может относится сразу к нескольким категориям. Под категориями понимаются как нормальные иерархические категории (типа мобильный телефон ) так и некоторые специфические (например, "распродажа июля" и т.п.) есть 2 идеи: 1.сделать в таблице поля goods + category[], где последнее поле это массив 2. сделать несколько записей для каждого товара т.е. goods + category, и для каждого товара делать столько строк в скольких категориях он состоит... запросу будут потом стандартные типа вывести список товаров входящих в ту или иную категорию и т.п.

Fike
14.03.2017
09:41:51
На всякий спрошу: вы не собираетесь часом использовать КХ в качестве основного хранилища?

Aleksey
14.03.2017
09:42:51
На всякий спрошу: вы не собираетесь часом использовать КХ в качестве основного хранилища?
нет... туда будет сливаться поток покупок с основного хранилища... ну и дальше хотим анализ всякий делать

Alexander
14.03.2017
09:43:02
можно ".сделать в таблице поля goods + category[], где последнее поле это массив" А если надо развернуть с строки типо "товар, категория", то для этого потом сделать Array Join

Aleksey
14.03.2017
09:47:54
будет ли это не хуже чем ручное развертывание перед записью в базу? просто мне кажется что массив будет не очень эффективно храниться...

Google
Dmitry
14.03.2017
09:49:10
Массив будет хорошо работать. Но хранить лучше только категории в которых непосредственно лежит товар

Родительские категории лучше хранить в иерархическом словаре

Aleksey
14.03.2017
09:56:54
Массив будет хорошо работать. Но хранить лучше только категории в которых непосредственно лежит товар
А как орагнизовано хранение массива? Есть ли какие-нибудь рекомендации по количеству элементов (например, если у меня будет их 500)? Будут ли хорошо работать строковые массивы?

Dmitry
14.03.2017
09:58:25
Лучше чтобы был массив интов конечно

А зачем для категорий строки?

Но в любом случае массив будет лучше, чем множить записи

Ruslan
14.03.2017
10:10:00
Здравствуйте, может кто пожалуйста подсказать как в clickhouse jdbc делать пакетное выполнение запросов (batch)?

делаю как в других выдает java.sql.SQLFeatureNotSupportedException

DataSource ds = new ClickHouseDataSource("jdbc:clickhouse://localhost:8123/default"); Connection dbConnection = ds.getConnection("default", ""); String insertTableSQL = "INSERT INTO Measure" + "(Id_Measure, value, date_metric, id_meter,user_id, resource) " + "VALUES" + "(?,?,?,?,?,?)"; PreparedStatement pstmt = dbConnection.prepareStatement(insertTableSQL); Random random = new Random(); int currentBatch = 0; int batchSize = 5000; for (Integer i = 10; i < 100000; i++) { pstmt.setObject(1, i.toString()); pstmt.setObject(2, random.nextDouble()); Integer i1 = random.nextInt(5) + 1; pstmt.setObject(3, new Date(1994,12,12)); pstmt.setObject(4, i1.toString()); Integer i2 = random.nextInt(4) + 1; pstmt.setObject(5, i2.toString()); pstmt.setObject(6, i2.toString()); currentBatch++; if (currentBatch <= batchSize) { pstmt.addBatch(); } else { pstmt.executeBatch(); currentBatch = 0; } } if (currentBatch != 0) { pstmt.executeBatch(); } dbConnection.close();

Andrey
14.03.2017
10:28:04
Можно ли привести конфигурацию таблиц, конфигурацию кластера и примеры запросов с временем выполнения? Можно в почту на clickhouse-feedback. Вдруг получится догадаться.
К сожалению не успел вчера отправить запрошенную информацию на почту. Выслал сегодня. В письме продублировал вопрос

Aleksey
14.03.2017
10:32:23
А зачем для категорий строки?
ну это я так на перспективу спросил.... т.е. массивы будут лучше чем несколько строк? странно а я думал наоброт...она же колонки быстрее должна тащить... или массивы то же как то магически хранятся (со сжатием и всем таким)?

Andrey
14.03.2017
10:43:36
DataSource ds = new ClickHouseDataSource("jdbc:clickhouse://localhost:8123/default"); Connection dbConnection = ds.getConnection("default", ""); String insertTableSQL = "INSERT INTO Measure" + "(Id_Measure, value, date_metric, id_meter,user_id, resource) " + "VALUES" + "(?,?,?,?,?,?)"; PreparedStatement pstmt = dbConnection.prepareStatement(insertTableSQL); Random random = new Random(); int currentBatch = 0; int batchSize = 5000; for (Integer i = 10; i < 100000; i++) { pstmt.setObject(1, i.toString()); pstmt.setObject(2, random.nextDouble()); Integer i1 = random.nextInt(5) + 1; pstmt.setObject(3, new Date(1994,12,12)); pstmt.setObject(4, i1.toString()); Integer i2 = random.nextInt(4) + 1; pstmt.setObject(5, i2.toString()); pstmt.setObject(6, i2.toString()); currentBatch++; if (currentBatch <= batchSize) { pstmt.addBatch(); } else { pstmt.executeBatch(); currentBatch = 0; } } if (currentBatch != 0) { pstmt.executeBatch(); } dbConnection.close();
Я бы начал проверять по порядку: 0. По умолчанию в датасорсе стоит очень маленький таймаут на соединение (вроде 50 мс). Если проблема в нём (можно понять по внимательному изучению cause исключения), то лечится так: ClickHouseProperties properties = new ClickHouseProperties(); properties.setConnectionTimeout(10 * 1000); return new ClickHouseDataSource("jdbc:clickhouse://localhost:8123/default", properties); 1. Есть ли какие-то подробности в cause бросаемого исключения? На какой строчке происходит исключение? Какой его стэк трейс? 2. Есть ли таблица Measure в базе default 3. Совпадает ли схема таблицы по типа с тем, что мы в неё заливаем. 4. Ещё подозрительно использование setObject в вашем случае, когда вам известен тип вставляемых значений.

Ruslan
14.03.2017
10:45:06
Exception в pstmt.addBatch() возникает

Все работает, если не использовать batch, т.е. По одному инсерту

Setobject это я эксперементировал, так там типы явно указать можно конечно

Сейчас попробую, то что вы посоветовали

Andrey
14.03.2017
10:47:35
Exception в pstmt.addBatch() возникает
А cause/message у него какой?

Ruslan
14.03.2017
10:48:16
java.sql.SQLFeatureNotSupportedException

Exception in thread "main" java.sql.SQLFeatureNotSupportedException at ru.yandex.clickhouse.ClickHousePreparedStatementImpl.addBatch(ClickHousePreparedStatementImpl.java:260) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at ru.yandex.clickhouse.util.LogProxy.invoke(LogProxy.java:42) at com.sun.proxy.$Proxy3.addBatch(Unknown Source) at com.mycompany.javaapplication1.Test.main(Test.java:51)

Andrey
14.03.2017
10:51:40
java.sql.SQLFeatureNotSupportedException
Попробуйте его отловить в коде, встать на дебаге, и посмотреть e.getMessage() и e.getCause(). Вообще, стоит пройтись по стек трейсу до точки, где оно непосредственно выбрасывается. Код JDBC драйвера довольно простой у ClickHouse

Google
Andrey
14.03.2017
10:52:37
Сразу станет ясно, какая валидация не прошла при выполнении addBatch

Виктор
14.03.2017
11:03:14
Да просто не реализовано

Что там ловить

Ruslan
14.03.2017
11:05:47
Не реализовано пакетное выполнение запросов в jdbc clickhouse?

Виктор
14.03.2017
11:07:12
https://github.com/yandex/clickhouse-jdbc/blob/master/src/main/java/ru/yandex/clickhouse/ClickHousePreparedStatementImpl.java#L320

Вообще, реализовано

Возможно, старая версия?

Ruslan
14.03.2017
11:13:34
Вообще не старая, но изменил версию и заработало, спасибо)

Alexander
14.03.2017
12:52:05
Всем привет, подскажите, пожалуйста, как правильно записывать данные в кликхауз: У меня есть таблица, которая хранит информацию пользователя о переходах по страницам сайта и дополнительные параметры Должен ли я предварительно записывать данные в промежуточное хранилище, или сразу записывать данные в таблицу кликхауза с типом buffer?

Pavel
14.03.2017
12:58:40
Зависит от числа событий.

Чем больше вы можете сделать батч для вставки

Тем лучше

Alexander
14.03.2017
13:06:10
Т.е. если событий много, то лучше сразу одним батчем писать в кликхауз, а при небольшом количестве событий - использовать промежуточное хранилище?

Pavel
14.03.2017
13:09:51
не, смотрите

если у вас данные итак уже где-то имеются, а не поступают равномерном поштучно, условно

то просто собирайте их по 100-1000 штук и вставляйте в CH

буфер таблица в этом случае совершено не нужна

буфер удобна, когда у вас данные поступают непредсказуемо и нет возможности их собирать в батчи предварительно.

но буфер таблица - тоже своеобразная штука, CH не особо быстр, если в него вваливать сотни тысяч/миллионы записей в секунду в эту таблциу

Alexander
14.03.2017
13:14:04
Спасибо большое, вы очень помогли! :)

Google
Vladimir
14.03.2017
13:15:25
Добрый день! А какой алгоритм сжатия использует КХ для хранения таблиц на диске (*MergeTree) и можно ли как-то настройками потюнить коэффициент сжатия? В доке не нашел ничего по этому поводу, только размер блока несжатых данных (по-умолчанию, 1MiB)

Vitaliy
14.03.2017
13:23:30
Добрый день! А какой алгоритм сжатия использует КХ для хранения таблиц на диске (*MergeTree) и можно ли как-то настройками потюнить коэффициент сжатия? В доке не нашел ничего по этому поводу, только размер блока несжатых данных (по-умолчанию, 1MiB)
По-умолчанию используется LZ4 (для достаточно больших кусков данных, маленькиt хранятся как есть). Можно выбрать другой метод сжатия (zstd). Подробнее тут https://github.com/yandex/ClickHouse/blob/master/dbms/src/Server/config.xml#L197

Vladimir
14.03.2017
13:25:22
Спасибо большое! А compression rate можно настраивать?

Pavel
14.03.2017
13:25:57
а есть сравнения эффективности?

Vladimir
14.03.2017
13:26:07
Вот да

https://fastcompression.blogspot.ru/2015/01/zstd-stronger-compression-algorithm.html Пока нашел вот, zstd рвет по скорости (компрессии)

Но в остальном сомнительно, что он круче lz4

Pavel
14.03.2017
13:29:00
я боюсь это шибко зависит от проца

рантайм диспатчинг оптимизированной версии и выбор варианта сжатия при запуске - был бы моей мечтой

если тянет zstd и не проваливается по скорости - вперед с песней :)

Vladimir
14.03.2017
13:35:22
Но у zstd, как я понял, скорость декомпрессии раза в 3 ниже, чем lz4

А это скажется на скорости запросов

Alexander
14.03.2017
14:33:00
При одинаковом compression ratio zstd лучше, чем lz4 по всем параметрам. Но обычно им все же пытаются пожать получше, и тогда выигрыш или неочевиден, или его нет. Какие настройки в ClickHouse -- это вопрос к Яндексу, но думаю, что там нет особого проигрыша

Кстати, было бы неплохо поддержать еще и brotli -- колонки со строками и всяким json должен жать значительно лучше и быстрее (правда, скорее всего только английскими)

Shine
14.03.2017
14:56:52
бротли Алексей вроде на митапе предлагал

подняло руки за него примерно 0 человек )

Vladimir
14.03.2017
14:57:46
Я что-то нигде не нашёл, где zstd обыгрывает lz4 при схожем compression ratio по скорости

Скорее, выходит наоборот

Кажется, что наоборот. Судя по этой статье, с учётом времени на передачу, zstd выгоднее при данных размером примерно до 32 MiB, а выше — уже lz4 https://fastcompression.blogspot.ru/2015/01/zstd-stronger-compression-algorithm.html

По скорости компресии и декомпресии выигрывает lz4, при том коэффициент сжатия почти не отличается (2.7-2.8)

Google
Alexander
14.03.2017
15:01:56
Статья древняя. Померяйте -- увидите. За бротли никто не поднял, видимо, потому что о нем мало знают

Vladimir
14.03.2017
15:05:24
Возможно. Кстати, сам фейсбук показывает, что lz4 по скорости раза в 3 быстрее zstd, правда там и ratio чуть хуже получается https://github.com/facebook/zstd

Правда, там же пишут, что можно играться с настройками и повышать скорость zstd за счет ratio

Alexey
14.03.2017
16:06:14
zstd у нас используется с level = 1

Vladimir
14.03.2017
17:08:56
А lz4?

Alexey
14.03.2017
17:10:00
Там нет привычных уровней. Есть lz4 и lz4hc. Плюс некоторые уровни для ускорения сжатия. Мы используем обычный lz4.

Andrey
14.03.2017
17:14:33
@milovidov_an скажи, а не расследовали причины "bad size of marks file"? Просто последнее время часто что-то в чатах начала всплывать такая ошибка у людей

Alexey
14.03.2017
17:16:31
Мы ещё не нашли причину. Есть два сообщения, но пока непонятны условия, при которых это проявляется. В одном случае подозрение на ALTER Enum в Nested. В другом - не так (обычный String столбец). Сами с таким не сталкивались.

f1yegor
14.03.2017
20:23:09
сейчас еще подумаю как нормально докер-файл написать чтобы из ENV брать эту настройку

Andrei [LaFut]
14.03.2017
21:46:03
В каком нить пхп getenv() в других языках тоже аналоги думаю есть

Иван
14.03.2017
23:35:32
Пытался воспользоваться настройками input_format_allow_errors_num и input_format_allow_errors_ratio, чтобы пропускать при вставке битые строчки. Прописал в файле users.xml в блоке default эти параметры со значениями 1 и 0.1 соответственно. При запуске сервера настройки подхватились, но при выполнении внешнего запроса на вставку из файла CH все равно ругается на неправильную строчку. Что не так делаю, подскажите пожалуйста?

Alexey
14.03.2017
23:37:52
Отправляете с помощью clickhouse-client или по HTTP? Если первое - надо указать эти настройки параметрами командной строки для клиента. PS. Вы прописали, что максимально можно пропустить одну строку с ошибкой или 0.1 долю от ранее прочитанных строк.

Andrew
15.03.2017
06:39:03

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