- 01 March 2018 (136 messages)
-
На первый взгляд с ними всё ОК и версию через --build-arg указать можно. Что с ними не так, что пришлось править?
-
-
Доброе утро.
Появилась надобность хранить HDRHistagram структуры данных в КХ.
Складывать будем в String я так понял это типа blob.
Есть проблемка. Очень бы хотелось организовать пггрегацию на стороне КХ, а для этого КХ должен понимать что мы в blob храним.
UDF как я понял нет. Получаеться единственный спосб научить КХ работать с HDRHistagram это предоставить PR и надеяться что его вмержат?
Или может есть какой-то способ подложить dll куда-то и подцепить кастомную функцию?
Хелп! -
-
/stat@combot
-
чо вам дает эта статистика?
-
А чем вам собственно эта статистика мешает? )
-
ну каждый человек запрашивает
-
и телеграм показывает новое сообщение)
-
главный вопрос, а что она дает
-
ну по ней только меня за флуд можно забанить
-
а остальное вторично)
-
Добавить непосредственно в код ClickHouse (см. AggregateFunctions) и прислать pull request - самый перспективный вариант. На реализацию гистограмм есть несколько запросов снаружи и один внутри - то есть, мы хотим, чтобы это было в ClickHouse.
-
Понятно, спсб, пару уточнении по реализации
1. Где-то тут кидаем файлики с гистограммой https://github.com/yandex/ClickHouse/tree/master/dbms/src/AggregateFunctions
2. Работать будет поверх типа string ?
3. Не против если вот это будет использовано? https://github.com/HdrHistogram/HdrHistogram_cyandex/ClickHouseClickHouse is a free analytic DBMS for big data.
-
Создам тикет на ГХ и буду колупать босса что надо сделать это нам.
Если подтвердите пункты 1-3 (или подкорректируете), спсб @milovidov_an -
> Где-то тут кидаем файлики с гистограммой
Да.
> Работать будет поверх типа string ?
Не понял, почему. Разве там не гистограмма с int границами?
> Не против если вот это будет использовано?
Не против. Библиотеку можно положить в contrib либо с помощью git submodule либо скопировав исходники.
При желании можете также посмотреть на алгоритм работы функции quantileTDigest. Этот алгоритм также позволяет строить гистограммы с адаптивными границами корзин.
> Создам тикет на ГХ
Уже есть: https://github.com/yandex/ClickHouse/issues/9Aggregation function: HDR Histograms #9As a complement to quantile(s) aggregation function, it could be useful to have a histogram aggregation function based on https://github.com/HdrHistogram/HdrHistogram_c where you specify the min, ...
-
>Не понял, почему. Разве там не гистограмма с int границами?
Я так понимаю что смысл в том что ОНО оперирует кастомной структурой данных (как другие скетч алгоритмы) и эту структуру надо где-то хранить
Единственный способ который я вижу в КХ это String.
Может мы немного одругом говорим?
Я не про построение гостограм по какой-то колонке.
Я об возможности хранения и обработки внутренней HDRHistogram структуры в КХ непосредственно -
В ClickHouse есть тип данных AggregateFunction, он хранит любое состояние.
-
Это для промежуточных результатов, разве нет?
-
Эти промежуточные результаты также можно получать с помощью добавления -State к имени агрегатной функции, и хранить в таблице.
-
Так, давайте я подробнее опишу наш кейс чтобы не было испорченного телефона. Чувствую мы о разном говорим немного
-
Есть где-то клиент. Он не может слать числа тк их очень много.
Но он может внутри себя завести HDRHistogram объект с какими-то параметрами и скармливать в эту структуру все числа.
Раз в пару минут этот наполненныый HDRHistogram посылать на сервер.
Сервер сериализует HDRHistogram в байты и пишет в КХ как Стринг.
Через 2 дня надо вычитать все HDRHistogram из КХ и смержить.
Так вот очень хочеться мержить на стороне КХ не вычитывая на сервер, тоесть КХ должен понять что Стринг это не просто Стринг а сериализованный HDRHistogram
Может непонятно описал, спрашивайте пожалуйста -
Да, всё понятно. Как раз тип данных AggregateFunction подходит для этого. Вы можете создать таблицу со столбцом, например, state AggregateFunction(HDRHistogram, UInt64). Затем записывать туда данные INSERT-ом, передавая сериализованное состояние - набор байт, в качестве значения этого столбца. И далее мержить эти состояния с помощью агрегатной функции с комбинатором -Merge: SELECT HDRHistogramMerge(state) FROM table.
-
Отлично, пока не понимаю о чем это тк в с++ не силен и код КХ не знаю но путь понятен.
Спасибо. -
Тут подробнее о State как я понял если кому-то будет интересно
-
ClickHouse AggregateFunctions and AggregateState
There is probably an unique feature of ClickHouse — aggregate states (addition to aggregate functions). You could refer to the…
-
@milovidov_an спасибо за фикс https://github.com/yandex/ClickHouse/issues/859 !Wrong query optimisation throws out required columns from subqueries. #859
Query below works fine. SELECT * FROM ( SELECT learnerHash, passed - eventTime AS diff FROM statements GLOBAL ANY INNER JOIN ( SELECT learnerHash...
-
-
-
Как то так: https://gist.github.com/VladRassokhin/9d93866315ccabf62ae334c59d0f57df
Думаю из кода понятно что происходит (кто-то не тестировал что коммитил) -
Joined.
-
Приветствую, Сообщество. Может кто подсказать как применять в SELECT'е timeSlots? Образец запроса.
-
select arrayJoin([1,2,3]) ?
-
Всем привет. Пытаюсь создать MATERIALIZED VIEW
CREATE MATERIALIZED VIEW stat
ENGINE = AggregatingMergeTree(date, date, 8192) POPULATE
AS SELECT
...
FROM blabla
WHERE ...
GROUP BY
...
Сделал count from select на основе которого создаю view, то получается 2,5кк
А когда создается view и делаю select count() from stat то значения постоянно отличаются,
то выводит 8762 и начинает расти 100к, то опять падает.
Я что то не так делаю? Или это какое то специфическое поведение у view? -
наверное, что-то агрегируется в процессе вставки?
-
если добавить countState и сделать запрос с countMerge, числа совпадают?
-
-
populate же сам делает вставки
-
если я не ошибаюсь, select count() показывает число состояний в AggregatingMergeTree, которое может меняться в процессе фоновых мержей
-
-
в движке AggregatingMergeTree вторым параметром должны быть все поля по которым делается group by?
Вот пример в доки
CREATE MATERIALIZED VIEW test.basic
ENGINE = AggregatingMergeTree(StartDate, (CounterID, StartDate), 8192)
AS SELECT
CounterID,
StartDate,
sumState(Sign) AS Visits,
uniqState(UserID) AS Users
FROM test.visits
GROUP BY CounterID, StartDate; -
да
-
-
-
Господа, есть такой вопрос, не получается понять
Создано MATERIALIZED VIEW с движком ReplicatedAggregatingMergeTree
Внутри есть два поля, по которым делается GROUP BY и пара полей с sum
Делаю подряд два запроса, вида select net_id, tag_date, sumMerge(amount) from view_table_name where tag_date between '2018-03-01' and '2018-03-01' group by net_id, tag_date
И в первый раз получаю три строки (так как есть три net_id, это корректно) в выборке, но второй раз могу получить одну строку. Или опять три (систему не понял) -
-
-
Коллеги, заметил, что groupArray функция выкидывает null'ы:
-
select groupArray(c) from (select cast(null as Nullable(UInt64)) as c)
-
возвращает пустой массив типа UInt64 вместо массива Nullable(Uint64) с одним null'ом. Это баг или фича?
-
это баг
-
спасибо. завёл на гитхабе: https://github.com/yandex/ClickHouse/issues/1980groupArray and Nullable #1980
Hello! I have noticed, that groupArray function ignores null in nullable columns, and changes type from nullable to not nullable: select groupArray(c) from (select cast(null as Nullable(UInt64)) a...
-
скажешь, получилось ли)
-
Да, дело было ровно в этом. Добавил колонку в таблицу, но забыл добавить в параметры движка)
-
-
Привет. Кто нибудь делал пример из get started c 60gb данных в докере? При импорте просто контейнер падает без каких либо ошибок
-
-
подключил в докере volume где лежат данные, но ума не приложу как их импортнуть
-
ага
-
ну вообще в клиенте сокет таймаут
-
а на сервере ничего
-
-
да
-
-
да
-
докер на макоси стоит
-
Joined.
-
Привет. Кто-то из команды может глянуть https://github.com/yandex/clickhouse-jdbc/pull/176? Если можно, то и хотфикс-релиз хотелось бы асап.Fix #175 by tkroman · Pull Request #176 · yandex/clickhouse-jdbc
Quick and dirty - just making sure we don't ask anything on closed streams. Added ttest w/o this fix fails on the first rs.next() call after we reach end of RS.
-
коллеги, есть вопрос
приложение общается с КХ по http и отправляет туда insert'ы
судя по всему КХ закрывает http подключение до того как закончит insert
есть ли возможность заставить ее подежать коннект? или как-то иначе выяснить что insert завершен? -
там же все равно очередь, проверить наверно можно селектом
-
-
-
-
если для инсерта - сам statement как урл запроса а values как post body
-
-
-
добавьте GET ?readonly=true
-
-
-
КХ достаточно умный и двух запросов в одном http коннекте не пропускает
-
-
UNION сработает только в случае, если в обоих результатах одинаковое количество колонок и они одного типа и названия
-
-
-
-
-
-
Поэтому тут при всем желании что-то "сломать" не получится. В крайнем случае можно только эксепшен словить и это просто сломает работу приложения - не больше.
-
Главное вот такое:
1 String String(size = 0)
while expecting:
1 UInt8 UInt8(size = 0)
instead.
Не отдать пользователю :)) -
-
-
-
должно заработать (если тот же конфиг и зукипер, а также нет другого работающего процесса в той же директории)
-
Нет, ClickHouse на данный момент не поддерживает подготовленные запросы
-
-
Можно и слабенький, реплика просто получает данные
-
Мы используем CollapsingMergeTree и меня смущает одна операция. Периодически нужно "обновлять данные". Делается это так: создается временная таблица, в которую из основной селектятся данные для апдейта. "Заменяются" значения в колонках и делаются инсерт (-1) и инсерт (1) в основную. Как эта операция будет воспринята репликой? Придут уже обработанные (схлопнутые) данные или эти два мегаинсерта тоже прилетят?
-
селекты не прилетают
-
-
-
Если резервный то берите такой же, т.к. если ваш "мастер" выйдет из строя то все запросы уйдут на резервный. Хотя понятие "резервный" в КХ достаточно условное, это будут равноправные сервера и читать/пасать вы можете в любой
-
Если брать впс можно мелкую смысла нет держать большую, потом можно руками увеличить, если простой не сильно страшен
-
Прилетят, как только информация о блоках с данными попадет в Zookeeper реплика их скачает
-
Сервер будет делать точно такие же мерджи как и основной, для этого нужны ресурсы
-
Ну на бекапе можно просто и подождать, ничего страшного в этом нет
-
Там очередь назначенных мержей, если будет долго мержить вполне можно словить ошибку про то что мержи идут медленнее чем инсерты
-
Мне кажется надо просто проверить, сильно зависит от инсертов и нагрузки
-
Правильно ли я понимаю - мержи столько же процессорного времени занимают?
-
Да, все сервера делают одно и тоже, синхронизируется все это дело через Zookeeper, там ставится задача: "мержим такие-то куски"
-
-
-
-
а много прямо данных и тяжелые мержи
? -
-
у меня просто кх крутится везде на 4 ядрах
-
в целом на 10-20 млн записей в день не наблюдаю проблем с производительностью
-
-
-
Тогда просто бекап и возможность быстро взять новый сервер в аренду
-
Ребята, что я делаю не так?
Пытаюсь создать таблицу типа ReplicatedMergeTree, шаблон пути ZK /clickhouse/tables/shard-{shard}/testtable
Получаю такую ошибку:
Received exception from server (version 1.1.54343):
Code: 62. DB::Exception: Received from localhost:9000, ::1. DB::Exception: No macro shard in config.
Хотя секция macros в config.xml имеется:
<macros>
<cluster>odissey</cluster>
<replica>centos7_129</replica>
<shard>01</shard>
</macros> -
-
А если не tables-{shard} а просто {shard}
-
-
куда вложен <macros> в конфиге? и в каком конфиге?
-
-
вроде все правильно
-
а другие макросы находит?
-
-
Версия Clickhouse последняя из https://github.com/Altinity/clickhouse-rpm-install
1.1.54343GitHub - Altinity/clickhouse-rpm-install: How to install clickhouse RPM packagesHow to install clickhouse RPM packages. Contribute to Altinity/clickhouse-rpm-install development by creating an account on GitHub.
-
макросы не подгрузились, насколько помню если они в отдельном файле то их кх автоматом не подхватывает, и надо его рестартить хотя может уже поправили
-
попытка в отдельном файле их разместить оказалась невыполнимой эпопеей на 2 часа, в итоге решил в config.xml закинуть, и там та же ерунда. есть подозрение, что что-то с версией из rpm, сейчас на debian 8 то же пробовать буду
как пофикшу - напишу тут -
Joined.
-
По проблеме DB::Exception: No macro ... in config
- помог метод "снести всё и поставить заново". Файл конфига config.xml с которым изначально не работало, но в котором я был уверен, забэкапил и потом им заменил после установки пакетов.
Взлетело и на Centos7, и на Debian 8.
есть подозрение, что что-то было с правами.
Вот так сработало, сам процесс запущен под юзером clickhouse.
CentOS7:
[root@test10 clickhouse-server]# ls -l
total 48
-rw-r-----. 1 clickhouse clickhouse 14438 Mar 1 23:53 config-preprocessed.xml
-rw-r--r--. 1 root root 14229 Mar 1 23:53 config.xml
-rw-r-----. 1 clickhouse clickhouse 4852 Mar 1 23:53 users-preprocessed.xml
-rw-r--r--. 1 root root 4664 Feb 9 23:02 users.xml
Debain8:
root@test12:/etc/clickhouse-server# ls -l
total 48
-rw-r--r-- 1 clickhouse clickhouse 14438 Mar 1 23:42 config-preprocessed.xml
-rw-r--r-- 1 clickhouse clickhouse 14229 Mar 1 23:39 config.xml
-rw-r--r-- 1 clickhouse clickhouse 4852 Mar 1 23:42 users-preprocessed.xml
-rw-r--r-- 1 clickhouse clickhouse 4664 Jan 25 00:12 users.xml -
-
ну без зукипера он бы тоже не дал создать репликейтед таблицу
-
- 02 March 2018 (155 messages)
-
Это вредный совет. Если не экранировать значения при подстановке в запрос, то злоумышленник может легко получить на чтение чужые данные (' OR '' = ') или даже записать значение в какой-нибудь memcached, который расположен в вашей сети: (' OR 1 IN (SELECT 1 FROM remote('host'...) OR ')
-
-
-
Joined.
-
Я не подразумевал дачу вредных советов :) Я просто хотел указать на то, что в случае с КХ сделать инъекцию с union гораздо сложнее чем в других БД. А вообще, спасибо за пример!
-
Доброе утро! В CH нелья переименовывать столбцы?
-
Нельзя.
-
Joined.
-
Доброе утро - я обновил clickhouse-server на ubuntu - и он теперь не стартует - ругается - Engine TinyLog doesn't support any arguments (3 given), stack trace: на /home/clickhouse/data/metadata/default//image_stat_buf.sql
содержимое у него такое
ATTACH TABLE image_stat_buf
(
date Date DEFAULT toDate(event_date),
event_date DateTime DEFAULT now(),
id UInt32,
hash1 UInt64,
hash2 UInt64,
url String,
image_url String,
image_hash FixedString(32),
score Float64
) ENGINE = TinyLog(date, (hash1, hash2), 8192) -
что то поменялось в оприсании параметров этого энджина ?
-
Там же написано, вообще не надо параметров
-
Коллеги, а то, что при сравнение с null в tuple null считается любым значением, это баг или фича:
-
select (1,null)=(1,1)
-
возвращает 1
-
я руками поправил - однако странно что при смене версии начало ругаться - вот и спросил
-
-
у меня, вроде как, перчитываются, когда я отдельные xml под каждого юзера туда кидаю
-
а, не, юзеров я в users.d кидаю
-
Перечитываются, но не все настройки подхватываются налету. Подхватываются: пользователи, словари, список серверов для distributed
-
-
-
-
-
вчера еще замержили автообновление всех настроек логгирования
-
а кто может посоветовать выход? у меня есть довольно сложный вопрос, подсчет ретеншена юзеров; в пг я использовал CTE, чтобы сделать несколько предварительных выборок и посчитать данные уже на их основе, ну то есть
WITH
regs as (SELECT ...),
other as (SELECT * FROM regs where ...)
SELECT ... FROM other ...
в CH я поддержки CTE не нашел, поэтому переписал на временные таблицы, типа
CREATE TEMPORARY TABLE temp_regs (
day Date,
user_id UInt32
);
INSERT INTO temp_regs ...;
SELECT ... FROM ...;
в нативном клиенте это работает, но по хттп запрещены мульти-стейтменты (Syntax error (Multi-statements are not allowed): failed at position 88 (end of query) (line 4, col 6): ;)
без временных таблиц придется дублировать подзапросы и вообще все станет очень нечитаемым. Может есть какой-нибудь в обход? -
-
-
Joined.
-
Это здорово👍
-
В HTTP есть сессии, там можно работать с временными таблицами, сначала создаете таблицы отдельными запросами, потом делаете результирующий
-
-
-
-
-
Там нужно будет к GET-запросу добавить параметр session_id
-
а программно несколько запросов нельзя отправлять?
-
по очереди
-
-
-
упустил =\
-
Можно ли установить clickhouse на ubuntu под windows 10 поиграться?
-
я ставил, но были проблемы с временной зоной
-
-
-
root@guest:~# clickhouse-client
ClickHouse client version 1.1.54198.
Connecting to localhost:9000.
Code: 210. DB::NetException: Connection refused: (localhost:9000, 127.0.0.1)
Вот такая ошибка возникает. По загубленным данным менял listen host с ::1 на ::, но все равно не запускается -
может проще докер поставить?
-
чем разбиратся с этим
-
А сервер-то запустился?
-
Да
-
-
SELECT
formatReadableSize(sum(bytes))
FROM system.parts
WHERE database = 'ВАША БД'
AND table = 'ВАША ТАБЛИЦА'
или через du посмотреть в /var/lib/clickhouse/data -
Вот тут то как раз почему то их нет
-
-
Как буду рядом с компом попробую
-
-
-
-
да, это нормально
-
-
в system.parts тоже имена с inner
-
CREATE MATERIALIZE VIEW создает обычную таблицу в которой будет хранить данные, просто к названию view добавляет .inner.
-
-
-
-
-
Не совсем для удобства, просто когда вы делаете тот же SELECT * FROM materialize.view таблицу искать где-то надо
-
-
При репликации странная ошибка: [ 22 ] <Error> DB::StorageReplicatedMergeTree::queueTask()::<lambda(DB::StorageReplicatedMergeTree::LogEntryPtr&)>: Code: 33, e.displayText() = DB::Exception: Cannot read all data, e.what() = DB::Exception, Stack trace:
-
что это может быть?
-
стектрейс: https://paste.yandex-team.ru/407403
-
-
а реплики одинаковой версии?
-
-
сейчас посмотрю
-
все один к одному
-
как будто данные виноваты
-
да. очень похоже, будто кусок не до конца вычитывается
-
на обоих серверах такие ошибки
-
попробую рестартануть, есть идея, что сломались из-за обновления железа на одной из машин
-
да, рестарт помог, походу одна реплика запомнила неправильный ip другой
-
отлично!
-
доброгов времени суток, есть таблица, над ней есть materialized view (с именем metric) - задача почистить данные с таблицы старше N месяцев. С самой таблицей все понятно- делаем drop на партицию, а вот с представлением проблемы - активные партиции показывает только при использовнаии в запросе имении .inner.metric и alter drop partition с не проходит не с самого представленя - metric ни с .inner.metric. Как то можэно чистить данные с материализованного представления? (без drop table)
-
-
-
-
Таблицу в двойные кавычки возьмите
-
-
что-то у меня не особо получилось
-
-
-
-
-
-
-
-
-
-
yandex/ClickHouse
ClickHouse is a free analytic DBMS for big data.
-
-
как-то можно ограничить размер куска, чтобы не мержило большие куски? в доке не нашёл такой настройки
-
есть настройка max_bytes_to_merge_at_max_space_in_pool
-
она там выставлена в 150гб, а у меня создало кусок в 220гб
-
странно. а руками при создании таблицы это значение не менялось?
-
в show create table эти настройки показываются, если они изменялись при создании
-
все работало правильно, я просто немного мудак и не разобрался в интерфейсе либы
-
-
Кому-нибудь знакома такая проблема, когда при INSERT-e данных на шарды через Distributed таблицу даже минимальные файлы csv по 500м кушают по 30 гигов RAM и сообщают об ошибке?
2018.03.02 17:05:21.955651 [ 17 ] <Error> executeQuery: Code: 241, e.displayText() = DB::Exception: Memory limit (for query) exceeded: would use 27.94 GiB (attempt to allocate chunk of 8388608 bytes), maximum: 27.94 GiB, e.what() = DB::Exception (from 192.168.10.132:56482)
Возможно, проблема в том, что я использую колонку вычисляемую?
CREATE TABLE IF NOT EXISTS distributedbd.ppitest_sharded (
...
REC_DATE Date DEFAULT toDate(FLOW_END)
) ENGINE = ReplicatedMergeTree('/clickhouse/{cluster}/tables/shard-{shard}/ppitest_sharded', '{replica}', REC_DATE, (...), 8192); -
при вставке в обычный MergeTree сколько памяти уходит?
-
и сколько реплик в Distributed таблице? возможно, блок размножается на каждую.
-
>при вставке в обычный MergeTree сколько памяти уходит?
Я не замерял, но датасет с теми же данными на 10Г залетел в standalone MergeTree с такой же схемой без проблем при RAM 8G на сервере. Уже после того, как столкнулся с данной ошибкой, накинул на ноды 32Г, всё равно та же проблема, сколько лимит не повышай. Уменьшил вот split-ом файл до 500М для тестов.
>и сколько реплик в Distributed таблице? возможно, блок размножается на каждую.
3 шарда, каждый шард имеет по одной реплике. -
есть возможность прислать данные и схему таблиц?
-
-
да, конечно
-
Joined.
-
Joined.
-
Joined.
-
-
а сделайте issue ? есть какой то код для reproduce?
-
На выходных посмотрю
-
-
В профайлере так
flat flat% sum% cum cum%
48.02MB 35.29% 35.29% 48.02MB 35.29% bufio.NewReaderSize (inline)
29.86MB 21.95% 57.24% 29.86MB 21.95% github.com/kshvakov/clickhouse/lib/writebuffer.(*WriteBuffer).addChunk -
Сделайте пример для воспроизведения, просто не очень понятно про невалидные значения, как они вообще до КХ доезжают?
-
-
-
подскажите а есть ли способ при выборке count() с группировкой по дате получить 0 для пустых дней, вместо пропущенных строк в результате?
-
вместо
20180102 1
20180104 1
получить
20180102 1
20180103 0
20180104 1 -
Есть вариант, но он крайне навороченный...нужно взять минимальную дату, максимальную, найти между ними разницу в днях, сделать массив длинной в полученную разницу, разложить на строки таким образом, что бы получилось в каждой строке: минимальная дата + индекс массива (по сути кол-во дней), затем это все приджоинить к запросу который группирует по датам
-
жесть =)
-
Я так делал для подсчета кол-ва просмотров каждой секунды видео :) только группировка была по секундам
-
Всем привет!
Кто нибудь использует https://github.com/mymarilyn/clickhouse-driver/ (драйвер для Python)?GitHub - mymarilyn/clickhouse-driver: ClickHouse Python Driver with native interface supportClickHouse Python Driver with native interface support - GitHub - mymarilyn/clickhouse-driver: ClickHouse Python Driver with native interface support
-
-
https://github.com/kshvakov/clickhouse/issues/93
Память не освобождается в тех случаях, когда используется транзакция и транзакция не завершается коммитом или роллбэком (а делается выход из функции вставки [например, при ошибке]).Memory leak in case of error from Clickhouse #93In case of Clickhouse error, we got unfreed memory, because of uncommited transaction handler. Reproduce example package main import ( "database/sql" "fmt" "time" _ "github.com/kshvakov/click...
-
Нестед поля не работают, да. Создайте issue. Как руки дойдут — сделаем. В последнее время со временем туго
-
Помоему для го это как раз правильно - деструторов ведь нет, нужно самому делать чтото по завершении транзакции, даже при ошибке
-
В плюсах конечно деструктор роллбек сделает
-
А в го дефер
-
-
-
Недоступен в каком смысле? Инстанс есть, доступен
-
В ифе с ошибкой
-
-
Аааа
-
Я бы тогда это в issue уточнил
-
А то не понятно было
-
-
Приветствую, такой странный вопрос, можно ли как то старые данные переносить автоматом на другой сторедж? Например данные страрше пол года переносить на другой диск. Спасибо.
-
Автоматически такого нет. Но технически отцепить партицию и перенести на другой хост можно без особых проблем.
Механизма вроде tablespace на сколько я знаю, как минимум пока, нет. -
но при детач партиции на сколько я понимаю по ней данных уже нельзя получить?
-
Мне кажется через реплики это безопаснее сделать
-
а как через реплику можно разделить данные? я пока не могу это представить
-
Ну изначально их делите в шардах по времени
-
Если вы их можете через партиции доставать
-
хм, спасибо подумаю над такой схемой деления
-
Нет, это баг, там в случае ошибки нужно буферы сданными обнулять. Другая проблема что если не завершать "транзакцию" то стандартная библиотека не будет возвращать соединение в пул и все равно расход памяти будет расти, т.к. бедет плодиться новые соединения
-
Немного наркомании
:) select day, count() from test.huest group by day
┌────────day─┬─count()─┐
│ 2018-02-21 │ 1 │
│ 2018-03-03 │ 1 │
└────────────┴─────────┘
:) select day, sum(c) as count from (select day, count() as c from test.huest group by day) ALL RIGHT JOIN (select day, c from (select toDate('1970-01-01') + number as day, 0 as c from system.numbers limit 30000) where day between (select min(day) from test.huest) and (select max(day) from test.huest)) USING(day) group by day
┌────────day─┬─count─┐
│ 2018-02-21 │ 1 │
│ 2018-02-22 │ 0 │
│ 2018-02-23 │ 0 │
│ 2018-02-24 │ 0 │
│ 2018-02-25 │ 0 │
│ 2018-02-26 │ 0 │
│ 2018-02-27 │ 0 │
│ 2018-02-28 │ 0 │
│ 2018-03-01 │ 0 │
│ 2018-03-02 │ 0 │
│ 2018-03-03 │ 1 │
└────────────┴───────┘ - 03 March 2018 (38 messages)
-
-
NYEPLOHO
-
Белая зависть)
-
Аналогичный подход описан выше :) только в вашем случае используется system.numbers.
-
Всем привет. КХ упал и не поднимается. Ошибка вот такая. Подскажите, что нужно исправить?
перезагрузка сервера не помогла -
-
Ваш подход и вдохновил на свершения :)
-
Спасибо ) Ваш выглядит попроще, без массивов)
-
Удалось локализовать проблему - видимо, память утекает при работе функции cityHash64, если в движке Distributed использовать. Поменял на rand() - успешно произошёл импорт на шарды.
CREATE TABLE distributedbd.ppitest_datagate AS distributedbd.ppitest_sharded ENGINE = Distributed( odissey, distributedbd, ppitest_datagate , rand() ); @kochetovnicolai -
Кому-нибудь знакома такая проблема, когда при INSERT-e данных на шарды через Distributed таблицу даже минимальные файлы csv по 500м кушают по 30 гигов RAM и сообщают об ошибке?
2018.03.02 17:05:21.955651 [ 17 ] <Error> executeQuery: Code: 241, e.displayText() = DB::Exception: Memory limit (for query) exceeded: would use 27.94 GiB (attempt to allocate chunk of 8388608 bytes), maximum: 27.94 GiB, e.what() = DB::Exception (from 192.168.10.132:56482)
Возможно, проблема в том, что я использую колонку вычисляемую?
CREATE TABLE IF NOT EXISTS distributedbd.ppitest_sharded (
...
REC_DATE Date DEFAULT toDate(FLOW_END)
) ENGINE = ReplicatedMergeTree('/clickhouse/{cluster}/tables/shard-{shard}/ppitest_sharded', '{replica}', REC_DATE, (...), 8192); -
-
-
Привет всем. Cобрал Кликхаус под мак Sierra и High Sierra, установка через brew. Может кому пригодится)
https://github.com/arduanov/homebrew-clickhouseGitHub - arduanov/homebrew-clickhouse: ClickHouse for MacOS Sierra and High Sierra.ClickHouse for MacOS Sierra and High Sierra. Contribute to arduanov/homebrew-clickhouse development by creating an account on GitHub.
-
👍
-
Добрый день!
Есть ли возможность в CH отправлять запрос в MySQL для включения результата в JOIN?
Словарь не подходит, так как каждая размер талицы в MySQL большой и постоянно меняется. -
Есть новый движок - MySQL. ENGINE = mysql(host_port, database_name, table_name, user_name, password)
-
Огромная благодароность!
-
Таблицы с этим движком read only. Так, на всякий случай :)
-
Да, то что нужно)
-
Супер!
-
а вместо mysql постгрес в него нельзя подставить?)
-
Не знаю. Попробуйте :)
-
Вааа как круто. Надо и правда pg попробовать.
-
На счет PG не уверен. У них не разные протоколы?
-
я думаю что да. В PG обычно по odbc ходят. Но вдруг)
-
Знаю, что например с mysql движком можно и sphinx подключить, т.к. он реализует протокол mysql, а вот на счет PG не уверен
-
Вобщем если получится проверить, то было бы супер узнать о результатах :) Мы планируем съехать на PG в какой то момент
-
-
-
-
Я pull нашел. Тока доков нет(((
https://github.com/yandex/ClickHouse/pull/1572
Там и mysql и odbcImplemented MySQL and ODBC table engines. by aavdonkin · Pull Request #1572 · yandex/ClickHouseImplemented MySQL and ODBC storages; implemented mysql and odbc table functions
-
-
Подскажите пожалуйста, есть ли движок для postgres?
-
Нашел баг. Создал таблицу из словаря командой:
CREATE TABLE %table_name% (%fields%) engine = Dictionary(%dictionary_name%)
Изменил конфиг словаря(например смена типа) и при перезапуске, КХ перестает запускаться т.к. КХ активирует таблицы командой ATTACH:
ATTACH TABLE direct_retargeting_attribut
(
AudienceId UInt64,
Name String,
IsAvailable String,
Description String,
Scope String,
AccountId UInt64,
AccountName String
)
ENGINE = Dictionary(hrukmuh_direct_retargeting)
а тут конфиг активации таблицы не меняется. -
не умею в плюсы, но в изменениях есть вот это:
+/** Implements storage in the ODBC database.
+ * Use ENGINE = odbc(odbc connection string, table name)
+ Example ENGINE = odbc('dsn=test', table) -
Да, просто видимо это еще не в релизе((
CREATE TABLE products_ext
(
title String
)
ENGINE = odbc('dsn=mydsn', products)
Received exception from server (version 1.1.54292):
Code: 56. DB::Exception: Received from clickhouse-test:9000, 127.0.1.1. DB::Exception: Unknown storage odbc. -
попробуй
ENGINE = ODBC('dsn=mydsn', products)
такое впечатление что оно регистрозависимо -
- 04 March 2018 (63 messages)
-
Неа, видимо еще не врелизе. У меня версия с deb репозитория
-
-
Какая версия?
-
-
-
-
ClickHouse from mysql
Maksim Ридонли вьюшка из мускуля: CREATE TABLE testdata( ID Int32, TEXT String )ENGINE = MySQL(host:port, database_name, table_name, user_name, password); Как это происходит (MySQL пока нужно писать именно так)
-
Огонь, спасибо. Завтра буду разбираться
-
Кто-нибудь может пояснить, зачем Clickhouse для ReplicatedMergeTree в режиме 3 шарда по 2 реплики создаёт на каждом серврере какие-то бинарники в папках с хостами каждой ноды, и вес этих бинарников больше импортируемого несжатого файла с данными?
Сжатие включено zstd на каждой из 6 нод, был на одну ноду в Distibuted импортирован файл 10G.
root@ch-node-4:/var/lib/clickhouse/data/distributedbd/ppitest_datagate# ls -l
total 144304
drwxr-xr-x 3 clickhouse clickhouse 33476608 Mar 4 05:34 default@192%2E168%2E10%2E129:9000
drwxr-xr-x 3 clickhouse clickhouse 28807168 Mar 4 05:34 default@192%2E168%2E10%2E130:9000
drwxr-xr-x 2 clickhouse clickhouse 27439104 Mar 4 05:34 default@192%2E168%2E10%2E132:9000
drwxr-xr-x 3 clickhouse clickhouse 29003776 Mar 4 05:34 default@192%2E168%2E10%2E134:9000
drwxr-xr-x 2 clickhouse clickhouse 28667904 Mar 4 05:34 default@192%2E168%2E10%2E135:9000
root@ch-node-4:/var/lib/clickhouse/data/distributedbd/ppitest_datagate# du . -hx --max-depth=1 2> /dev/null
4.9G ./default@192%2E168%2E10%2E134:9000
34M ./default@192%2E168%2E10%2E135:9000
5.7G ./default@192%2E168%2E10%2E129:9000
4.6G ./default@192%2E168%2E10%2E132:9000
273M ./default@192%2E168%2E10%2E130:9000
16G . -
-
Joined.
-
-
-
Ну можно тупо дамп импорт если не сильно нужен онлайн
-
https://clickhouse.yandex/docs/ru/query_language/queries/#_5
- бекап (FREEZE PARTITION)
- перенос бекапа в БД на другом сервере
- создание точно такой же таблицы, но с указанием репликации
- подключение ранее сделанного бекапа в таблицу с репликацией (ATTACH PARTITION) -
Добрый день!
Кто занимается разработкой Engine MySQL?
Вопрос в следующем: можно ли ожидать, что в будущей версии LIKE так же будут обрабатываться на стороне MySQL так же как и "="?
Пример: WHERE url LIKE '...' - выполняется на локальной машине, из-за чего по каналу между серверами перегоняется много ненужных данных, которые можно было бы отсечь, если бы LIKE / REGEXP / IN выполнялись на стороне MySQL. -
Добрый день. В данный момент никто не занимается - остались простые задачи по доработке, которые хотелось бы как-то между делом реализовать. Там три пункта: поддержка не только констант, но и константных выражений в условиях, которые передаются на удалённые серверы (например, x = today() - должно вычисляться и передаваться); поддержка IN и LIKE; интеграционные тесты.
-
Решилось установкой параметра internal_replication в true для шард и рестартом серверов. В документации очень блекло написано и сходу непонятно, к чему этот параметр и чем он грозит, когда Destributed пишет в Replicated, пока на практике не столкнёшься...
-
1. freeze partition не заблокирует ли запись в эту базу?
2. Перенос бэкапа в БД на другом сервере - это просто rsync каких-то каталогов? -
Если верно помню, это нечто вроде снапшота текущей патриции в папку с бекапом
-
Все верно, запись блокироваться не будет
-
https://clickhouse.yandex/docs/ru/query_language/queries/
Создание бэкапа происходит почти мгновенно (но сначала дожидается окончания выполняющихся в данный момент запросов к соответствующей таблице). Бэкап изначально не занимает места на диске. При дальнейшей работе системы, бэкап может отнимать место на диске, по мере модификации данных. Если бэкап делается для достаточно старых данных, то он не будет отнимать место на диске. -
Ога, спасибо, вроде разобрался. Бэкап сделал. Теперь на новом сервере необходимо создать табличку, но там она уже будет учавствовать в репликации. Установил и запустил zookeeper теперь нужно для таблички указать параметры движка. Выбрал для этого ReplicatedMergeTree. Но вот теперь немного непонятно с макросами. Мне на обоих серверах CH в config указать нужно два одинаковым макроса или на одном макрос удаленного сервера, а на удаленном макрос текущего?
<macros>
<shard>01</shard>
<replica>server-1.yandex.ru</replica>
</macros>
<macros>
<shard>01</shard>
<replica>server-1</replica>
</macros>
И да, я на обоих CH серверах указал два шарда
<01>
<shard>
<replica>
<host>server-1</host>
<port>9000</port>
</replica>
</shard>
<shard>
<replica>
<host>server-2</host>
<port>9000</port>
</replica>
</shard>
</ivinco_shard> -
Можете попробовать начать с одного шарда и 2 реплик.
Будет один шард 01 и две реплики:
- server-01-1
- server-01-2
На каждом сервере будет свой <replica>server-01-N</replica>
Указание "01" в имени реплики - позволит по имени определять, для какого шарда была поднята реплика -
Позже можно будет заняться перешардированием и поднятием для них своих реплик
-
-
-
-
Этого достаточно (на каждом сервере разный):
<macros>
<shard>01</shard>
<replica>server-1</replica>
</macros>
Это ипользуется в {shard} и {replica} при создании таблицы репликации для zookeeper. В теории можно обойтись и без указания таких макросов
> '/clickhouse/tables/{shard}/TableName' - взять из макроса
> '/clickhouse/tables/01/TableName' - без макроса -
Здравствуйте. В документации, в разделе "MergeTree в ReplicatedMergeTree" сказано, что можно перенести папки из другой таблицы в detached, а потом сделать поочередный ATTACH к каждой из директорий. Значит ли это, что при файловом бэкапе с помощью rsync, данные из папки таблицы можно использовать в качестве резервной копии ?
-
-
-
-
может надо не рестарт
-
а стоп и старт
-
у меня в постгре подобное было
-
+1. Старое доброе админское правило
-
-
-
сервер не обновился
-
хз как такое может быть)
-
Так вы клиент тоже обновите. На вашем скрине установка только сервера
-
-
запрос то сервер посылает
-
всмысле ответ на вопрос
-
-
-
-
-
А Clickhouse все еще обязательно нужно использовать именно DNS имена для репликации, или уже можно IP?
Версия сервера 1.1.54343
К проблеме https://groups.google.com/forum/#!topic/clickhouse/RlVBvJD-vtw -
Данные из папок таблиц можно копировать, но лучше с отключенным ClickHouse. Лучше копирвоать данные командой FREEZE PARTITION.
-
А если использовать rsync для бэкапа на удаленном сервере? Теоретически какие могут быть проблемы?
-
Для переноса данных из папки shadow rsync подойдет.
Если хотите делать это на живых данных, то лучше этого не делать. ClickHouse постоянно пересобирает куски данных (part) и сортирует данные в партиции последнего месяца (или иного первичного ключа). -
Интересно, а почему же прямое копирование подходит в случае преобразования MergeTree в ReplicatedMergeTree?
-
Там подразумевается прямое копирование при отклчюенной таблице, так как при копировании старая таблица с MergeTree уже считается нерабочей и в нее уже ничего не пишется (ее имя меняется и она отключается). На ее место поднимается новая.
-
Artemeey а не подскажете еще для восстановления нужно выполнить команду ALTER TABLE ... ATTACH PARTITION YYYYMM, где YYYYMM - месяц, для каждого месяца. А можно wildcard использовть для YYYYMM? А то у меня там очень много месяцев и каждый месяц вставлять не очень удобно.
-
К сожалению я не знаю такого способа. Но можно сгенерирвоать много запросов и выполнить один раз.
Про перенос всех файлов из папки detached в рабочую папку с таблицей с отключенным сервером не буду говорить, так как это не рекомендуется. -
-
Понял, благодарю!
-
Artemeey еще вопрос возник. я все данные импортировал в таблицу, однако, репликация не сработала или вернее сработала как-то половинчато. На втором сервере через репликацию база данных создалась, а табличка нет. Или табличку нужно в любом случае создавать вручную на двух серверах? Zookeeper поднят и работает корректно, в логах кликхауса я вижу, что он успешно видит все 3 сервера zookeepera.
-
На каждому сервере табилцу с репликой надо поднимать вручную. Она как раз и будет являться отправной точкой связи с zookeeper.
-
-
- 05 March 2018 (163 messages)
-
Товарищи, а clickhouse-client в неинтерактивном режиме при INSERT INO (A,B,C,...) ... из TSV, для тестов импорта в Distributed, это вообще нормально?
Есть ощущение, что таким образом передаётся по одной строке, что противоречит нормальной работе MergeTree, и Clickhouse *очень тормозит*? -
Не должен, размер блока передаваемого на сервер настраивается параметром --max_insert_block_size по умолчанию он равен 1048576
-
-
-
хочу дать chproxy доступ на чтение в определённую бд (allowed databases), но вот вопрос, kill query user должен иметь доступ к system database, я правильно понимаю? и иметь readonly = 0?
-
RO могут "килять" только свои запросы, при KILL он, на сколько я помню, ползет в system.processes, но настройки chproxy на это никак не влияют, это внутренняя кухня ClickHouse
-
Joined.
-
насколько разумно менять max_query_size с дефолта в 256 кб на 1мб? я понимаю, что "зависит от запроса", но сама по себе большой запрос не должен КХ взорвать?
-
2018.03.04 23:06:53.872068 [ 9 ] <Error> DDLWorker: Unexpected ZooKeeper error: Code: 999, e.displayText() = zkutil::KeeperException: no node, path: /clickhouse/task_queue/ddl, e.what() = zkutil::KeeperException, Stack trace:
Значит ли это, что ZK не работает? Такая ошибка в err.log на всех CH - нодах -
меняй смело!
-
!!!
-
не используй километровые селекты в продакшене, чем проще тем лучше!
-
ну это ясно, а если селект простой, но большой, с горой айдишек допустим. это ведь норм?
-
-
спасибо, М. привет сердечный
-
Joined.
-
Господа, есть таблица ReplicatedMergeTree, в которой сделано PARTITION BY toMonday(date)
Пришла пора почистить. Вижу следующие разделы:
\'2018-02-12\'
\'2018-02-19\'
\'2018-02-26\'
\'2018-03-05\'
При попытке сделать на узле click1 ALTER TABLE telegraf.processlist DROP PARTITION '\'2018-02-12\'' получаю:
Received exception from server (version 1.1.54337):
Code: 0. DB::Exception: Received from localhost:9000, ::1. DB::Exception: Received from click3.netangels.ru:9000, 192.168.110.243. DB::Exception: String is too long for Date: '2018-02-12'.
Что это и как с этим бороться? -
Возможно вы имели ввиду это:
>DROP PARTITION '201802' -
Joined.
-
Точно не это
-
Там PARTITION BY toMonday(date), а не по-месячно
-
Доброго времени суток всем. Может кто то привести пример работы с MAXIF и MINIF ? мне нужно передать в функции условие. как это сделать?
-
Партиция как называется? Возможно формат просто не такой
-
ALTER TABLE telegraf.processlist DROP PARTITION toDate('2018-02-12')
-
# echo "select partition from system.parts where database = 'telegraf' and table = 'processlist' and active group by partition order by partition" | curl -s --netrc http://localhost:8123/?query= --data-binary @-
\'2018-02-12\'
\'2018-02-19\'
\'2018-02-26\'
\'2018-03-05\' -
Ну то есть, ровно так оно и называется, с кавычками
-
Хм... Сработало. Интересно, а накой тогда там кавычки в system.parts?
-
Первый параметр поле, второй условие
-
@kshvakov условие типа HeartRate > 0 например?
-
Да, minIf(column, HeartRate > 0)
-
Подскажите, кто в теме и использует репликацию, у вас по пути /replicas в ZK все реплики отображаются, или только одна last added?
[zk: localhost:2181(CONNECTED) 12] get /clickhouse/tables/01/distributedbd/ppitest_sharded/replicas
last added replica: ch-node-2_130
[zk: localhost:2181(CONNECTED) 13] get /clickhouse/tables/02/distributedbd/ppitest_sharded/replicas
last added replica: ch-node-4_133
[zk: localhost:2181(CONNECTED) 14] get /clickhouse/tables/03/distributedbd/ppitest_sharded/replicas
last added replica: ch-node-6_135 -
Всем привет. Никто не сталкивался с проблемой сохранения полей типа date при подключении внешних словарей из postgresql через ODBC?
При указании в конфиге словаря в кликхаусе типа Date для таких полей, в них всегда сохраняется значение, указанное в null_value, вместо того, что реально сохранено в postgresql. При указании типа String сохраняется реальное значение в формате YYYY/MM/DD. Понятно, что его можно преобразовать с помощью toDate(), но хотелось бы все таки в словаре иметь поле типа Date, а не String. -
-
-
Нет, у меня там постгресовский тип date, кликхаус почему-то не хочет оттуда сохранять значения в свой тип Date, а при сохранении в строку видит дату в формате со слэшами.
-
попробуйте задать expression этому полю в конфиге, который будет приводить дату пгшную к дате в формате кх
-
-
да, помогло, спасибо. вот так сделал:
<expression>to_char(date_start, 'YYYY-MM-DD')</expression> -
1.1.54343 давно живет уже на проде, 3 шарда по 2 реплики, проблем нет
-
-
Еще раз добрый день. В функцию toDateTime можно передать часовой пояс в IANA формате. Подскажите могу ли я просто передать туда offset. Или есть какие то другие способы решения данного вопроса.
-
Joined.
-
Коллеги, можете подсказать, что может означать данная ошибка: DB::Exception: Cannot convert data from a nullable type to a non-nullable type
-
практически все колонки (кроме индекса) у меня Nullable
-
это при инсерте через jdbc
-
Коллеги, добрый день. Постоянно отваливается КХ (кажется, что после большего сложного запроса), но в clickhouse-server.err.log новых записей не добавляется. Подскажите, куда копать?
-
-
-
Это что такое?
-
-
-
-
[8805958.859288] Out of memory: Kill process 17099 (clickhouse-serv) score 576 or sacrifice child
[8805958.859354] Killed process 17099 (clickhouse-serv) total-vm:25730516kB, anon-rss:24507356kB, file-rss:0kB -
-
Да, и правда так. а как с этим борются?
-
-
И можно ли как то посмотреть сколько памяти словари отъедают?
-
-
-
-
Select * from system.dictionaries
-
-
Правильно понимаю, что это они всего 800 МБ занимают?
-
-
-
-
Коллеги | сообщество -- подскажите как вам версия 1.1.54343 от 2018-02-05 можно запускать в прод. ?)
-
-
Ребят, такой вопрос - возникает ошибка
"Types must be the same for columns at same position. Column event_val has type UInt8, but column event_val has type UInt64"
При запросе "INSERT INTO table (event_val) SELECT 1 as event_val"
Причем у меня два кликхауза, один в докере, другой с дистрибутива под ubuntu. В одном работает такой запрос, в другом нет.
Может кто знает, какая настройка кликхауза отвечает за приведение типов при таких запросах? -
А можно как-то запретить пользователям самостоятельно выставлять настройку max_memory_usage ?
-
readonly=1
-
Tabix против (
-
-
Скорее всего у вас просто версии ClickHouse разные
-
То есть по сути любой пользователь из табикса может уронить КХ, выставив огромное значение max_memory_usage и написав большой запрос?
-
-
Это печально, но большое спасибо, пойду менять права :)
-
а поставить квоты никак нельзя?
-
-
У меня есть ещё вопрос, а операторы with cube и with rollup пока не реализованы?
-
Нет, если для Tabix нужен readonly=2 то это разрешает менять настройки
-
Там, вроде, всё предельно просто, что не так?
-
В мастере пока их нет, возможно пока ещё вообще их нигде нет)
-
Я сделал как в доке, делаю запрос
SELECT *
FROM queue
LIMIT 5
Received exception from server (version 1.1.54343):
Code: 117. DB::Exception: Received from 185.9.185.65:9000. DB::Exception: Unexpected nested field for key 'llsSensors'. -
-
-
-
-
-
Коллеги, подскажите. Есть идея каждый час через cron выполнять запрос вида clickhouse-client —query="alter table db.table freeze partition '2018';" с последующим rsync в бэкап хранилище. Собственно вопрос - есть ли какой-нибудь лимит на значение инкремента? И в случае ЧП как всю эту гору папок восстановить?
-
может реплику проще?)
-
Есть ли способ настроить ClickHouse кластер(а) таким образом, чтобы поделить условно на 2 части:
1. 1 часть кластера обслуживает запросы API и основной use case получать данные по конкретному пользователю. Здесь высокий qps.
2. 2 часть кластера обслуживает внутренние запросы от аналитиков, которые необязательно запрашивают данные по конкретному пользователю, а сразу по всем. Здесь низкий qps, но перебирается больше данных.
Задача такая, чтобы запросы из 2 пункта не влияли или слабо влияли на запросы 1 пункта, чтобы эти части кластера были условно независимыми, но при этом данные чтобы были консистентными в итоге.
Как данная проблема решена внутри Yandex? -
На реплике данные можно убить через DROP PARTITION
-
Последнюю и востанавливайте
-
Если есть реплики пустите на них аналитиков и уберите их из distributed куда ходит API, а вообще не должно сильно афектить, у нас, например, аналитик вполне себе в тотже кластер ходит
-
реплику не целесообразно, так как повышение нагрузки не планируется. а вот данных уже много и нужно бэкапить.
-
просто с какихто объемов бекап будет очень долго делатся
-
-
то есть по высшему номеру инкремента директорий?
-
Ну да, у вас после фриза партиции будут данные на определенное время, WAL как в постгресе нет, поэтому можно ориентироваться на время фриза чтоб восстановиться на определенное время
-
понял, благодарю вас!
-
если у кого-то clickhouse тормозит и выжирает-потребляет всю доступную память в режиме репликации и шардирования, проверяйте по буквам схемы таблиц.
это первый симптом того, что где-то что-то смотрит само на себя и входит в цикл порождения сущностей
всё настроил и могу уверить, что нет, не тормозит 🔥
спасибо всем за помощь, кто отвечал, @kshvakov особенно -
Мы планируем организовать ClickHouse meetup для контрибьюторов. Но пока непонятно, на какие темы лучше сделать специализацию. Интересно, какие у вас есть пожелания?
-
- Взаимодействие с другими СУБД
- Best practice в плане создания схем на конкретных примерах -
Эта тема подходит на широкую аудиторию, не только для контрибьюторов. Интересует именно для контрибьюторов. При чём, пока ещё непонятно, как лучше таргетировать мероприятие - для разработчиков всевозможных инструментов и интеграций для ClickHouse, или для C++ разработчиков (их намного меньше). Например, про "Взаимодействие с другими СУБД" можно рассказать, как оно устроено, и показать пример, как легко добавить Монгу.
-
Лично я предпочитаю мероприятия, где не долго и подробно о чём-то конкретном, а довольно широко и с последующим обменом данными, где или у кого можно получить информации в конкретных предметных областях больше. Или классические минуты на вопросы после докладов, где в случае обнаружения интересных собеседников можно обменяться контактами и продолжить обсуждение алгоритмов и методов их улучшения в оффлайне, или в issues например.
Такой формат будет иметь пользу для более широкого круга людей, которым как-то интересен Clickhouse, кмк.
Для разработчиков инструментов и интеграций выглядит интересно -
@milovidov_an есть ли информация по UPDATE/DELETE ?
-
недавно вверху писали, что Q2 2018, май скорее всего
-
Да. Планируем сделать доступным до середины мая. Уже есть работающий прототип.
-
Есть что почитать?
-
Разве что найти ветку одного из разработчиков и почитать её...
-
Хорошо, спасибо. Было бы отлично уже хотябы альфу получить.
-
Хорошо )
-
В первую очередь будет доступен "тяжёлый" вариант UPDATE/DELETE, подходящий для редких запросов.
То есть, изредка исправлять данные или удалять часть данных - Ок, постоянные апдейты - нет. -
В данный момент, только такое и требуется. Мне, во всяком случае.
-
Это очень круто, на вскидку интересно:
* расширение синтаксиса SQL и работа с AST
* создание новых движков
* создание новых типов (сейчас там все очень не тривиально)
* добавление новых функций
* работа с партициями, таблицами "изнутри". Получение информации о таблице, как добавить новые свойства; управление партициями. Как работают ключи партиционирования изнутри.
вообще много всего хочется узнать) -
Как раз с удовольствием можно будет всё это рассказать :) Пока не определились с форматом мероприятия (можно в разном режиме это всё рассказывать). А сколько примерно людей из вашей компании и близких хотели бы в этом участвовать?
-
Я завтра узнаю, но я обеими руками "ЗА"
-
-
Наличие примерно 20 C++ разработчиков достаточно, чтобы сделать отдельный митап именно для них.
-
-
Мск.
-
В Санкт-Петербурге будет ещё большой митап, наверное летом. И в Москве тоже :)
-
Очень интересно
-
Подскажите, функция argMax работает по данным DateTime? что-то не выбирает максимальное значение.
-
-
сейчас сделаю его поменьше
-
Это не совсем так. Я пришел к выводу, что текущая имплементация основанная на POCO драйвере очень ограничена (нет поддержки view, нельзя использовать ключи внутри вложенных структур), нужно чинить или переписывать.
Пока что я пришел к executable словарям, написал на go маленькую программку которая вытаскивает данные из монги. Решение оказалось тоже не айс, cache словари не работают, clickhouse как оказалось не отправляет запрос в stdin при работе с executable словарями. А так да, монгу подключить можно:) -
нашел ошибку, пока готовил пример)
-
Можете сказать почему OPTIMIZE может не сработать? Использую для CollapsingMergeTree
-
Да, для Монги в Poco какой-то трешовый драйвер. Можно заменить на официальный. Но когда мы добавляли это, то как раз был период, когда какой-то официальный драйвер, который мы использовали, устарел, и проще всего оказалось подключить драйвер из Poco.
-
> clickhouse как оказалось не отправляет запрос в stdin при работе с executable словарями
@proller Наверное ты смотрел на эту проблему? -
Попробуйте запустить OPTIMIZE с настройкой optimize_throw_if_noop=1, он сможет выдать какую-нибудь диагностику
-
нет. а проблема описана где-нибудь?
-
Да. И если правильно помню, ты в GitHub стоишь исполнителем.
-
То есть в SELECT-ах участвуют всё же и реплики, которые не is_leader, но каждый отдельный селект выполняется только на 1 из доступных? @kochetovnicolai
-
да
-
А сторонних разработчиков, которые не контрибьютят в сам кх-сервер но пишут инструменты интеграции с ним тоже касается? Например очень интересно почему Native сетевой протокол получился таким каким получился и есть ли какие-то планы его улучшать?
Конкретно очень смущает его заточенность на блокирующийся сетевой i/o, если отправлять в него ещё худо-бедно можно асинхронно, то доставать блоки из сети чаще всего означает отдать под это отдельную нитку (полагаю на сервере тоже отдается thread-per-connection) т.к. у нежатого блока нет никакой информации в заголовке о том сколько там ещё осталось до конца данных. Конечно ввод можно буфферизовать, но тогда снежным комом возникает необходимость делать много разноразмерных аллокаций, копирований, что тоже не круто.
При сжатии все чуть лучше, т.к. есть возможность выудить размер, но часть драйверов на нативном протокле не умеет в сжатие из-за того что оно всецело полагается на CityHash 1.0.2, что является следующей проблемой ибо в природе готового алгоритма именно такой версии да ещё и под разные языки достаточно мало и разработчики страдают переписыванием с c++ и коммитят очередные баги в продакшны.
Это что касается контрибьюшна в экосистему с другой точки зрения, хочется чтоб внешние интерфейсы кликхауса были простыми и в то же время быстрыми. Сетевой стек пока не про это. -
Да, контрибьюторы рассматриваются не только те, что коммитят в основной репозиторий.
> Например очень интересно почему Native сетевой протокол получился таким каким получился и есть ли какие-то планы его улучшать?
Для некоторых вещей умных объяснений нет, но можно рассказать, почему всё так как есть. В самое ближайшее время менять протокол не планируется. Но есть одна связанная задача, для которой это было бы полезно - менять как раз в том направлении, которое вы имеете ввиду - например, чтобы можно было передавать несколько resultset-ов в перемешку в одном соединении, и чтобы в целом протокол состоял из простых асинхронных команд, а не сложной "стейт-машины", в которой надо очень аккуратно в правильной последовательности правильные кусочки данных передавать. -
можно но не нужно передать offset в часах используя хитрозону Etc/GMT+3 , ... , Etc/GMT-13
-
-
-
1.
Также есть возможность изменить уровень сжатия. -
-
-
-
-
M(SettingInt64, network_zstd_compression_level, 1, "Allows you to select the level of ZSTD compression.") \
\
Нашлось в коде, стало быть <network_zstd_compression_level></network_zstd_compression_level> -
-
Используется двустороннее взаимодействие - возможность отмены запроса, получение прогресса, и т. п. Оборачивать всё в HTTP возможно, но нецелесообразно (приведёт только к усложнению). Плюс лишние копирования из-за chunked transfer encoding. Внутренний протокол (для взаимодействия между серверами) первичен, а HTTP интерфейс - отдельно.
-
У меня работает с тем примером.
-
-
-
-
Framing format отличается от стандартного для zstd и lz4. Мы использовали lz4 до появления framing формата для него. Это используется не только для передачи данных по сети, но и для хранения на диске.
Тем не менее, Content-Encoding со стандартным framing format-ом, для HTTP интерфейса, тоже можно добавить. -
-
-
Да, HTTP даёт небольшой оверхед при INSERT, если использовать Native формат или хотя бы RowBinary. При вставке в MergeTree обычно основное время тратится на сортировку на стороне сервера. Оверхед от HTTP будет более заметным, если передавать заранее отсортированные данные (сервер это понимает), или если вставлять в простые таблицы типа Log или Memory, но он всё равно остаётся небольшим.
-
Вы можете изучить оверхед, вставляя данные по HTTP на localhost, в таблицу с движком Null - запустите perf top и смотрите.
-
-
-
просто отсортировать по первичному ключу, или какие-то хинты нужны?
-
Просто отсортировать. Но если делать это самостоятельно, то скорее всего, будет медленнее.
- 06 March 2018 (152 messages)
-
Готовы принять участие. Именно такие вопросы в основном и волнуют.
-
* Вообще интересуют инструменты интеграции через C++.
* Альтернатива clickhouse-cpp. Рекомендации разработчиков по организации такой интеграции
* Новые движки
* Новые типы
* Может не совсем уместно, но планируется ли сертификация системы во ФСТЭК по аналогии c PostgreSQL Professional? Опыт использования CH в системах, где такое требуется. -
После обновления с версии 1.1.54327 на 1.1.54342 появились ошибки "Another quorum insert has been already started". Подскажите, пожалуйста, в чем может быть дело.
-
and warnings: "Tried to add obsolete part"
-
Ты не мог бы прислать рабочий конфиг? Я пробовал делать так как ты писал выше, через tee, к сожалению в лог файл так ничего и не попало. Я тестирую используя последний docker образ.
-
-
только что проверил на последней стабильной версии ch. Действительно, все работает
-
на v1.1.54318, v1.1.54327 не работало почему-то
-
-
конфиг не менял, права не менял. Только версия ch была обновлена на сервере
-
-
Эта ошибка может возникать только при использовании кворумной записи (insert_quorum).
В этом случае все INSERT-ы линеаризуются - следующий INSERT может быть сделан только после того, как предыдущий либо подтверждён на кворуме реплик, либо отменён. Если есть кворум живых реплик, то это должно произойти в течение короткого времени - как только реплики скачают кусок. При получении такой ошибки можно сделать ретрай с каким-нибудь backoff. Если никаких INSERT-ов одновременно не делается, а ошибка не исчезает, то это - проблема (если перезапустить сервер, то она исправится).
PS. Не понял, как это может быть связано с обновлением на версию 1.1.54342. -
-
Joined.
-
Можно каким-либо образом воссстановить структуру таблицы из дампа формата Native?
-
Да, можно. В дампе указаны имена и типы столбцов. Хотя прочитать их оттуда не очень удобно, так как они идут вперемешку с самими данными.
При необходимости можно сделать утилиту, которая по дампу в Native формате выведет его структуру. -
А где-нибудь сам формат то есть в открытом доступе?
-
можно открыть просто текстовым редактором , если на раз
-
там все довольно понятно
-
-
Чтение - выполнение SELECT.
-
-
подскажите, как должен выглядить формат TSV файла для встаки его содежимого в таблицу из двух полей типа Int32, как разделить значенния и конец строки ?
-
-
спасибо
-
не получилось, выдает Column 0, name: a, type: Int32, ERROR: text "1<BACKSLASH>t0<BACKSLASH>n<CARRIAGE RETURN>" is not like Int32
-
\t это табуляция \n перенос строки
-
-
пробовал по всякому, сейчас выдает Column 0, name: a, type: Int32, ERROR: text "1<TAB>0<CARRIAGE RETURN><LINE FEED>2<TAB>" is not like Int32 файл редактирую в notepad++ кодировка utf-8
-
Наверн проще будет сделать инсерт а потом дамп в tsv. Увидишь сразу нужный формат.
-
-
Судя по <CARRIAGE RETURN> - данный символ лишний
-
Концы строк не той системы :-)
-
\r\n вместо \n
-
cat /media/sf_test/journal.tsv | clickhouse-client —query="INSERT INTO dictions.jjj FORMAT TSV"
-
как вставить нужный? нотепад++ только CRLF вставляет в конце
-
Взять редактор, который умеет сохранять с юниксовыми концами строк, наверное.
-
используйте sublime text
-
Не в курсе, если честно, кто там сейчас под винды котируется.
-
там все это конфигурится
-
-
+
-
Если набирать текст вручную, то проще VALUES.
-
Или CSV - в нём есть поддержка CR LF на всякий случай.
-
-
с CSV я разобрался, хотел TSV -поробовать
-
привет, команда, каков прогресс «с rollup»,
-
именно так я и делаю, нотепат все рисует как и должно быть а вот импорт не парсится из этого файла
-
Имеется ввиду GROUP BY ... WITH ROLLUP/WITH CUBE? Сейчас эту задачу никто не делает, хотя сделать её уже не так сложно.
-
-
хорошо понял
-
Задам вопрос туту
-
После удаления партиций у меня не освобождается место
-
Это баг?
-
А если подождать минут 15-20?
-
У меня удаляется, но не сразу.
-
гм
-
ну щас подожду
-
дествительно недавно удалил
-
google: notepad++ unix line endings
-
спасибо! получилось\
-
Спасибо! Выяснилось, что проблемы были вызваны переносом нод в ZK.
-
-
Словари
<attribute>
<name>title</name>
<type>String</type>
<null_value></null_value>
</attribute>Могу ли я указать дефолтные параметры и не передовать их в tuple dictGetString('user','name',tuple(toUInt64(`user_id`)))? Есть дефолтные параметрый в таблице, которые проще указать в словаре, чем каждый раз в запросе -
сначала главный конфиг, потом все что в папках
-
У нас из желающих только я:) Кстати, было бы интересно еще узнать про разработку словарей.
Если делить мероприятие на 2-а митапа, для разработчиков Clickhouse для разработчиков различных утилит для дего,
то хотелось бы чтоб они были одним днем, а то не все живут в Москве и многим захочется попасть на оба, хотя, как мне кажется,
в любом случае информация о внутреннем утройстве полезна всем. -
Всем привет, можно ли как-нибудь схлопнуть данные обращаясь к шардам (ReplicatedReplacingMergeTree) через distributed таблицу? В самих шард-таблицах данные схлопнуты, но при обращении в distributed - нет, найденные варианты пока такие: 1) создавать ключ шардирования такой же как и для дедупликации. 2) LIMIT 1 BY.
-
-
-
-
-
-
Google Groups
Google Groups allows you to create and participate in online forums and email-based groups with a rich experience for community conversations.
-
ага, значит первый вариант, думал может существует что-то типа FINAL для distributed, спасибо!
-
-
-
Как удалить все запси без удаления всей таблицы ?
-
Такой возможности (TRUNCATE TABLE) нет.
-
-
Это как?
-
ALTER TABLE ... DROP PARTITION ...
-
Имена можно подсмотреть в system.parts
-
Что-то типа:
SELECT partition FROM system.parts WHERE (database = '${DB}') AND (table = '${TB}') AND active GROUP BY partition ORDER BY partition ASC -
Спасибо, помогло
-
А её нет по соображениям безопасности, а вдруг рука дрогнет? Или можно сделать, но завязаться на тот же "предохранитель" что и DROP TABLE ?
-
Для всего кроме Replicated таблиц можно было бы легко сделать с помощью rename + создания новой таблицы под блокировкой + drop старой таблицы. Но для Replicated DROP удаляет только одну реплику, а RENAME не меняет путь в ZK. Поэтому получается, что нет общей реализации для разных движков таблиц.
-
меня так один раз спасло, после чего темповые таблицы создаю в другой бд и непохожими именами, типа mafaka.kakaha, чтоб не опечататься :)
-
Как то можно сиволы без экранирования вставить? типо '
-
@Shegloff Чтоб меньше ошибаться есть еще "обсуждаемая" фича с кастомным промтом чтоб было видно в кленте где сейчас находишься, у меня выглядит так
-
-
можно использовать формат TSVRaw для вывода без экранирования
# cat test.tsv
1 'sdasdasdaff'dfgsdfg'dfgdfg'
# cat test.tsv | clickhouse-client -q "insert into test.test (num, kolonka) FORMAT TabSeparated"
# clickhouse-client -q "select * from test.test FORMAT TSVRaw"
1 'sdasdasdaff'dfgsdfg'dfgdfg' -
спасибо
-
-
Помогите посчитать последний столбец с накоплением.
-
-
sum?
-
а, с таким накоплением
-
пардоньте
-
-
-
-
-
-
Смотря что делать, в КХ есть https://clickhouse.yandex/docs/en/single/#runningdifferencexClickHouse Documentation | ClickHouse Documentation
ClickHouse is a fast open-source column-oriented database management system that allows generating analytical data reports in real-time using SQL queries
-
-
-
-
Алексей, спасибо.
А изредка, это с какой частотой? -
-
-
-
Меня хоть и не зовут Алексей, но дерзану ответить. Я думаю, что редко — это значит, что операции предполагаются разовые, чтобы один раз исправить исторические данные. Потому что для штатного изменения множетсва строк уже есть append-only механизмы вроде SummingMergeTree, которые не накладывают на репликацию кликхауса особых ограничений. А для UPDATE/DELETE ему нужно полностью заблокировать запись в таблицы, дождаться того, чтобы догналась реплиацию, выполнить эту операцию, и только потом продолжить (потому что UPDATE/DELETE зависят от порядка).
-
:) select groupArray(day) as day, groupArray(lang) as lang, groupArray(c) from (select day, lang, count() as c from test.test where lang = 'ru' group by day, lang)
┌─day───────────────────────────────────────────────────┬─lang──────────────────┬─groupArray(c)─┐
│ ['2018-03-06','2018-03-04','2018-03-05','2018-03-03'] │ ['ru','ru','ru','ru'] │ [2,2,2,3] │
└───────────────────────────────────────────────────────┴───────────────────────┴───────────────┘
ну вот если развернуть это все в массивы, то как раз над groupArray(c) можно было применить arrayCumSum, который бы и посчитал накопление, а потом обратно в строки -
И прадва пофиг, шит
-
-
похоже вы правы
-
-
-
Зависит от объёма данных в затронутых партициях. По скорости работает примерно так же как OPTIMIZE FINAL.
-
если важно именно как у вас, можно завернуть в сабквери и пересортировать
-
Реализация всё-таки без длинных блокировок.
-
как вы тогда решаете вопрос консистентности?
-
жаль, выгладит ахеренно)
-
Известно, на каком наборе кусков данных нужно будет выполнять DELETE/UPDATE.
-
осталось понять как из массива [2,2,2,3] сделать [2,4,6,9] без функции arrayCumSum, и можно фигарить =)
-
Походу то что нужно. Большое спасибо!
-
Репликацию тоже не ждете? То есть если я пошлю сразу INSERT и потом UPDATE, то на каких кусках выполнится UPDATE на реплике?
-
зачот!
-
Порядок всех модифицирующих операций (INSERT, ALTER...) определяется глобально. Реплика сначала скачает кусок с INSERT, потом сделает UPDATE, или скачает готовый обновлённый кусок.
-
Круто :)! Было бы классно, если бы где-то рассказывалось более подробно об устройстве репликации в ClickHouse, а то пока что я только от ваших коллег узнаю, как она работает :).
-
У нас был доклад (РИТ++ и DevConf), где в общих чертах рассказывается. Правда для него не сохранилось видео. Также есть весьма поверхностное описание здесь: https://clickhouse.yandex/docs/en/development/architecture/ в конце.
-
Тогда у меня пара вопросов осталось:
1. как определяется, какой список кусков надо скачать, когда появляется новая реплика?
2. что будет, если хост с репликой «упадет» навсегда? для него будет копиться очередь для репликации в зукипере?
3. как определяется, каких кусков на реплике не хватает? полный список кусков хранится в индексе колонок, или где-то отдельно? как высчитывается разница, ведь кусков может быть очень много? -
1. Есть глобальный лог операций. Все реплики смотрят на этот лог, запоминают позицию, до куда его дочитали, копируют записи в свою очередь задач, и потом выполняют эти задачи.
При создании новой реплики, она копирует позицию в логе, очередь задач, и множество кусков, у какой-то существующей реплики. Далее куски из множества кусков скачиваются, а затем задачи в очереди выполняются как обычно. -
2. В глобальном логе не будут удаляться старые записи и он будет накапливаться, пока ноду с репликой не удалят из ZooKeeper окончательно вручную. Это одна из известных проблем. Для решения предлагается сделать режим восстановления реплики без использования лога, а по состоянию другой реплики.
-
3. Список кусков, которые должны быть на реплике, хранится в ZooKeeper. Кусков не может быть очень много.
-
@milovidov_an спасибо, стало яснее :)
-
интересно, сколько места занимает снапшот зукипера в яндексе и за какое время он там накопился?
-
Чуть больше 10 GB, размер с течением времени более-менее стабилен. Реплицируемые таблицы используются с осени 2014 года.
-
Только я успел перевести все вопросы в своем faq, так еще простыню текста подкинули
-
Joined.
-
-
Причем и в прямом и переносном смысле
-
Кек
-
-
-
-
-
-
Наоборот, сохраняет самую позднюю.
-
@milovidov_an https://blog.cloudflare.com/http-analytics-for-6m-requests-per-second-using-clickhouse/ тут вот новое от cloudflare :)HTTP Analytics for 6M requests per second using ClickHouse
One of our large scale data infrastructure challenges here at Cloudflare is around providing HTTP traffic analytics to our customers. HTTP Analytics is available to all our customers via two options:
-
Спасибо, сейчас почитаем... (или завтра утром)
-
Translation from Russian: ClickHouse doesn't have brakes (or isn't slow)
- 07 March 2018 (232 messages)
-
А в какой бд unique ключ сохраняет самую раннюю?
-
в других бд он ругается просто
-
в постгресе можно написать on conflict do nothing
-
и будет оставатся старая версия
-
-
Ну так то и в мускуле on duplicate key update есть, и insert ignore, я думал есть прям индекс такой где то :)
-
зачем, если есть import requests
-
GitHub - Infinidat/infi.clickhouse_orm: A Python library for working with the ClickHouse database (https://clickhouse.yandex/)
A Python library for working with the ClickHouse database (https://clickhouse.yandex/) - GitHub - Infinidat/infi.clickhouse_orm: A Python library for working with the ClickHouse database (https://c...
-
clickhouse-sqlalchemy.
-
http api мне вполне хватает. а либы вот, уже скинули
-
Не без костылей, но работает. И имеет хорошие перспективы, на мой взгляд.
-
requests - это как бэ, простите, говно, спички и желуди
-
Согласен. Сколько ни пытался обойтись без ORM-ки - даже на мелких проектах ловил себя на том, что начинаю писать ORM-ку сам.
-
-
И, естественно, самописное всегда получается хуже уже готового и поддерживаемого.
-
-
GitHub - kszucs/pandahouse: Pandas interface for Clickhouse database
Pandas interface for Clickhouse database. Contribute to kszucs/pandahouse development by creating an account on GitHub.
-
-
Привет!
Есть ли возможность привести строку с IDs через запятую в тип tuple. Например у меня есть ячейка, в которой хранятся идентификаторы и мне нужно сделать IN по этим идентификаторам. -
Лучше external data использовать, если идентификаторов много
-
Да и я не уверен, что tuple отработает как ожидается
-
Ребята, zookeeper 3.5 будет работать с clickhouse? Нормально его (zookeeper 3.5) вообще использовать?
-
Спасибо. Их много. Но и самих знаений со списком IDs может быть много.
-
плюсую. в sqlalchemy-clickhouse от cloudflare возможностей немношк пожиже
-
Тогда однозначно лучше external data. У нас КХ начинал думать над парсингом когда в запрос прилетало 40к идентификаторов
-
подскажите, реплики используются только для отказоустойчивости? на производительность запросов как то влияет их наличие/количество?
-
Мы используем такой подход. Пускаем туда запросы.
-
Влияет на скорость
-
Но лучше шардов добавлять :)
-
а какая зависимость в производительности запросов от количества шардов? запрос делается на одном шарде 10с а на двух будет 5 с ?
-
у нас было так, при условии, что шарды одинаковые по стате
-
спасибо
-
Должен работать
-
Не только, у вас запросы могут "улетать" на разные реплики, т.е. фактически вы сможете выполнить больше запросов за единицу времени
-
Да, в общем случае почти линейно растет
-
а распаралеливание на разные реплики проиходит прозрачно?
-
не будет как пушкой по воробьям, если никаких инсертов, а только селекты
-
Запросы будут приходить то на одну машину, то на другую, в зависимости от настроек (https://clickhouse.yandex/docs/en/single/#load_balancing). Если у вас всего один шард и несколько реплик то такое поведение необходимо реализовывать самим
-
имхо, все остальное не лучше
-
хотя я вижу, в него уже вложено почти все что нужно, пагинация/агрегация и итд
-
-
Ну, для Python есть https://github.com/mymarilyn/clickhouse-driver , ORM это путь "в никуда" :)GitHub - mymarilyn/clickhouse-driver: ClickHouse Python Driver with native interface support
ClickHouse Python Driver with native interface support - GitHub - mymarilyn/clickhouse-driver: ClickHouse Python Driver with native interface support
-
не работал раньше с ним, это как понял, готовый инструментарий для работы с стат. данными?
-
Да, достаточно крутая штука для работы с данными
-
Или я такой криворукий, или лыжи не едут, мне не удалось его собрать под центосью :(
Ругался на все, что ни попадя -
через пип ставил?
-
-
да
-
сетаптулс должен сказать что и чего не хватает
-
-
Если на этапе сборки сишной ломается, то не скажет. А если центось, то небось устаревшая как хрен знает што.
-
хмм, разве не говорит? у меня всегда говорила, типа того нету, этого.
-
Новая центось, старой не держим
-
Ну он может и скажет, когда сломается %)
-
Забросили бы логи на pastebin или в issues к чувакам
-
-
-
Введение в pandas: анализ данных на Python
pandas это высокоуровневая Python библиотека для анализа данных. Почему я её называю высокоуровневой, потому что построена она поверх более низкоуровневой библиотеки NumPy (написана на Си), что явл…
-
да не, я про как его подружить с кликхаусом )
-
-
GitHub - kszucs/pandahouse: Pandas interface for Clickhouse database
Pandas interface for Clickhouse database. Contribute to kszucs/pandahouse development by creating an account on GitHub.
-
-
kszucs/pandahouse
Pandas interface for Clickhouse database. Contribute to kszucs/pandahouse development by creating an account on GitHub.
-
-
Спасибо ещё раз core разработчикам ClickHouse за отличный инструмент позволяющий решать проблемы подобного масштаба, и за быструю реакцию на пул реквесты.
-
подскажите в чем может быть проблема с неверным паролем для пользователя default в error логе?
CH 1.1.54343, 4 сервера 2 шарда по 2 реплики при создании кластера для пользователя default был задан пароль, но затем убран т.е. сейчас пустой. Все 4 сервера по очереди порестартил - но ошибка не ушла - где можно посмотреть логин для реплик и возможно почистить пароль для использования репликации?
https://pastebin.com/52c4frdb -
-
-
Приветствую. Наше опечатку в документации:
https://clickhouse.yandex/docs/ru/operations/settings/settings/#settings_settings_max_replica_delay_for_distributed_queries - тут
Сейчас: Если оставание реплики
Нужно: Если отставание реплики
Поправите пожалуйста 🙂 -
Заявки на редактирвоание лучше сотавлять в github: https://github.com/yandex/ClickHouse/blob/master/docs/ru/operations/settings/settings.mdyandex/ClickHouse
ClickHouse is a free analytic DBMS for big data. Contribute to yandex/ClickHouse development by creating an account on GitHub.
-
Joined.
-
Вы можете смело делать пулреквест и никого не ждать;)
-
Всем привет, столкнулся с странной ситуацией, пишем в КХ через HTTP POSTом, в том числе создаем таблицы, например tinylog, так вот периодически create table внезапно может занять до 10 секунд (судя по логам KX сервера), причем следующий подобный квери заходит моментально. Версия clickhouse-server-1.1.54343-1.el7.x86_64
-
Доброго времени суток
соорентируйте пожалуйста как такое может быть, что дата которая пишется в КХ и функция toMonday от этой даты - разные.
SELECT
date,
toMonday(date) AS tomonday,
count()
FROM events_tv21
GROUP BY date
┌───────date─┬───tomonday─┬────count()─┐
│ 1974-01-11 │ 1974-01-07 │ 1 │
│ 2017-08-15 │ 2017-08-14 │ 1 │
│ 2017-08-27 │ 2017-08-21 │ 1 │
│ 2017-09-02 │ 2017-08-28 │ 40 │
│ 2017-09-15 │ 2017-09-11 │ 48 │
│ 2017-09-16 │ 2017-09-11 │ 1 │
│ 2017-09-21 │ 2017-09-18 │ 1 │
│ 2017-10-13 │ 2017-10-09 │ 3 │
│ 2017-10-16 │ 2017-10-16 │ 1 │
│ 2017-11-12 │ 2017-11-06 │ 2 │ -
│ 2017-12-10 │ 2017-12-04 │ 1 │
│ 2018-01-01 │ 2018-01-01 │ 2155210203 │
│ 2018-01-02 │ 2018-01-01 │ 2267525304 │
│ 2018-01-03 │ 2018-01-01 │ 1886837768 │
│ 2018-01-04 │ 2018-01-01 │ 1459539656 │
│ 2018-01-05 │ 2018-01-01 │ 1488519391 │
│ 2018-01-06 │ 2018-01-01 │ 1434134562 │
│ 2018-01-07 │ 2018-01-01 │ 1471809615 │
│ 2018-01-08 │ 2018-01-08 │ 1641828748 │
И подскажите как сделать детач партиции если
ENGINE = MergeTree PARTITION BY toMonday(date) -
ALTER TABLE table DETACH PARTITION '2018-01-08', что вас удивляет в toMonday, она возвращает дату "понедельника" недели в которую попала ваша дата, т.е. они действительно могут быть разными
-
-
toMonday это такой toStartOfWeek. неделя в разных местах может начинаться с разных дней, в clickhouse неделя начинается с понедельника. и чтобы не путать лишний раз пользователей, функция называется соответственно.
-
-
-
-
-
Joined.
-
Joined.
-
Ребят, в чем может быть причина. Загружаю в КХ данные из Яндекс Директ. Но в КХ они отличаются от тех, что я скачиваю. Но не все отличается, а только поле Cost. Кол-во строк одинаковое.
-
на скрине, разница видна в поле cost_differend.
cost_x эталонные, cost_y это данные в КХ -
Возможно меньше разрядности в созданной вами таблице или не та знаковость. Число скастилось.
-
в cost_differend данные поделены на 1млн. в исходных столбцах забыл сделать
-
Скорее всего типы данных. Проверьте что они подходят.
-
-
-
ага быстро)
-
у меня 10 гб это занимает секунду
-
это понятно)хочется знать, когда без optimze table сделается
-
После Мержа
-
-
-
-
-
-
-
надо померить это
-
Это зависит ещё и от интенсивности записи.
-
Тут правильный ответ: "когда-нибудь"
-
-
-
-
А зачем? Почему просто не оставить это самому СН?
-
-
неизвестно когда он это сделает, а если данные нужны сейчас
-
-
Берите с доагрегацией
-
-
-
-
-
-
-
-
Потому, что это должно работать в паре с агрегатными функциями, т.к. фоновое слияние не гарантируется
-
А ещё optimize final может не сработать вообще и без предупреждения
-
Например, если места на диске не так много, как было раньше
-
Правильно делать с group by)
-
это нюансы уже, по мне кейс этого движка простой - куб по индексу для рассчета
-
-
-
мне перед запросом делать груп бай по айдишнику надо чтоли?)
-
-
-
-
-
-
Потому что CH видится серебряной пулей. И с каждой новой функцией блестит все сильнее.
-
-
вы куба использовали? вот это прям оно, только без процедур
-
-
-
-
-
Я примерно представляю как работает ClickHouse и рекомендую вам не полагаться на OPTIMIZE, а доагрегировать результаты не думая был мерж или нет
-
спасибо
-
-
-
Это оконные функции ?
У СН их нет но посмотрите в доках, там есть нечто похожее на то что вам нужно. -
вот именно такой чтоб общее в соседней колонке выводило нет
-
arrayCumSum
sumif
Не то? -
-
-
-
вчера было, runningDifference и runningAggregation кажется
-
так нечестно, вчера 343 была последняя :)
-
😂😂😂
-
динамично развивающийся продукт
-
-
-
-
1.1.54337
-
-
У вас же написано было что группируете, да это и не важно, всёравно эти функции не дадут вам нужного результата
-
И движок и функции, т.е. чтоб сходить в MySQL не обязательно таблицу создавать
-
просто у меня на 1.1.54342 на CREATE TABLE ругается DB::Exception: Unknown table engine mysql. Может в конфиге чего поправить ещё надо?
-
-
yandex/ClickHouse
ClickHouse is a free analytic DBMS for big data.
-
огромное спасибо :)
-
-
А разве они не в рамках сессии живут?
-
табикс не умеет сессии явно, можно попробовать указать как доп.параметр при подключении
-
-
Подскажите, пожалуйста, ещё. Создал таблицу, пароль к БД - пустая строка. при попытке получить данные из таблицы возникает ошибка: Can't connect to MySQL server on '3306' (22 "Invalid argument") ((nullptr):0), e.what() = mysqlxx::ConnectionFailed Какой аргумент ему может не нравиться?
-
А как создали? Есть пример ?
-
-
-
-
я тормоз :( спасибо :)
-
Joined.
-
Добрый день. При выполнении несколько раз одного и того же запроса с ANY LEFT JOIN получаем каждый раз абсолютно одинаковый результат, то есть соединение происходит одинаково, не смотря на то, что в правой таблице присутствует более одной записи для каждого значения поля, по которому делается join.
Подскажите, пожалуйста, можно ли как-то добиться, чтобы каждый раз join выполнялся по-разному - то есть из правой таблицы выбиралсь каждый раз разные записи? -
-
-
Может быть попробовать правую таблицу в подзапросе отсортировать по рандому?
-
у нас каждый раз одинаково получается
-
пробовали, не помогает
-
-
-
-
-
rr dns на КХ 😂
-
-
таблицы есть - логин пароль писал - но убрал потом, сейчас там без пароля все
-
может быть, сначала надо добиться, чтобы в подзапросе рандомно данные выдавались?
-
а вот у меня например, если в подзапросе указать ORDER BY rand(), выдает случайным образом
-
задача состоит в генерации тестовых наборов данных
-
да, результат подзапроса сортируется случайным образом, но результат join'а всё равно тот же самый
-
у вас any left join выдает разный результат?
-
-
-
хотя нет, вы правы
select id, str from (select 1 as id) ANY LEFT JOIN (select 1 as id, arrayJoin(['a','b','c','d','e']) as str) USING(id)
всегда выдает 1, а -
-
-
-
-
-
-
-
-
-
-
-
Первая попавшаяся в файле как правило неизменна до перемешивания файла, а добавленные записи отсортированные по ключу редко премешиваются.
В данном случае первая попавшайся не есть случайна. -
-
-
-
-
😅
-
-
Joined.
-
Можно будет добавить функцию anyRandom, чтобы можно было в GROUP BY использовать.
-
Можно ли как-то сказать SELECT every 1000s или что подобное? Данных много и достаточно выборки каждого тысячного значения
-
-
Если сэмплирование не задано, то можно просто WHERE rand() % 1000 = 0. Это менее эффективно, так как читаются все данные.
-
Можно argMax(x, rand()).
-
ага, кажется понимаю. Спасибо!
-
-
-
Делаю по мануалу https://clickhouse.yandex/docs/en/table_engines/kafka/ . Сообщения в кафку уходят, clickhouse их не видит (из доки SELECT * FROM queue LIMIT 5;).
В логах CH:
2018.03.07 20:08:15.894921 [ 3 ] <Trace> StorageKafka (queue): Committing 0 messages
Если к кафке подключиться, например, kafkacat, то сообщения видны.
Куда копать? -
+ таже ботва, не разбирался, но плюсую
-
Joined.
-
Только вчера сам пробовал. Похоже, что оффсет сдвигается после запроса. Если сделать select из Kafka engine, показывает только новые сообщения.
Если после завешения запроса напродюсить сообщений - вычитает их при следующем селекте.
BTW, @milovidov_an, можно ли предусмотреть вычитывание данных из топика при указании новой consumer group с первых, а не с новых, как сейчас ? -
Пробовал после завершения запроса продьюсить новые сообщения, CH их не видит.
Попробую с утра, на свежую голову, заново собрать связку. -
Я уже не помню, как устроен движок Kafka. Если я правильно помню, offset сохраняется в Kafka и сдвигается после чтения. Чтобы читать с начала, надо его сбросить?
-
@milovidov_an если вас не затруднит прокомментировать - я столкнулся с странной ситуацией, пишем в КХ через HTTP POSTом, в том числе создаем таблицы, например tinylog, так вот периодически create table внезапно может занять до 40 секунд (судя по логам KX сервера), причем следующий подобный квери заходит моментально. Версия clickhouse-server-1.1.54343-1.el7.x86_64
-
А где всё это происходит - на физическом сервере, на виртуальной машине? Какая дисковая подсистема, какая ФС? Что происходит на сервере во время этих 40 секунд? Можно посмотреть нагрузку на диски (iostat -dmx 1, dstat), а также la. Если не очевидно, то можно посмотреть с помощью strace -f -tt -T - в каком именно месте тратится это время.
-
Также вы можете снять стек трейс всех потоков во время этих 40 секунд: sudo gdb -batch -ex 't apply all bt' -p $(pidof clickhouse-server) - читать его будет трудно, но вы можете скинуть на pastebin.
Если очень часто делаются операции с метаданными, то обратите также внимание на системную метрику ContextLockWait - количество одновременных потоков, ожидающих глобальной блокировки. В один момент времени смотреть бессмысленно, лучше есть есть график в Графите, желательно посекундный. Настроить выгрузку в Графит можно в config.xml, секция graphite. - 08 March 2018 (22 messages)
-
@milovidov_an Cпасибо за комментарий, будем искать, как говорится.
-
Можно, нужно в конфиге указать настройку auto.offset.reset, там есть недокументированная возможность как задавать настройки https://github.com/yandex/ClickHouse/blob/master/dbms/src/Storages/StorageKafka.cpp#L201
т.е. примерно так:
<kafka>
<key>value</key> <!-- точки в ключе заменять на _ (auto_offset_reset)-->
</kafka>yandex/ClickHouseClickHouse is a free analytic DBMS for big data.
-
И сами настройки которые можно задать https://github.com/edenhill/librdkafka/blob/master/CONFIGURATION.mdlibrdkafka/CONFIGURATION.md at master · edenhill/librdkafka
The Apache Kafka C/C++ library. Contribute to edenhill/librdkafka development by creating an account on GitHub.
-
Зависит от настроек консюмеров - если кафку еще не видела такую группу, то чтение может начаться как с самого раннего, так и с последнего сообщения. Хорошо бы иметь возможность указать это при создании "таблицы"
-
Спасибо
-
Единственный нюанс в том, что это глобальная настройка
-
-
-
-
Joined.
-
коллеги, а как вы вставляете одинарные кавычки в строках?
-
\'
-
yandex/ClickHouse was tagged: v1.1.54358-stable
Link: https://github.com/yandex/ClickHouse/releases/tag/v1.1.54358-stable
Release notes:
v1.1.54358-stable -
-
git tag -m ?
-
ага
-
-
-
lomik/carbon-clickhouse was tagged: v0.8.1
Link: https://github.com/lomik/carbon-clickhouse/releases/tag/v0.8.1
Release notes:
### Bugfix
* Fix panic [#16](https://github.com/lomik/carbon-clickhouse/issues/16)Release v0.8.1 · lomik/carbon-clickhouseBugfix Fix panic #16
-
У нас пока всё сложнее - собирать changelog занимает целый день, а английская версия иногда пишется не сразу, а отдаётся переводчику. Хотелось бы более частые релизы, но последнее время, наоборот, просадили до месяца.
-
-
- 09 March 2018 (73 messages)
-
Возможно тут есть те кто сталкивался с большими объемами данных mysql, суть проблемы, нужно скопировать данные из таблицы А, в таблицу B INSERT INTO B .... SELECT FROM A; слишком медленный, 1 млн данных обрабатывает за 3 минуты, есть варианты как это сделать быстрее?
-
делать в цикле маленькими пачками не пробовал?
-
По сути это операция mysql, и тут пачки не нужны, наверное.
-
1) Вероятно это связано с ограничением по памяти, во время переноса MySQL не позволяет использовать оперативки больше чем можно (или ее физически не хватает).
В таком случе выполнение 100 последовательных запросов по фильтру по какому-то ключу может работать в 10-ки раз быстрее, чем одного запроса без фильтра.
Пример (выдуманный): у нас есть БД с 10 месяцами. В каждом месяце 1000000 строк. Выгрузка всей БД будет проихсодить дольше, чем если мы сделай 10 полсдеовательных выгрузок по ключу month.
Такая же проблема может быть и при сгоне данных в CSV файл и последущей его загрузкой. Тут узкое место в запросе на получение данных, которому не удатеся свободно уместиться в оперативке.
2) В табилце, в котороую копируются данные, имеет смысл отключить индексы перед копированием, если это еще не сделано -
2) В табилце, в котороую копируются данные, имеет смысл отключить индексы перед копированием, если это еще не сделано
Индексы отключил, забыл добавить, движек Innodb -
-
А не смотрели куда упираетесь, что с диском?
-
сейчас посмотрю настройки.
-
Триггеров случайно нет?
-
-
-
Нету триггеров
-
Вообще посмотрите для начала настройку innodb_flush_log_at_trx_commit. Поставьте значение в 0. Предварительно вообще почитайте про эту настройку, если не хотите потерять данные. Так же индексы очень сильно убивают скорость при вставке данных в таблицу. Желательно убрать индексы в таблице в которую идет запись.
-
Можно еще попробовать запустить mysql_tuner :) банально, но поможет произвести базовую настройку, которой хватает в большинстве случаев
-
Все таки не убрать, а выключить перед большой вставкой, и включить после вставки
-
Я это и подразумевал :) не так выразился.
-
innodb_flush_log_at_trx_commit=1
-
стоит
-
сорри не тот чат (
-
Ребят, посоветуйте как решить задачу: разрабатываю сейчас инструмент для сео аналитики, необходимо в КХ писать данные по источникам трафика с привязкой к урлу страницы сайта, но урл может поменяться. Саму смену урла я смогу отловить по 301 редиректу, но вот как организовать хранение данных? Мускул уже не справляется(((
-
А в MySQL вы это как решаете?
-
-
Ы. Все можно назвать базой данных, если у тебя достаточно мощностей
-
-
https://github.com/Menta2L/rspamd-elastic/ - мне тут чувак какой-то вот такое с помощью elastic/kibana сделал. вопрос заключается в том, можно ли подобное сделать на сабже и если можно, то в какую сторону смотреть?Menta2L/rspamd-elastic
Metadata collector for rspamd using elasticsearch backend - Menta2L/rspamd-elastic
-
Вроде как они все-таки для разного. ClickHouse для аналитики, а ElasticSearch — прежде всего для полнотекстового поиска (не по логам, а просто полнотекстового поиска).
-
-
И держите их в MySQL, к КХ подключите как словарь
-
-
а зачем в кх вообще урл хранить?)
-
только id
-
а урл внешний справочник
-
-
Да
-
вообще выходной сегодня)
-
-
-
-
-
Есть словарь ip_trie, но проблема с IP в том, что привязка к региону/городу со временем для IP может измениться и исторические данные "поедут", вероятность небольшая, но она есть
-
К сожалению вероятность сто процентная, что они поедут, просто поедет со сто процентной вероятностью небольшой процент данных.
-
-
Пример
<?xml version="1.0" encoding="UTF-8"?>
<dictionaries>
<dictionary>
<name>GEOIP</name>
<source>
<file>
<path>geoip.tsv</path>
<format>TabSeparated</format>
</file>
</source>
<lifetime>300</lifetime>
<layout>
<ip_trie />
</layout>
<structure>
<key>
<attribute>
<name>prefix</name>
<type>String</type>
</attribute>
</key>
<attribute>
<name>Country</name>
<type>String</type>
<null_value />
</attribute>
<attribute>
<name>City</name>
<type>String</type>
<null_value />
</attribute>
</structure>
</dictionary>
</dictionaries>
В файле
87.250.250.0/24 Russia Moscow -
-
Можно ли заставить clickhouse возвращать ошибку если при вставке данных primary key совпадает с имеющимся в таблице?
Если да, то киньте плих ссылку на документацию где почитать. -
Такого встроеного функционала нет
-
я вот много чего пропустил, хочу уточнить: сейчас есть готовая рекомендация по тому, как организовать хранение на серверах с большими дешевыми шпинделями под старые данные + сервера с SSD под новые винты.
-
Реплики/distributed. Готового нет.
-
Почему SELECT ID FROM table_name WHERE ID = 1520199205783912726 работает, а SELECT ID FROM table_name WHERE ID >= 1520199205783912726 не работает и возвращает совсем не то.
Где почитать на тему правильных выборок из БД? -
-
Пока нет. Можно только вручную (неудобно) заменять отдельные куски на симлинки.
Удобная реализация есть в планах: https://clickhouse.yandex/presentations/meetup11/news_and_plans/#25 -
Возвращает не то.
-
-
В базе тысячи ID, ID=1520199205783912726 предпоследний. То есть ID>=1520199205783912726 должен вернуть 2 записи. Но возвращается Showed first 10000.
-
-
да
-
Если коротко о таблице:
CREATE TABLE IF NOT EXISTS table_name (
ID Int64 DEFAULT CAST(0 AS Int64),
IDDate Date DEFAULT CAST(now() AS Date),
…
) Engine=MergeTree(IDDate, (ID, IDDate), 8192); -
-
Скорее всего да. Я только начал изучать clickhouse. Подобное подсмотрено в каком-то из скриптов.
Но проблема не в этом, а в том что сравнение = работет, а сравнение < или > для Int64 не работает.
Почему? -
-
CREATE TABLE IF NOT EXISTS zz
(
ID Int64 DEFAULT CAST(0 AS Int64),
IDDate Date DEFAULT CAST(now() AS Date)
)
ENGINE = MergeTree(IDDate, (ID, IDDate), 8192)
insert into zz (ID) values (1520199205783912725)
insert into zz (ID) values (1520199205783912726)
insert into zz (ID) values (1520199205783912727)
SELECT *
FROM zz
WHERE ID >= 1520199205783912726
┌──────────────────ID─┬─────IDDate─┐
│ 1520199205783912726 │ 2018-03-09 │
└─────────────────────┴────────────┘
┌──────────────────ID─┬─────IDDate─┐
│ 1520199205783912727 │ 2018-03-09 │
└─────────────────────┴────────────┘ -
-
Подсказка про UInt64 помогла
Вот так вот заработало:
WHERE ID > toInt64(1520326535681143339) -
-
Int64 это time.Now().UnixNano() так как нужно идентифицировать с большой точностью, просто DateTime не подходит.
-
-
А у вас версия ClickHouse насколько старая? Может быть такое, что где-то на 1.5 года устарела?
-
Connected to ClickHouse server version 1.1.54342.
Для тестов, я сейчас запускаю ту версию что в докере yandex/clickhouse-server:latest -
Это Ок.
-
Супер!
-
Вам odirect помогает? Кеш не вымывает?
-
Если про пункт "использование O_DIRECT для больших мержей", то это ещё не реализовано - тоже в планах. И нужно как раз для того, чтобы не вымывать кэш. Для обычных запросов O_DIRECT по большей части мешает.
-
Мы как-то раз решили в видеоархиве поиграть с fadvise. Было больно и стыдно делать такое не собрав статистику :)
-
Joined.
- 10 March 2018 (14 messages)
-
https://hub.docker.com/r/yandex/clickhouse-server/builds/bqnfjwixqyq4xwdpgsjdcfk/
а кто нибудь может починить официальный образ в докерхаб? -
Joined.
-
Ребята, спасибо за чейнджлог! Жирный апдейт получился :)
-
Вот кстати и он https://github.com/yandex/ClickHouse/blob/master/CHANGELOG_RU.md
Спасибо! -
его бы закреплять в чате
-
Зачем, он на GitHub есть, а его адрес и так все знают ;)
-
-
-
Joined.
-
Он уже почти два месяца как сломан. Видимо сам не починишь - никто не починит 😕 Вот небольшая подсказка как самому собрать: t.me/clickhouse_ru/43923Vladislav Rassokhin in ClickHouse не тормозит
Спасибо за наводку. После некоторых плясок с бубном (отката коммитов 9ec8a576 и 2d9f6611 стоя на тэге v1.1.54353-testing) это вполне удалось. Неудивительно что официального образа 343 версии нету т.к. он не собирается на этом теге (первый коммит) а когда собирается то криво работает (фэйлится ipv6, второй коммит). В итоге в проде получился нормальный 52343 с быстрыми запросами, всем спасибо.
-
-
Привет! Нигде не нашел, может кто-нибудь знает. Есть ли какая-нибудь возможность заставить кх выполнять UNION ALL локально при выборке из distributed таблицы? Т.е. чтобы при запросе на шарды отправлялись локальные имена таблиц с union внутри, а не по одному запросу из всех подзапросов?
-
-
Всем привет. Мы подвели наш java мостик для кликхауса к пред. релизным версиям. Напомню, он получился путем выкусывания из внутренних проектов. Основная задача состоит в том чтоб гнать как можно больший объем данных внутрь базы, с чем обычный clickhouse-jdbc не очень справляется, а также простом и удобном внешнем интерфейсе, скрывая весь ад и вакханалию от разработчика. В планах на Q2 есть некоторые доработки, которые можно перенести из private-api в опенсорс, но приоритет может зависеть от востребованности, поэтому смелее кидайте ваши тикеты.
Ссылка на посмотреть/скачать: https://github.com/Mangelion/achord
Для любителей циферок - быстрее, это x2 в обычных режимах и x3-4 в ряде угловых для clickhouse-jdbc случаев.Mangelion/achordFast reactive bridge between Java applications and Yandex.ClickHouse database - Mangelion/achord
- 11 March 2018 (93 messages)
-
@neiwick ваш мостик также на http работает?
-
Нет, на native протоколе
-
ого, звучит интересно
-
но пока четсно говоря и clickhouse-jdbc хватает
-
а что имеется ввиду под угловыми случаями?
-
-
запись 64 битных значений создает огромное gc-pressure, что просаживает работу всего приложения.
-
JDBC ещё не научился асинхронности, обещали в Java 9 но похоже отложили, т.к. нет в proposal даже на 11. Есть мысли сделать асинхронный драйвер с собственным API, и уже сверху создать api для работы по спецификации JDBC
-
-
-
Добрый день! Я только недавно начал работать с КХ и еще не все нюансы для меня очевиды. И если то, как он кушает ЦПУ меня больше не удивляет, то к работе с памятью у меня есть вопросы.
Имеем:
12 core
16gb RAM
100GB SSD
БД весит ~5GB
строк там под 500 тыс
И вроде бд совсем маленькая и должна не так много кушать, но она съела все 16гб RAM из которых 11гб уши в кэш.
Насколько это нормально или где я что-то недоконфигурировал? Бездумно увеличивать память, не понимая почему он так её жрет, совсем не хочется. -
-
-
-
cache
-
яннп
-
это нормально, ОС будет стараться все запихнуть в кэш
-
-
Главное, чтобы за обналичку не предьявили. Бадум-тс!
-
Ос сама сбросить кэши
-
чет как-то не стремится она этого делать. Я думал, что причина в самом КХ
-
да не жрет она столько реусрсов, в прямом понимании этого слова
-
-
Игнорить
-
чет такое себе отношение)
-
Почитать как линукс управляет памятью и игнорить
-
В общем, да, у вас всё в кеше и это норм. Собственно, так и должно всё работать. Это кеш ОС, а не самого кликхауса, так что если память кому-то ещё на машине потребуется, то ОС её радостно отдаст.
-
Докинуть можно, но ос опять все в кэш станет, либо поделится им с другим процессом потом. Но те.е же там не нужны другие жирные процессы
-
Окей. Я думал, что это именно КХ
-
-
-
+++
-
Подскажите, содержимое исходного dynamicConfigFile в zookeeper 3.5 должно меняться при добавлении сервера командой реконфигурации?
В документации написано что да, а у меня - не меняется, хотя сервер входит в кластер.
Но у меня докер, может с правами что не то (хотя, права на файл выдавал). -
Исходные никогда не меняется, должны создаваться новые файлы типа *.001212 *.012121c где постфикс - версия глобального для кластера конфига.
докер зло для ZK -
а можно подробнее почему зло? тоже используем зукипер в контейнере
-
Да, видел похожие новые. Спасибо.
-
Приветствую. Не могли бы подсказать почему название директорий, в который КХ хранит данные стали называться с начала unix time. То есть раньше все было хорошо и они назывались
ls -1 clickhouse/data/mydb/mytable/ | tail -1
20180101_20180128_4075_4302_3
20180101_20180131_4303_4507_3
(год, месяц, день)
а сейчас начали записываться как
ls -1 clickhouse/data/mydb/mytable/ | head -3
19700101_19700101_163090_225967_30
19700101_19700101_1_75376_31
19700101_19700101_225968_226972_14 -
-
Вероятно у вас есть данные с "нулевой" датой
-
-
При создание таблицы должен был быть указан стобец который использовать для даты по которой как раз название файлов и указываться
-
если я сейчас сделаю show create table то что мне там нужно искать? Какой признак должен быть?
-
-
-
-
Хотелось бы в документации иметь больше информации о том, при каких условиях нормально работает topK . Потому что в моем случае (2 млрд записей и 30 млн уникальных значений) topK выдает, конечно, довольно часто встречающиеся значения, но они далеки от настоящего топа, который считается через ORDER BY count(). Но запрос с честной группировкой жрет уж больно дофига оперативки. Записи распределены по-разному, но в основном они распределены более-менее равномерно.
-
видимо, из system.parts
-
Я и сам не помню формулы про точность алгоритма topK. В документации есть ссылки на статьи... А ещё есть константа в коде (наверное её надо превратить в задаваемый пользователем параметр), что мы выделяем место для подсчёта в три раза больше, чем k.
// Allow NxK more space before calculating top K to increase accuracy
#define TOP_K_LOAD_FACTOR 3 -
Вот у меня такое наблюдаетс я далеко не всегда
К примеру, закешировано 60гб, запускаю новую прилагу и та..падает по оом -
Или лезет в своп
-
Надо смотреть, как память распределяется, падает-то не из за кэша ос, а из-за того, что приложение запросило больше чем есть всего памяти
-
Не соглашусь, я знаю, что прилаге нужно 20гб
-
То есть если я принудительно дропаю кеш, то все работает без проблем
-
Ребят. Кто-то ловил подобное?
Application: DB::Exception: Cannot create table from metadata file /var/lib/clickhouse/metadata/cursometr//learners.sql, error: DB::Exception: The local set of parts of table learners doesn't look like the set of parts in ZooKeeper. There are 0 unexpected parts (0 of them is not just-written), 0 unexpectedly merged parts, 0 missing obsolete parts, 4 missing parts, stack trace -
-
Интересно, но без цифр непонятно. Не "всегда работает" плохо звучит
-
Причем сервер падает и не поднимается вообще.
-
Как словлю еще раз, будет пруф :)
-
Да я верю, что падение есть, просто надо выяснить как именно оно происходит, не может же такого быть, чтобы в одном случае линь решал в оом уйти, в другом в свап, а в третьем все ок. Ну т.е. наверняка там разные детали есть
-
Если только не edge case с багом
-
В NUMA-системах очень интересно (нет) распределяется память — обычно она распределяется для каждого NUMA-узла независимо. То есть, если в системе свободно 60 Гб памяти, то оно может быть, к примеру, быть распределено как 10 Гб на одном NUMA-узле и 50 Гб на втором. Если процесс запустится на первом, то он залезет в своп
-
Конечно, в Linux (и наверное в других системах) есть механизмы борьбы с этим, но на такие грабли в принципе можно наступить.
-
+
-
Тем не менее, можно для прилаги на одной нуме выделить память на другой
Работать будет медленее, но будет
Эти мисы по выделению даже посмотреть можно -
Можно выключить swap и включить numa interleave для каких-нибудь приложений, которые используют много памяти (правда я этого не делал, у меня всё и так нормально работает; но есть известная проблема, если программа выделяет большую часть памяти из одного потока - возможен OOM, когда ещё есть много free+cache памяти).
-
Со своей проблемой разобрался. /var/lib/clickhouse/flags/force_restore_data спас меня. Непонятно почему такая ситуация возникла :(
-
Это сообщение как правило не говорит о каких-то проблемах. Посмотрите в документации флаг "force_restore_data".
-
Спасибо за ответ! Вспомнил про него после того как осмыслил в чем проблема )
-
yandex/ClickHouse was tagged: v1.1.54362-stable
Link: https://github.com/yandex/ClickHouse/releases/tag/v1.1.54362-stable
Release notes:
v1.1.54362-stableyandex/ClickHouseClickHouse is a free analytic DBMS for big data.
-
А где можно почитать changelog?
-
На гитхабе
-
Update CHANGELOG_RU.md · yandex/ClickHouse@a01a4dd
ClickHouse is a free analytic DBMS for big data.
-
Ребят, нужно перекодировать, к примеру символ с %22 в "
Я так понимаю это возможно сделать через функцию convertCharset(s, from, to)
Но какие кодировки поставить не знаю, пробовал по разному. Подскажите. -
Эта "кодировка" не относится к charset-ам, и поэтому функция "convertCharset" не подходит. Но зато для неё есть другая функция:
SELECT decodeURLComponent('a%22b') -
спасибо
-
А не подскажете вот какой момент. Настраиваю репликацию из mysql в clickhouse (https://github.com/Altinity/clickhouse-mysql-data-reader#rpm-installation) в базе MySQL есть колонка только с DateTime типом данных, а для движка MergeTree требуется просто Date. Что посоветуете?GitHub - Altinity/clickhouse-mysql-data-reader: utility to read mysql data
utility to read mysql data. Contribute to Altinity/clickhouse-mysql-data-reader development by creating an account on GitHub.
-
toDate()
-
вот так
engine = MergeTree(…, toDate(requestdate),…)
Вы имеете ввиду? -
У меня такая картина на графиках была когда пихал данные в КХ в рилтайме по строчке за раз (я тогда только его установил). Я быстро понял что сделал фигню, остановил, КХ за некоторое время переварил поступившие данные и потребление памяти упало с 40гб до 2гб.
-
Попробуйте расширенный синтаксис, где указывается PARTITION BY, ORDER BY. В PARTITION BY пропишите:
PARTITION BY toYYYYMM(requestdate) -
нееее, там целери и и редис и он собирает по 1000 строчек и делает один инсерт
-
В этом случае наличие столбца с датой в таблице не требуется.
Ещё один способ - можно объявить столбец с датой так:
date Date MATERIALIZED toDate(requestdate)
(я не уверен, что утилита для репликации из MySQL поддерживает такие столбцы) -
Вот такое сообщение получил
ENGINE = ReplicatedMergeTree(..., PARTITION BY toYYYYMM(requestdate), ...);
Expected one of: AND, AS, BETWEEN, NOT LIKE, LIKE, GLOBAL IN, IN, GLOBAL NOT IN, NOT IN, Comma, Dot, Arrow, QuestionMark, alias, IS, OR, token -
-
Вопрос разработчикам loghouse - что будет, если в исходном json в каком-то ключе приходит вложенный json? Судя по конфигу fluent - этот ключ просто пропускается и не попадёт в CH.
Сейчас думаю над написанием некоего loghouse-proxy на go, который будет писать в CH в loghouse-совместимом формате и вот наткнулся на такое поведение. -
получилось сделать путем создания еще одной колонки, которая данные берет из существующей колонки и форматирует ее в дату
CREATE TABLE PROJECT_TRASH
…
requestdate DateTime,
requestdate_date Date DEFAULT toDate(requestdate),
…
ENGINE = ReplicatedMergeTree(..., requestdate_date, ...); -
/stat@combot
-
/stat@combot
-
/stat@combot
-
/stat@combot
-
Можно было и без этого же. Кастомное паотицирование дало бы тот же эффект без лишней колонки
-
-
Не могу понять в чем дело?
Chrome 65, Tabix Build 18.02.2
галки HTTP Base auth и Include Credentials никак не влияют на наличие или отсутствие хедера Authorization в запросе, те его там нет (проверяется tcpdump)
Никто с такой проблемой не сталкивался? - 12 March 2018 (226 messages)
-
-
Если таблички уже реплицируемые, то нужно просто создать такие же на соседнем сервере. Если не реплицируемые, то будет простой в момент конвертации.
-
-
-
-
-
-
Joined.
-
Реплики та блиц будут консистентны, причем тут нет понятия "слейв" можно писать в любую копию таблицы, которая имеет того же путь в зукипере
-
Да
-
Разные наборы данных только в таблицах с разными путями в зукипере, но при условии одинаковых схем, можно между ними перемещать партиции, как в ссылке выше
-
А они потом не решат среплицироваться ?
-
-
Они это начнут делать сразу
-
А как правильно сделать, чтобы не начали ?
-
-
На сколько я знаю, в репликах могут быть только одинаковые наборы данных
-
Привет!
Есть запрос вида:
>SELECT ... INNER JOIN (SELECT ... WHERE id IN (A)) USING id WHERE id IN (A)
- вместо (A) может быть подзапрос на получение IDs (запрос к другой БД или запрос к удаленной таблице)
- если не указывать в каждом JOIN - IN(A), то в память грузятся все записи
- выборка (A) не кешируется, таким образом, если написать IN(A) N раз, то будетзатрачено в N раз больше времени
Вопрос:
- Можно ли как-то переписать запрос, чтобы USING id накладывался как условие для внешней табилцы (чтобы можно было отказаться от IN(N) везде кроме внутренних JOIN)
- Либо можно ли как-то заставить кешировать подзапрос (A), чтобы он выполнялся всего один раз -
@milovidov_an , @kochetovnicolai , не могли бы вы прояснить ситуацию? Есть ли "легальный" способ держать в одной из реплик расширенный набор данных ?
-
Если вы имеете ввиду разный набор таблиц то да, в ClickHouse репликация сделана на уровне таблиц, а не всего сервера.
-
Ручное секционирование через таблицы и формирование нужных наборов данных через Merge/View
-
Я имел в виду разный набор партиций в таблицах
-
Нет конечно, в реплике будет полная копия
-
-
Если clickhouse-datasource для Grafana
-
-
ну да типа такого, чтобы данные брал из кликхауса и рисовал красивые графики
-
GitHub - Vertamedia/clickhouse-grafana: Clickhouse datasource for grafana
Clickhouse datasource for grafana. Contribute to Vertamedia/clickhouse-grafana development by creating an account on GitHub.
-
-
-
-
что можете посоветовать? с учетом того, что они могут почти все фильтровать. т.е. по дате, по другим показателям, но в пределах только своих сайтов
-
-
Ещё поведение зависит от настроек overcommit_memory и overcommit_ratio. И дефолт там не самый очевидный.
-
Вхардкодте для каждого из них свой домен, остальное оставьте переменными для фильтров
-
можно еще вью для каждого домена сделать)
-
и права выдавать только на нее
-
-
или нельзя?
-
-
Для View пока нет проброса условий в WHERE, может достаточно накладо получиться
-
печально
-
а когда odbc движок и alter table delete планируется?)
-
-
в stable ?
-
-
CREATE TABLE t_odbc(columns....) Engine=ODBC('DSN', database, table)
-
надо обновлятся значит
-
а он where умеет прокидывать?
-
-
IN и LIKE пока не умеет, вот список того что может прокинуть https://github.com/yandex/ClickHouse/blob/9c0bbaaa4773a2e1fad2c45c631d49cf94d524dc/dbms/src/Storages/transformQueryForExternalDatabase.cpp#L22yandex/ClickHouse
ClickHouse is a free analytic DBMS for big data.
-
-
а можно использовать odbc движок для импорта?
-
написать insert .. select from odbc
-
или будет печально?
-
-
-
Должно работать, насколько оно будет печально можете проверить ;)
-
-
может Enum подойдет? и String и Int одновременно)
-
лучше UInt8
-
-
-
String состоит из длины строки uvarint и самих данных, в вашем случае под 0..5 уже нужен 1 байт + сами данные. Все это конечно пожмется, но тут вопрос строки это у вас изначально или цыфры, если строки берите FixedString чтоб не конвертировать туда-сюда
-
-
-
-
Это поиск каналов для спама или что?
-
-
Нет, просто у меня появилась эта кнопка... не знал что делает
-
-
-
hosts кривой :)
-
Поэтому сам на lo не подключается
-
-
-
уже наступал с подобным (не в кх) - localhost в ipv6, а слушает ipv4 или наоборот.
-
думаете hosts винды влияет на консоль вируталки?
-
Я такое ловил когда hosts правил, на дефолтном подключается сразу
-
это где то надо прописать?)
-
clickhouse-client -h 127.0.0.1
-
та же ошибка
-
А порт то слушается?
-
как проверить? почитал про WSL - пишут что тут фактически порты винды надо проверять а не линукса =/
-
netstat и проверять
-
только синтаксис вызова уточнить
-
netstat -pan | grep 9000
-
-
Очевидно, сервер не запущен
-
-
значит, не запускался
-
ну или прав на запись в логи нет
-
Ребята из Яндекс Метрики/Директа, в каком типе словарей вы храните атрибуты из Яндекс Директа, например названия кампаний и т.п?
-
clickhouse-server --config-file=/etc/clickhouse-server/config.xml
Include not found: clickhouse_remote_servers
Include not found: clickhouse_compression
Logging trace to /var/log/clickhouse-server/clickhouse-server.log
Logging errors to /var/log/clickhouse-server/clickhouse-server.err.log
Logging trace to console
Poco::Exception. Code: 1000, e.code() = 0, e.displayText() = Exception: Could not determine local time zone: custom time zone file used., e.what() = Exception
вроде и ошибок нет на старте =/ -
-
зависит от размера этого вида данных. если меньше 100М, то hashed, если больше то cached
-
-
-
-
-
-
да так можно сделать
также можно на всех сервера remote_servers кластера прописать
и на всех серверах объявить distributed таблицы
чтение с любого сервера из distributed будет читать со всех таблиц доступных по кластеру с этого сервера
и запись тоже будет стараться на все шарды раскатить в соответсвии с ключом шардирования
сопровождать такое конечно геморойнее, но "типа надежность"
писать в локальную таблицу с движком семейства MergeTree, можно в обоих случаях -
-
-
-
-
А обмен тормозить этот ssl не будет?
-
Это баг или фича?
-
SELECT (intDiv(toUInt32(EventTimeStamp), 60) * 60) * 1000 AS t, SUM(octetDeltaCount * 8 /(60 * 1024 * 1024)) AS 14065241out FROM default.ipfix20180311 WHERE sourceLogin LIKE '14065241' GROUP BY t ORDER BY t ASC
Wrong number -
но в то же время SELECT
(intDiv(toUInt32(EventTimeStamp), 60) * 60) * 1000 AS t,
SUM((octetDeltaCount * 8) / ((60 * 1024) * 1024)) AS out14065241
FROM default.ipfix20180311
WHERE sourceLogin LIKE '14065241'
GROUP BY t
ORDER BY t ASC -
ок
-
octetDeltaCount
какой тип у колонки? -
octetDeltaCount UInt64,
-
как я понял смысл в 14065241out vs out14065241
-
для алиаса колонки
-
тут вопрос про то что AS 14065241out неправильно а AS out14065241 правильно
-
да
-
возьмите в кавычки
-
-
SELECT (intDiv(toUInt32(EventTimeStamp), 60) * 60) * 1000 AS t, SUM(octetDeltaCount * 8 /(60 * 1024 * 1024)) AS '14065241out' FROM default.ipfix20180311 WHERE sourceLogin LIKE '14065241' GROUP BY t ORDER BY t ASC
"понаделают кавычек" :D -
-
-
-
c ` работает - спасибо
-
Joined.
-
Joined.
-
-
-
-
Привет!
Есть запрос вида:
>SELECT ... INNER JOIN (SELECT ... WHERE id IN (A)) USING id WHERE id IN (A)
- вместо (A) может быть подзапрос на получение IDs (запрос к другой БД или запрос к удаленной таблице)
- если не указывать в каждом JOIN - IN(A), то в память грузятся все записи
- выборка (A) не кешируется, таким образом, если написать IN(A) N раз, то будетзатрачено в N раз больше времени
Вопрос:
- Можно ли как-то переписать запрос, чтобы USING id накладывался как условие для внешней табилцы (чтобы можно было отказаться от IN(N) везде кроме внутренних JOIN)
- Либо можно ли как-то заставить кешировать подзапрос (A), чтобы он выполнялся всего один раз -
Ребят, есть вопрос по graphite merge tree
-
"- Либо можно ли как-то заставить кешировать подзапрос (A), чтобы он выполнялся всего один раз" - сделай данные A в виде временной таблицы с движком Set
-
Joined.
-
Есть у меня данные хранящие в CH в graphite merge tree
-
d 2 nf,kbwf[ gj hfpltkmyjcnb
-
в 2 таблицах по раздельности
-
минутные аггрегаты
-
и 5-ти минутные
-
пример
-
-
-
то же значение из 5-ти минутной таблицы
-
так вот сам вопрос
-
какого у меня на 5-ти минутных аггрегатах значение больше чем на минутных
-
функция аггрегации - max
-
Joined.
-
@milovidov_an Добрый день, подскажи, пожалуйста: 1) есть какие-то планы по реализации Decimal - стоит ли ждать, например, в ближайшие полгода? или год? 2) куда/кому написать, если наша компания строит тиражируемый продукт на Clickhouse и мы желаем стать партнёром в части поддержки Clickhouse?
-
-
Если эта реплика относится к п. 1 моего сообщения, то да - я в курсе, именно поэтому спрашиваю: я же не знаю, может кто-то из коммитеров уже сидит и пишет (или собирается в ближайшее время написать) этот функционал, а если нет - то следующим моим вопросом будет такой - "нет ли концептуальных возражений по поводу того, что я попробую написать поддержку Decimal?"
-
Данные А - в каждом отедльном случае это разные данные
-
-
Можно:
1. использовать сессию (не каждый драйвер поддерживает). В рамках сессии временные таблицы вроде как изолированы (нужно проверить, могу ошибаться)
2. задавать для временой талбицы явно уникальное имя, что-то типа 'temp__table_a_' + request_id -
нельзя, в КХ нет CTE
-
Да, временные таблицы изолированы
-
Кто-нибудь пользуется AggregatingMergeTree с Nullable колонками? Помогите объяснить такое поведение агрегатных функций:
1) Если использовать агрегатную функцию напрямую, то она успешно сохраняет NULL и возвращает его как результат.
SELECT any(CAST(NULL AS Nullable(UInt8)))
┌─any(CAST(NULL, \'Nullable(UInt8)\'))─┐
│ \N │
└──────────────────────────────────────┘
2) Если разделить этот этап на две части (ну т.е. например сделать таблицу с колонками-состояниями и вьюху, которая будет доагрегировать их... по некоторой аналогии как cloudflare описывало в своей статье) то NULL пропадает начисто и превращается в 0 для чисел.
SELECT anyMerge(a) FROM ( SELECT anyState(CAST(NULL AS Nullable(UInt8))) AS a)
┌─anyMerge(a)─┐
│ 0 │
└─────────────┘
Судя по исходникам (https://github.com/yandex/ClickHouse/blob/486a498b9f6300ee432074cffdd889e485b5c1c1/dbms/src/AggregateFunctions/AggregateFunctionNull.cpp) такое поведение корректно. И почему "Aggregate function combinator 'Null' is only for internal usage" так сделано? вроде как этот комбинатор решил бы проблему если бы был доступен.
Есть варианты? -
Кстати, а что за продукт?
-
Пока не могу разглашать.
-
Кстати, да, не нашёл нигде информации, под какой лицензией распространяется CH?
UPD нашёл - надо бы сделать где-то явнее, чем в футере мелким шрифтом)))
https://github.com/yandex/ClickHouse/blob/master/LICENSEClickHouse/ClickHouseClickHouse® is a free analytics DBMS for big data. Contribute to ClickHouse/ClickHouse development by creating an account on GitHub.
-
-
Apache License 2.0 (Apache-2.0) Explained in Plain English - TLDRLegal
The Apache License 2.0 (Apache-2.0) summarized/explained in plain English.
-
-
OK, а что за компания? )
-
-
Суперсайт, спасибище
-
Запрос:
>CREATE TEMPORARY TABLE IF NOT EXISTS tableTest (colTest UInt32) ENGINE = Memory
Возвращает ошибку:
>57 - DB::Exception: Temporary table tableTest already exists
Почему так происходит? -
ЦФТ
-
мож зарезервированное слово
-
Таблица создается, ошибка при повтрном запросе
-
-
А, ну так тогда все ок. Она ж есть, в чем проблема?
-
Проблема в том, что ошибки не должно быть, если указано "IF NOT EXISTS"
-
Просто при создании там нет проверки на if exists, щас поправлю )
-
А да, сори. Чет туплю люто.)
-
Спасибо
-
Опция allow_databases работает на system?
Создал RO пользователя у которого в allow_databases нет system,
Но в tabix при этом отрисовываются все бд(system + default + all other created dbs)
+ describe table работает на таблицы в system помимо разрешённой базы данных, хотя на другие denied -
Привет
Как бороться с ошибкой "Part XXX intersects previous part YYY" ? Весь лог забит одним и тем же сообщением -
господа, а можно в докере получить какой то конкретный стабильный релиз КХ кроме последнего ?
-
Какая версия Clickhouse?
-
https://github.com/yandex/ClickHouse/blob/481f29b451f23b33e828b1dcd32fbf038f05bd35/CHANGELOG_RU.md
Исправлена ошибка, в связи с которой запрос OPTIMIZE к Replicated таблицам мог приводить к неконсистентным мержам (в логах видно по сообщениям Part ... intersects previous part).yandex/ClickHouseClickHouse is a free analytic DBMS for big data.
-
1.1.54245
-
ну этого обновления у нас точно нет
-
ясно, надо будет подумать об обновлении
-
Насколько я понимаю описание из документации, на system нельзя ограничить доступ
-
Починили. В latest тэге сейчас рабочий 54362.
-
а что починили?
-
Joined.
-
а как может быть, что на некоторых хостах select count() from some_distributed_table возвращает результатов больше, чем на других?
-
притом, что в нижележащих мерж-таблицах все одинаково
-
А кто подскажет как такое возможно: https://img.facedsid.ru/eu8wk.jpg ? )
-
Ютц-москва
-
Таймзоны
-
например если что-то напутано в remote_servers
-
А сервер по умолчанию в UTC все конвертирует?
-
Ага...понял...на машине с клиентом UTC стоит
-
*рука-лицо*
-
-
Это все замечательно. Только при конвертировании даты в ts зона тоже может учитываться :)
-
да вроде на всех серверах один конфиг, однако для одной таблицы проблема на одном хосте, для другой таблицы - на другом
-
тогда, возможно, у вас что-то напутано на всех серверах, давайте конфиг, что там у вас?
-
что-то вроде https://pastebin.com/6Ud89VjD
-
везде абсолютно идентично
-
https://github.com/yandex/ClickHouse/commit/e42a25749276958149eedc3f32fccd37512795c5
https://github.com/yandex/ClickHouse/commit/3cfa4c3e650d9d3d6037e3a18454b7f3e04d807bDocker fix · yandex/ClickHouse@e42a257ClickHouse is a free analytic DBMS for big data.
-
select hostName(), * from distributed именно на проблемной машине выдает по две записи одинаковых
-
но при чтении из мерж-таблицы - запись одна
-
интересно, что если в запрос добавить order by - две таблички в результате не склеиваются в одну
-
Возникает ощущение, будто сервер дважды ходит в самого себя
-
Сейчас рестартанул, проверю после рестарта
-
В презентации https://clickhouse.yandex/presentations/meetup12/internals.pdf, на слайде №30 говорится о CAP теореме, и упоминается что
"Not consistent
As is any system with async replication
❋
But you can turn linearizability on"
Каким способом можно включить linearizability? Речь идёт об этой настройке - fallback_to_stale_replicas_for_distributed_queries или есть еще какие-то механизмы чтобы влиять на это? -
рестарт не помог
-
Joined.
-
Нужно вставлять с настройкой insert_quorum > N/2, а читать с настройкой select_sequential_consistency
-
спасибо.
-
Проверьте ещё раз хосты в remote_servers и куда они с этой машины идут
-
удалось разобраться) были конфликтующие конфиги
-
и в system.clusters был дважды один и тот же хост на каждый шард
-
В логах впрочем ничего не было по этому поводу
-
Может ворнинг нужен?
-
Это нормально может вы так и хотели
-
Странный какой-то кейс
-
Всем привет!
Я первый день работаю с ClickHouse, помогите, пожалуйста, привести текст к DateTime. -
-
-
Ага, помогло убрать точку с запятой
-
Спасибо!
-
Спасибо. А тесты теперь есть на это? :) Т.е. я точно уверен что в Яндексе могут сделать тесты, даже знаю с ипользованием каких тулов и если нужно могу помочь с этим (в DM)
-
Тестов к сожалению нет, так как сейчас образ неудобно собирается - на стороне докер хаба. Отсюда и дурацкие ошибки типа «тег образа и версия сервера не совпадают» (в сборку на стороне хаба вроде бы нельзя передать параметры). Будем переделывать и собирать на своей стороне, тогда и тестировать будет проще.
- 13 March 2018 (165 messages)
-
-
Получаю такой error
Received exception from server (version 1.1.54343):
Code: 10. DB::Exception: Received from localhost:9000, 127.0.0.1. DB::Exception: Not found column arrayFirstIndex(lambda(tuple(x), and(greater(plus(plus(multiply(toHour(ENTRY_DT), 3600), multiply(toMinute(ENTRY_DT), 60)), toSecond(ENTRY_DT)), x), less(plus(plus(multiply(toHour(ENTRY_DT), 3600), multiply(toMinute(ENTRY_DT), 60)), toSecond(ENTRY_DT)), plus(x, 300)))), [36000, 36002.70428165878, 36024.55641325374]) in block. There are only columns: index, ENTRY_DT, toHour(ENTRY_DT), 3600, multiply(toHour(ENTRY_DT), 3600), toMinute(ENTRY_DT), 60, multiply(toMinute(ENTRY_DT), 60), plus(multiply(toHour(ENTRY_DT), 3600), multiply(toMinute(ENTRY_DT), 60)), toSecond(ENTRY_DT), plus(plus(multiply(toHour(ENTRY_DT), 3600), multiply(toMinute(ENTRY_DT), 60)), toSecond(ENTRY_DT)), [36000., 36002.70428165878, 36024.55641325374], 300, __lambda1, replicate(plus(plus(multiply(toHour(ENTRY_DT), 3600), multiply(toMinute(ENTRY_DT), 60)), toSecond(ENTRY_DT)), [36000., 36002.70428165878, 36024.55641325374]), replicate(300, [36000., 36002.70428165878, 36024.55641325374]), arrayFirstIndex(lambda(tuple(x), and(greater(plus(plus(multiply(toHour(ENTRY_DT), 3600), multiply(toMinute(ENTRY_DT), 60)), toSecond(ENTRY_DT)), x), less(plus(plus(multiply(toHour(ENTRY_DT), 3600), multiply(toMinute(ENTRY_DT), 60)), toSecond(ENTRY_DT)), plus(x, 300)))), [36000., 36002.70428165878, 36024.55641325374]).
0 rows in set. Elapsed: 0.051 sec. -
-
-
спасибо большое!
-
Обновитесь до последней версии. Там этот баг пофиксили.
-
Благодарю
-
-
Главное исправили :) для кого то это критично
-
Обновление безболезненно у вам прошло, все чики-пики?
-
Да, безболезненно! Проблем не было, обновили 8 машин
-
-
Коллеги, не подскажите как работает функция max ?
-
Joined.
-
По дате сегодня так искала максимум:
select max(CAST(substring(create_date, 1, 19) AS Date)) from table -
Подскажите, на сколько это нормальный юзкайс шардировать MATERIALIZED таблицу?
Схема примерна след.
statistic <- statistic_distributed
view_statistic <- view_statistic_distrebuted <- statistic_distributed
где
statistic – ReplicatedMergeTree
view_statistic - MATERIALIZED ReplicatedSummingMergeTree -
а в чем проблема то ??
каждый view_statictic ссылается на statistic
а потом при чтении из distributed сервер которому вы задали запрос просто читает со всех view_staticstic
тут главное ключ шардирования в distributed таблицах правильно подобрать для записи (для чтения он не используется) -
Спасибо.
Ключ шардирование rand() -
писать будете в statictic_distributed ?
вот тут непонятно
statistic <- statistic_distributed
view_statistic <- view_statistic_distrebuted <- statistic_distributed
почему
statistic_distributed
дважды
из вьюхи только читать можно писать туда нежелательно =) -
Конечно, писать только в statictic_distributed.
-
Ошибочка наверно, хотел показать
то что view_statistic напоняется от данных которые поступают в statistic (шард) -
У меня по крайней мере все работает, хотел просто подтвердить то что данная схема (подход) верный.
-
привет! а если в шарде стало кончаться место, и мы решили добавить ещё пару машинок - надо просто их прописать в конфиге на всех серверах как ещё один набор реплик? Есть какая то обкатанная процедура?
-
Да, так и есть, еще можете отцепить некоторые партиции и перекинуть в новый шард. В новой версии есть clickhouse-copier, но на продакшене его пробовать пока рано
-
Эм. Я имею в виду не отдельный "новый шард", а именно в текущий шард добавить <shard><replica>... </replica><replica>... </replica></shard>. Я правильно понял?
-
-
Пример
<?xml version="1.0"?>
<yandex>
<remote_servers>
<cluster>
<shard> <!-- Это шард-->
<replica>
<host>replica_1_shard_1</host>
<port>9000</port>
</replica>
<replica>
<host>replica_2_shard_1</host>
<port>9000</port>
</replica>
</shard>
<shard> <!-- Это шард-->
<replica>
<host>replica_1_shard_2</host>
<port>9000</port>
</replica>
<replica>
<host>replica_2_shard_2</host>
<port>9000</port>
</replica>
</shard>
</cluster>
</remote_servers>
</yandex> -
да, и нам (как я понял) надо добавить ещё один набор, типа:
<shard> <!— Это шард-->
<replica>
<host>replica_1_shard_3</host>
<port>9000</port>
</replica>
<replica>
<host>replica_2_shard_3</host>
<port>9000</port>
</replica>
</shard> -
Да
-
спасибо
-
У вас SummingMergeTree, вам rand() не подходит, надо шардировать по ключу, иначе записи с одним ключом на разных шардах окажутся, и не схлопнуться
-
-
Это тоже не всегда хорошо, например у нас есть "пользователь" и он генерит ~50% трафика, его как раз лучше рандомом по разным шардам укладывать
-
-
-
Все тесты показывают, не ленитесь их делать на своих данных, в нашем кейсе например каждой записи соответствует epoch и вот его шардировать наиболее равномерно получается
-
-
Всем привет, вопрос наверное набил уже всем оскомину, хотелось бы понять как осуществлять контроль памяти в КХ можно осуществить ограничение на выполнение query можно ограничить сумму query также я наблюдаю что КХ и без выполнения query потребляет память и потребление с временем растет. Как отрегулировать это потребление чтоб при достижение пиков по предыдущим показателям не сваливалась нода?
-
Кто то уже решал подобную проблему?
-
Версия КХ какая, в 1.1.54310 он действительно "подтикал". Как вы правильно указали там есть возможность задания лимитов по памяти на запрос, группировки и т.д.
-
1.1.54190
-
в этой версии уже не тек?
-
Joined.
-
? Обновитесь )
-
Само собой, у меня есть тестовый стенд. Но там тоже не все так однозначно.
-
подскажите где можно взять тестовый набор данных о полетах как в туториалах, но маленького размера (3Гб качать не вариант, 3Мб устроило бы вполне)
-
Я хочу понять какое процентное соотношение мне нужно чтоб в момент нагрузки его не убивал ООМ.
-
словари можно как то ограничивать по памяти?
-
echo -1000 > /proc/self/oom_score_adj
, а на каких запросах он у вас использует памяти больше чем ему выдано? -
Смотрите ситуация такая, мы запускаем нагрузку в виде запросов, они могут быть как быстрые так и долгие. Сначала он например при 30гиг рам и ограничении в 20гиг алл кверис работает нормально. Потом при росте внуттреннего потребления он просто выскакивает за отведенный счетчик и его прибивает ООМ
-
ну тоесть если сам процесс КХ скушал 18 гиг памяти то алл кверис может кушать 20 гиг
-
а памяти все еще 30
-
Задайте лимит на пользователя/все запросы, настройки:
max_memory_usage_for_user
max_memory_usage_for_all_queries
https://github.com/yandex/ClickHouse/blob/master/dbms/src/Interpreters/Settings.h#L243 -
можете пояснить что это даст если не сложно?
-
-
Вы выставляете лимит памяти на один запрос, данные настройки могут выставить лимит на все конкурентные запросы. Т.е. лимит в 1 Gb на запрос при 100 конкурентных запросах может дать вам потребление в 100Gb
-
>max_memory_usage_for_all_queries
Я правильно понимаю, что тут я могу устанвоить ограничение на общее потребление памяти CH сервером?
Если да, то что будет при превышении этого порога? -
Можно руками нагенерить за пару часов
-
уже не надо, нашел параметризуемый http запрос, сделал выборку за месяц, спасибо
-
а вы легких путей не ищете)
-
По идее запрос который вылез отвалится
-
Ну руками, конечно, не в прямом смысле 🙂 Но зато можно нагенерить примерную дату которую предполагается использовать
-
тоже вариант, но мне по-быстрому, просто потестить как оно все работает
-
-
SELECT
v,
nn.index
FROM
(
WITH
[10, 20, 30, 40] AS mini,
[60, 70, 80, 90] AS maxi
SELECT
value AS v,
arrayMap((x, y) -> ((value >= x) AND (value <= y)), mini, maxi) AS `N.v`,
arrayEnumerate(mini) AS `N.index`
FROM
(
SELECT number AS value
FROM numbers(100)
)
)
ARRAY JOIN N AS nn
WHERE nn.v = 1
ORDER BY rand() ASC
LIMIT 1 BY nn.index
┌──v─┬─nn.index─┐
│ 46 │ 3 │
│ 58 │ 1 │
│ 77 │ 4 │
│ 27 │ 2 │
└────┴──────────┘
┌──v─┬─nn.index─┐
│ 17 │ 1 │
│ 67 │ 4 │
│ 59 │ 2 │
│ 74 │ 3 │
└────┴──────────┘ -
-
-
-
Joined.
-
колеги, подскажите, как правильно интерпретировать метрику leaderreplica отправляемую в графит?
-
-
да вот у меня-то оно в false
-
-
Подскажите, пожалуйста, как написать общее табличное представление в ClickHouse ?
-
-
Спасибо, понятно.
-
Господа знатоки, скажите пожалуйста, можно ли считать багом то, что в случае ошибки при запросе “create table as select ...” пустая таблица остается?
-
Это скорее фича при отсутствии транзакций, хотя, эту ситуацию можно обрабатывать https://github.com/yandex/ClickHouse/blob/master/dbms/src/Interpreters/InterpreterCreateQuery.cpp#L549
-
Joined.
-
Это кол-во всех Replicated таблиц на сервере, которые в данный момент являются лидирующей репликой. Лидирующая реплика отвечает за начначение мержей, OPTIMIZE, DROP PARTITION и т.п.
-
спасибо!
-
"is_leader: является ли реплика лидером" из документации означает то же, только сам факт лидерства репликой, на которой выполнен запрос?
Как тогда, кстати, можно мониторить, на какую из реплик в данный момент осуществляется запись, если internal_replication в true у шарда? -
а есть какой-то механизм балансировки числа таблиц на сервер или в этом нет необходимости?
-
Запись можно осуществлять на любую из реплик, репликация master-master (не надо путать лидера и мастера-) ). Посмотреть где какие инсерты сейчас обрабатываются можно по содержимому system.processes.
-
В смысле баланисровки количества лидирующих реплицируемых таблиц?
-
-
да, я об этом. спасибо.
-
Joined.
-
А есть что-то похожее на NULLIF ?
-
-
Спасибо!
-
-
-
На что можно заменить trim() ?
-
Чтобы убрать лишние пробелы слева и справа
-
Большое спасибо! 😊
-
-
Здорово! Благодарю!
-
replaceRegexpAll(text, '(^ *| *$)', '')
-
Ага, спасибо
-
Поняла)
-
-
Достаточно 2.
-
1. DECIMAL пока не запланирован. У меня есть только в длинном списке задач. Про пол года не уверен.
2. Надо написать на clickhouse-feedback@yandex-team.ru
Да, есть возможность стать партнёром по поддержке ClickHouse. -
Да, есть фича - поддержка TLS во внутреннем протоколе. К сожалению, для неё не дописали тестов, и она нигде у нас не используется, и поэтому я не уверен, что она работает (проще говоря, эту фичу пока имеет смысл считать отсутствующей). Но было бы хорошо проверить и доделать. Эту возможность разрабатывал @proller - обращайтесь к нему с вопросами по настройке.
-
Скажите, что именно вы изменили, чтобы сервер (в Ubuntu под Windows) не ругался на таймзоны?
-
Нет принципиальных возражений, если я попробую реализовать Decimal?
-
Алексей, сейчас доступа нет к компу - завтра с утра напишу
-
Агрегатные функции от Nullable аргументов работают так:
- пропускают все NULL;
- если других значений не было вообще, то возвращает NULL; -
Было бы хорошо!
https://github.com/yandex/ClickHouse/issues/2021Any plan to support decimal? #2021I don't see it on the roadmap, any chance we can have it? Time have passed since #253, so I hope you don't mind I asked this again. Thanks for the great works :D
-
-
А почему тогда агрегатные функции с суффиксами State и Merge действуют иначе и теряют информацию о Null, возвращая 0 для числовых колонок, хотя 0 там не было?
-
Не припоминаю такого. Пример?
-
Тут пример
-
-
Ок, попробую.
-
Да, это действительно так - состояние теряет информацию о том, что аргументы были Nullable и на пустом состоянии следовало бы вернуть NULL.
-
Alexey и ещё подскажи - правильно я понимаю, что материализованные представления работают только для простых выборок "select * from table", и не работают, если появляется что-то более сложное - например, join? это баг или фича? сегодня пол дня убили, чтобы понять, почему у нас витрины не материализуются.
-
Есть несколько вариантов реализации.
Плохие:
1. floating point decimal
https://gcc.gnu.org/onlinedocs/gcc/Decimal-Float.html
Скорее всего плохо работает и будет неочевидно для использования.
2. decimal с динамическим выделение памяти кусочками. Например, это - реализация в MySQL. Использовать не нужно, потому что будет плохо работать.
Нормальный:
3. decimal на основе int достаточной разрядности. Домножаем и делим на степень 10, где нужно. Вроде такая реализация в Hive, Impala и ещё каком-то форке Greenplum, который я зыбыл как называется.
Для него нужно, чтобы был int128.
int128 есть в gcc, clang, но он не портируемый (например, нет поддержки на 32-битных архитектурах, но это не важно для нас).
Есть gmp, но её использовать нельзя из-за лицензии.
Поэтому возьмите вариант из boost. Кажется называется boost::bigint.
Потом посмотрим, насколько нормально будет работать.Decimal Float (Using the GNU Compiler Collection (GCC))Next: Hex Floats, Previous: Half-Precision, Up: C Extensions [Contents][Index]
-
Материализованные представления работают всего лишь как триггеры на INSERT в левую таблицу.
-
Это печально. Тогда стоит об этом явно сказать в документации, так как из неё это сейчас совсем не очевидно.
-
-
Всем привет!
Подскажите пожалуйста стоит ли смотреть на КХ для такой задачи:
Хранить надо быстро приростающие данные вида:
UUID - BLOB (Размер 250-500 байт)
Прирост может достигать нескольких десятков гигабайт в день.
Хранить минимум 2-3 мес, потом можно чистить.
Чтения только одной записи - по UUID вытащить BLOB, -
То есть просто key-value хранилище блобов?
-
-
-
вам скорее монгу
-
-
Думаю, КХ вам для этого не очень подходит.
-
только не монгу, а кассандру
-
-
это не шутка)
-
-
-
только не когда тебе надо хранить "быстро прирастающие данные"
-
Achieve 1.5 Million Ops/Second with Redis | Redis Labs
Learn how to enhance throughput and reduce latency with Redis so that you can achieve 1.5 million ops per second.
-
-
-
-
-
да, редис тебе не подходит
-
-
-
x6 для кластера?
-
-
-
там кластер от 3 начинается, но это без реплик. амазону какому я бы и доверился даже...
-
Это - количество реплицируемых таблиц, которые в данный момент являются лидерами. Лидер отвечает за назначение мержей. Только одна реплика каждой таблицы в один момент времени может являться лидером.
Стоит иметь ввиду, что лидерство никак не связано с SELECT, INSERT. Читать и писать можно на любую реплику, независимо от лидерства.
На что обратить внимание при взгляде на график?
- когда он меняется - значит потеряна и восстановлена сессия с ZK - это нормально, если не слишком часто;
- если вдруг на всех репликах нет лидера, то это плохо. -
Если вы используете Replicated таблицы и пишете в Distributed таблицу, то internal_replication следует выставить в true.
-
Есть как ifNull, так и nullIf.
-
Добрый вечер. Подскажите, у меня один и тот же IN (SELECT FROM mysql) встречается в одном запросе в разных местах (вложенные JOIN), обращение к MySQL происходит несолкьо раз. Как можно переписать, чтобы один и тот же IN выполнялся один раз?
-
Можно через отдельную таблицу. Тип TinyLog/StripeLog - хорошо подходит для таких временных данных.
Более глубоко - задумывалось, чтобы полностью одинаковые подзапросы выполнялись один раз. Надо посмотреть, почему это не так. -
throwIf - функция для разработки и отладки; как например dumpColumnStructure, blockSize и т. п.
-
VersionedCollapsingMergeTree - расширение (и в некотором смысле упрощение) функциональности CollapsingMergeTree. Разработано для Яндекс.Метрики. Чтобы было действительно понятно, зачем оно понадобилась - какой сценарий использования, придётся написать более подробный текст...
Может быть @kochetovnicolai в этом поможет. -
Формулировка довольно неудачная. Предполагается реализация, подходящая для сравнительно редких и тяжёлых UPDATE/DELETE (по тяжести примерно как ALTER). О быстрых точечных операциях речи пока не идёт.
-
Понял, спасибо, будем надеется на текст и доку :)
-
@milovidov_an @ztlpn The repository 'http://repo.yandex.ru/clickhouse/xenial stable Release' does not have a Release file. - это не нормально )
Делалось все по http://img.facedsid.ru/phkod.jpg -
Понятно...походу опять CDN отвалился.
-
И по http://repo.yandex.ru/clickhouse/xenial вообще 404
-
Только что изменили адрес репозитория.
Теперь
sudo apt-add-repository "deb http://repo.yandex.ru/clickhouse/deb/stable/ main/" -
Спасибо! :)
-
Подскажите как решить данную проблему:
CREATE MATERIALIZED VIEW default.view_statistic_by_days_4
(
event_date Date,
event_date_1 Date,
campaign_id UInt32,
impression_cnt UInt32,
click_cnt UInt32
) ENGINE = SummingMergeTree(event_date, (event_date, campaign_id), 8192, (impression_cnt, click_cnt)) AS
SELECT
toDate(event_datetime) AS event_date,
toDate(event_datetime, 'Asia/Vladivostok') AS event_date_1,
campaign_id,
sum(impression_cnt) AS impression_cnt,
sum(click_cnt) AS click_cnt
FROM default.statistic_by_minutes_4
GROUP BY
event_date,
campaign_id
Received exception from server:
Code: 215. DB::Exception: Received from localhost:9000, 127.0.0.1. DB::Exception: Column event_datetime is not under aggregate function and not in GROUP BY.. -
GROUP BY event_date, event_date_1, campaign_id
-
Или (другой вариант) - обернуть toDate(event_datetime, 'Asia/Vladivostok') в any: any(toDate(event_datetime, 'Asia/Vladivostok'))
-
- 14 March 2018 (159 messages)
-
-
-
пытаюсь собрать ODBC драйвер для ClickHouse по мануалу из гихаба, дошел до строчки "vim ~/.odbc.ini", этот файл где искать или создавать самому?
-
-
-
-
:D я себе список команд в закладки добавил. С nano таких вопросов нет? )
-
ну уж как вписать gedit вместо vim я соображу)
-
просто смутило что такого файла нет. Так кстати не работает, пришлось еще создавать odbcinst.ini, в котором прописывать путь до драйвера, тогда только получилось
-
подскажите новичку, надо ли обновлять 1.1.54343 ?
-
Использование индекса таблиц семейства MergeTree при наличии условия IN на кортеж от выражений от столбцов первичного ключа. Пример WHERE (UserID, EventDate) IN ((123, '2000-01-01'), ...) (Anastasiya Tsarkova).
-
Лично мне надо в основном из-за этого.
-
Если вас устраивает работа - можно и не трогать
-
Алексей, я выполнил настройку через:
sudo dpkg-reconfigure tzdata -
А почему бы и нет? Сразу обновлять только продакшен не рекомендуется
-
-
Joined.
-
sudo apt-get update
.......
Reading package lists... Done
W: Conflicting distribution: http://repo.yandex.ru main/ Release (expected main but got clickhouse stable) -
Не получается получить доступ через ODBC драйвер к серверу ClickHouse на VirtualBox. Хост - Windows 7, гостевая - Ubuntu 16. CH на гостевой системе работает нормально, клиент запускается, запросы из консоли выполняются. Драйвер ODBC на гостевой системе скомпилировал по мануалу и установил (хотя тут он наверно не нужен). На хосте драйвер ODBC установил из готовых бинарников. На попытку подключиться к серверу КХ пишет: Connection refused или Host not found. Куда копать? может есть какие то подробные мануалы как подключаться к виртуалке?
-
-
если заходить в гостевой в мозилле по адресу http://localhost:8123/, то пишет ОК. как посмотреть какой порт слушает КХ в вируталке?
-
Почему может ругаться http://prntscr.com/iqztsa?Screenshot
Captured with Lightshot
-
sega@sega-VirtualBox:~$ sudo netstat -ltupn|grep clickhouse
[sudo] password for sega:
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 10906/clickhouse-se
tcp 0 0 127.0.0.1:9009 0.0.0.0:* LISTEN 10906/clickhouse-se
tcp 0 0 127.0.0.1:8123 0.0.0.0:* LISTEN 10906/clickhouse-se
tcp6 0 0 ::1:9000 :::* LISTEN 10906/clickhouse-se
tcp6 0 0 ::1:9009 :::* LISTEN 10906/clickhouse-se
tcp6 0 0 ::1:8123 :::* LISTEN 10906/clickhouse-se
вот эта информация нужна, правильно понял? -
видимо a in b интерпретируется как имя таблицы.
-
-
коллеги, добрый день!
напомните, пожалуйста, как дропнуть партицию из MV? -
Странно, что так работает http://prntscr.com/iqzx27, а в моем случае - нет. Я где-то читал что в IN можно указывать имя таблицы http://prntscr.com/iqzyh2, похоже это как-то приоритетнее срабатываетScreenshot
Captured with Lightshot
-
У вас в гостевой ОС всё нормально, осталось настроить сеть в самом VirtualBox. Вот документация как это сделать: https://www.virtualbox.org/manual/ch06.html#natforward
-
спасибки, сейчас попробую
-
вспомнил: дропаем партишн для таблицы .inner.mv
вот только название .inner.mv надо брать в двойные кавычки -
у меня такая же ошибка
-
а еще в гостевой слушает только localhost - это значит что снаружи доступа не будет. нужно поменять listen_host на ::
-
насчет этого находил информацию на stackoverflow, вроде еще советуют поменять на 127.0.0.1 это значение
-
-
настроил проброс портов, как описано в справке к Virtual Box, но проблема осталась
-
-
-
точно не знаю, там пример через консоль, а я использовал способ через GUI, в примере есть такая строка: VBoxManage modifyvm "VM name" —natpf1 "guestssh,tcp,127.0.0.1,2222,,22"
-
-
имеете ввиду чтрока подключения будет выглядеть так? "DRIVER={ClickHouse ANSI};SERVER=0.0.0.0;DATABASE=default"
-
-
в конфиге сейчас так
-
потом нужно добиться чтоб просто в браузере заходило на http://localhost:8123 (а может быть и не localhost)
-
-
это уже на хосте получается?
-
-
-
похоже в этом месте где-то затык, из хоста ни в какую из браузера не видит этот адрес
-
там все закоментировано - значит будет слушать ::1 и 127.0.0.1 , надо раскомментировать
-
а ниже разве не действуют строки?
-
-
а, все дошло, там многострочный коммент
-
заработало подключение из браузера хоста, ура! спасибо большое
-
получается я по невнимательности коммент просмотрел в конфигах, в остальном настройки так примерно и были сделаны
-
плюс я еще очистил адрес в настройках проброса портов VirtualBox, вместо 127.0.0.1 указал пустые значения. Без этого тоже не работало
-
@milovidov_an Кстати, очень частый вопрос. Тут несколько вариантов: выкидывать исключение для какой таблицы нужно делать ALTER TABLE DROP PARTITION или можно выполнять ALTER для целевой таблицы, но тут логичнее, наверно, прозрачно работать с партициями которые были созданы без CREATE MATERIALIZED VIEW TO table (has_inner_table таблицами) и кидать исключение для тех что были созданы с TO т.к. они менее связаны с materialized view ?
-
а подскажите как можно оптимально доставать из кх записи, у меня есть небольшой запрос который возвращает чтото после фильтра, с лимитом в каждой группе, в постгресе мы просто через union all соединяли 5-6 маленьких запросов и скорость падала только на 10-20%, но в кх получается он каждый запрос по отдельности считает, и только потом уже оъединяет
-
в идеале бы limit в каждой группе после group by
-
может быть limit by field1 10 вам поможет?
-
а чо так можно?)
-
-
а field1 это поле по которому сортировка?
-
Это что-то типа оконных функций, похоже это то что вам нужно
-
К вопросу о КХ на виртуалке, адрес сервера КХ из браузера хоста виден теперь, но дальше не получается. Пробую выполнить запрос по такой строке подключения: "DRIVER={ClickHouse ANSI};SERVER=localhost:8123;DATABASE=default", выдает "Host not found"
-
Microsoft Query вообще падает с ошибкой, при попытке подключения
-
-
-
-
-
Добрый день, а какой кей-сервер теперь? deb говорит, что репозиторий не подписан, --keyserver keyserver.ubuntu.com --recv C8F1E19FE0C56BD4 притаскивает старый ключ signatures were invalid: 9EBB357BC2B0876A774500C7C8F1E19FE0C56BD4
-
спасибо, попробую завтра, как доступ будет
-
-
-
-
Для этого нужно использовать https://clickhouse.yandex/docs/ru/table_engines/collapsingmergetree/
-
-
-
По дефолту пишется Sign 1
-
-
Если надо перезаписать строку, дублируешь текущую с Sign -1, и пишешь новую с Sign 1
-
-
-
-
на пальцах, вот так это работает
-
для ID 777 перезаписано количество хитов
-
а наведите на мысли, как можно написать запрос, который просуммировал бы столько строк из подзапроса, чтобы сумма по некоему столбцу оказалась больше, например, 10000?
то есть, если конкретнее:
- подзапрос возвращает дату, количество загрузок рекламы, количество доскроллов до рекламы
отсортированное от сегодняшнего дня до недели назад
- хочется посчитать процент доскролла, взяв столько строк, чтобы набрать в сумме 10к загрузок; ну или все 7 строк, если столько не набирается -
А CollapsingMergeTree делает это сам – схлопывает записи
-
Я показал пример, если записи не схлопнуты
-
например, в подзапросе у вас вот так:
:) select (today() - number) as day, number+3000 as downloads from system.numbers limit 7
┌────────day─┬─downloads─┐
│ 2018-03-14 │ 3000 │
│ 2018-03-13 │ 3001 │
│ 2018-03-12 │ 3002 │
│ 2018-03-11 │ 3003 │
│ 2018-03-10 │ 3004 │
│ 2018-03-09 │ 3005 │
│ 2018-03-08 │ 3006 │
└────────────┴───────────┘ -
runningAccumulate( sumState(shows) )
-
-
:) select day, sum(downloads), runningAccumulate(sumState(downloads)) as sumacc from (select (today() - number) as day, number+3000 as downloads from system.numbers limit 7) group by day having sumacc > 10000 order by day desc
┌────────day─┬─sum(downloads)─┬─sumacc─┐
│ 2018-03-14 │ 3000 │ 21021 │
│ 2018-03-13 │ 3001 │ 18021 │
│ 2018-03-12 │ 3002 │ 15020 │
│ 2018-03-11 │ 3003 │ 12018 │
└────────────┴────────────────┴────────┘
4 rows in set. Elapsed: 0.004 sec. -
йеп, спасибо!
-
-
да, все ингредиенты у меня теперь есть :)
-
у тебя получилось обновиться с новой репы?
-
Я с нуля ставил. Машинка чистая была. Обновляться еще не пробовал.
-
спс.
-
-
Joined.
-
полностью получилось так:
SELECT date, runningAccumulate(viewState)/runningAccumulate(showState) AS viewrate
FROM (
SELECT date, sumState(show) AS showState, sumState(view) AS viewState
FROM table
WHERE date >= today()-7 AND your_conditions
GROUP BY date
HAVING sum(show) > 0
ORDER BY date DESC
)
WHERE runningAccumulate(showState) > 10000 LIMIT 1 -
хотя, если не наберётся 10к, то всё сломается :)
-
-
-
портировали )
-
а мне кажется, это имеет отношение к подключению к tableau
-
-
однако видны "стыки"
-
необходима отладка
-
Партишны видны
-
-
-
-
-
-
Сорри. Попробовал, не запускается )
-
-
братцы подскажите либу к python для взаимодействия с clickhouse =)
-
Для алхимии - sqlalchemy-clickhouse и clickhouse-sqlalchemy :) также есть infri.clickhouse
-
И вроде бы ещё что-то, но не точно
-
-
thx a lot
-
-
-
-
-
-
табикс умеет
-
-
-
-
тогда молчу
-
Tabix умеет "readonly user can if setting readonly=2"
-
Если очень нужно можно попробовать и с readonly=1
Но тогда в настройках сервера для этого пользователя нужно ставить
`add_http_cors_header=1&log_queries=1&output_format_json_quote_64bit_integers=1&output_format_json_quote_denormals=1&result_overflow_mode=throw&max_result_rows=5000&timeout_overflow_mode=throw&max_execution_time=212&output_format_json_quote_64bit_integers=1``
max_execution_time + max_result_rows - должны совпадать -
Но честно я не тестировал - это только теория )
-
-
Было бы очень круто, если работает, потому что как показала практика - любой пользователь с ро=2 может положить сервер :(
-
попробуйте использовать chproxy https://github.com/tabixio/tabix/issues/41Mention chproxy in docs #41
chproxy provides the following features to tabix: chproxy may accept requests from readonly=1 users if allow_cors config is set. There is no need in add_http_cors_header hack. chproxy supports htt...
-
в этой доментации странно написано
chproxy may accept requests from readonly=1
у chproxy же нет никаких настроек readonly, тут имеется ввиду to_user? который на стороне кликхауса делается readonly=1? -
-
chproxy я сам не тестировал подсказать не могу как работать с tabix (
В доку включил как описанно в issue ) -
А пользователи просто переопределили параметры при подключении?
-
Ага, и запрос, который выедает больше памяти, чем досиупно на сервере
-
Я думал сделать что то на js чтобы помочь, но тут получается это все на клиенте ) и можно обойти
Без прослойки пока никак ( -
-
Joined.
-
-
Наверное уже говорил - сейчас пользователь может передавать настройки и в случае readonly=1, но только если эти настройки ничего не меняют (имеют такое же значение, какое уже есть).
То есть, если на стороне ClickHouse сервера выставить в users.xml такие же настройки, какие хочет Tabix, то Tabix будет работать и в случае readonly = 1. -
Про новый репозиторий, о том, что он стал ругаться на ключ. Говорят, что ключ остался тот же самый и ничего менять не нужно.
Вчера проверял - apt-add-repository всё добавляет, update проходит нормально. Возможно, я что-то недопроверял? -
Алексей, а вот если выполняется запрос create database of not exist(этим грешит sql алхимия питонячья) но бд уже есть. Т.е по факту ничего не меняется. Readonly не прокатит?
-
Подтверждаю, рабочий, только warning показывает
-
Не прокатит, так как такой случай не поддерживали.
-
Про Warning знаем. Наверное так и останется.
-
Сейчас проверю на другой машине.
Мануал на https://clickhouse.yandex/docs/en/getting_started/ актуален получается? -
Да.
-
Там абсолютно то же самое, что и на https://clickhouse.yandex/ внизу.ClickHouse DBMS
ClickHouse is a fast open-source column-oriented database management system that allows generating analytical data reports in real-time using SQL queries
-
deb http://repo.yandex.ru/clickhouse/deb/stable/ main/
W: Ошибка GPG: http://repo.yandex.ru/clickhouse/deb/stable main/ Release: Следующие подписи не могут быть проверены, так как недоступен открытый ключ: NO_PUBKEY C8F1E19FE0C56BD4
E: Репозиторий «http://repo.yandex.ru/clickhouse/deb/stable main/ Release» не подписан.
apt-key adv --keyserver keyserver.ubuntu.com --recv E0C56BD4
Executing: /tmp/apt-key-gpghome.nIKryqreGp/gpg.1.sh --keyserver keyserver.ubuntu.com --recv E0C56BD4
gpg: key C8F1E19FE0C56BD4: public key "ClickHouse Repository Key <milovidov@yandex-team.ru>" imported
gpg: Total number processed: 1
gpg: imported: 1
W: Ошибка GPG: http://repo.yandex.ru/clickhouse/deb/stable main/ Release: Следующие подписи неверные: 9EBB357BC2B0876A774500C7C8F1E19FE0C56BD4
E: Репозиторий «http://repo.yandex.ru/clickhouse/deb/stable main/ Release» не подписан.
Только не ubuntu, а debian 9. -
Спасибо, попробуем разобраться.
-
- 15 March 2018 (185 messages)
-
у меня еще апач развернут на локалхосте, с такой строчкой возвращает Connection refused, а если в браузере на хосте перейти по адресу localhost, то пишет "It works!" - стандартное сообщение апача
-
Joined.
-
появился вопрос, как скомпилировать драйвер ODBC под 32 битную платформу на стороне гостевой ОС linux. Я так понимаю по умолчанию компилируется 64 битная версия
-
W: http://repo.yandex.ru/clickhouse/deb/stable/main/Release.gpg: Signature by key 9EBB357BC2B0876A774500C7C8F1E19FE0C56BD4 uses weak digest algorithm (SHA1)
-
не то чтобы это имело большое значение, но неаккуратненько как-то :-)
-
А у меня не желает апдейтитьсч. Как заставить?
-
Я вот тут выше писал
-
#deb http://repo.yandex.ru/clickhouse/xenial stable main
deb http://repo.yandex.ru/clickhouse/deb/stable/ main/ -
-
пока ещё не апгрейдил - выбираю версию, так как последняя RC, но в ней хорошие изменения...
-
Впрочем, на тестовом точно накачу последнюю.
-
Скачивает по-крайней мере нормально.
-
Таки да, убунта.
-
-
Всем привет!
Подскажите, пожалуйста, по строковым функциям?
replaceRegexpAll(Certs, '"','') as Ce2
- ругается на первый аргумент, Illegal type Array(String) of first argument of function replaceRegexpAl
если на место Cetrs пишу строку которая по факту в Certs - всё норм
Certs получаю распарсивая строчку, вдруг это важно:
extractAll(Variables, 'Th":\\[("\.+)+",?]}') as Certs -
-
подскажите как при группировке user, подсчитать кол-во записей больше value>5 и value<0
|user|value|
|1 |6 |
|2 |-5 |
|3 |2 | -
После обновления до RC наблюдаю ошибки при создании БД/таблиц с параметром ON CLUSTER:
Code: 49, e.displayText() = DB::Exception: Query id cannot be empty, e.what() = DB::Exception -
после отката до 1.1.54343 - нормально
-
select countIf(value between 0 and 5) from table group by user
-
Спасибо
-
Я так понимаю можно его и в WHERE запихнуть?
-
Вполне себе
-
select user, count() from table where value between 0 and 5 group by user
-
какие-то отличия в работе с индексами есть между запросами?
-
В первом случае читаются все данные и агрегация выполняется при выполнении условия. Во втором случае выбираются все данные подходящие под условия, затем выполняется агрегация.
-
Коллеги, есть ли где-то информация по расчёту сайзинга ClickHouse?
-
кроме https://clickhouse.yandex/docs/ru/operations/tips/ ничего не удаётся найти, есть ли информация описывающая соответствие нагрузочной способности требованиям к суммарному количеству ядер/памяти/диска для обеспечения заданной нагрузочной способности? или результаты тестов конкретного железа и результирующие значения показателей производительности в единицах TPC-H http://www.tpc.org/tpch/
-
коллеги, добрый день!
подскажите, может есть какая-то хорошая практика для такой вот ситуации:
1. MergeTree с партицированием по месяцам, соответственно, колонка date Date
2. также есть колонка time UInt32, где хранится timestamp события
хочется уберечься от ситуаций, когда в date и time вставляются несогласованные значения, например, '2017-01-01' и 1504126800
есть какие-то проверенные/рабочие методы? -
Сделайте колонку date как materialized и пишите туда дату от значения time
-
-
колонку, как материалайзед — это как?
про MV для таблиц знаю, а для колонок — пока нет -
https://clickhouse.yandex/docs/ru/single/ MATERIALIZED expr, но проще сделать default
-
ясно. спасибо!
-
Пример
CREATE TABLE t_m
(
date Date MATERIALIZED toDate(time),
time UInt32
)
ENGINE = MergeTree(date, date, 8192);
INSERT INTO t_m (time) VALUES (1504126800);
Данные
:) SELECT date, time FROM t_m;
SELECT
date,
time
FROM t_m
┌───────date─┬───────time─┐
│ 2017-08-30 │ 1504126800 │
└────────────┴────────────┘
1 rows in set. Elapsed: 0.011 sec. -
ага. почитал по докам.
DEFAULT обеспечит консистентность, но вариант выстрелить в ногу остаётся
MATERIALIZED гарантирует консистентность, но есть нюансы со вставками и SELECT * -
Никто же не знает что у вас заданные, сколько и какие запросы. Вот тут есть бенчмарки разных СУБД на одних и тех же данных http://tech.marksblogg.com/Tech Blog
Benchmarks & Tips for Big Data, Hadoop, AWS, Google Cloud, PostgreSQL, Spark, Python & More...
-
Да, всё так
-
Joined.
-
на сайте http://www.tpc.org собраны результаты бенчмарков железа и большого количества разных СУБД, использованы стандартные тесты для тестирования производительности и получены результаты в единицах TPC-H для OLAP систем: соответствие количества процессоров их типа и ядер определённой нагрузочной способности в единицах теста TPC-H.
У Oracle например есть инструменты примерного расчёта сайзинга по количеству ядер для Essbase (экселевская считалка) где можно задать профиль нагрузки и на выходе получить количество серверов/процессоров аналогичное использованному в лабораторных испытаниях для конкретного профиля нагрузки и заданного колличества пользователей выполняющих запросы.
Хочется найти что то похожее в виде примеров расчётов или готового инструмента для ClickHouseTPC-HomepageThe Transaction Processing Performance Council defines transaction processing and database benchmarks and delivers trusted results to the industry.
-
Как-то спрашивал, что лучше для производительности - Uint8 или Int8, если предполагается хранить небольшое число.
Наши бенчмарки показали, что Uint8 всегда быстрее немного. -
Это довольно очевидно... unsigned всегда немного быстрее
-
-
Это странный совет. Беззнаковое число исключает дополнительные операции, как следствие меньше действий, как следствие выше производительность
-
-
Этого точно нет, может кто-то и заморочается и сделает такие тесты + денюжку в tpc.org чтоб их опубликовать, я не знаю. Это сильно критично?
-
Это очень критично для расчёта сайзинга в рамках осуществления работ по реализации аналитической системы на базе ClickHouse и подготовки технической документации на эту аналитческую систему для нашего заказчика, который планирует в рамках программы по импортозамещению Oracle использовать ClickHouse, но требуется четкий расчёт с обоснованием каждой цифры
-
tpc.org - не сильно. Скорее требуются гайды на тему "данные типа n столбцов таких-то типов, общий объём - N записей, рекомендуемые параметры сервера для K параллельных запросов, использующих индексы - такие-то + NN Гб памяти на каждый запрос"
-
версии же еще часто выходят, придется каждый релиз бенчи проводить?
-
Ну или примерное потребление памяти при работе с конкретными типами столбцов
-
Смотря что вы с ними будете делать
-
это понятно. Тут требуется описать пиковые случаи.
-
сейчас есть конкретный объём данных, который переваривает Oracle, есть определённые показатели по производительности боевого железа, и требуется пересчитать эти показатели в железо необходимое для ClickHouse
-
Пока вы не проведете свои тесты на реальных данных и запросах вы не будете иметь никакого представления что вам потребудется. Всё остальное бесполезные тесты которые не о чем не говорят относительно реального применения
-
Возьмите их залейте в КХ, самый простой и надежный способ проверить
-
То есть, выяснять, что добавлять в сервер: память или ещё один процессор - чисто эмпирически?
-
А есть ли какая либо методика, прозрачно описывающая расчёт при заданном профиле нагрузки и наборе данных необходимого железа для корректной работы СУБД?
-
-
Главная причина по которой требуется такойпрозрачный расчёт это используемая модель разработки, не применимы гибкие методы для нашего заказчика, используется Waterfall : для закупки и объявления тендеров на закупки конкретного железа под ClickHouse требуется предварительный прозрачный расчёт его нагрузочной способности на основании официальных данных тесвтов и рекомендаций производителя СУБД ClickHouse
-
На нагрузку, обычно, больше всего влияет то, что там за запросы в новом релизе понаписали
-
Напишите о своей проблеме на clickhouse-feedback@yandex-team.com
-
Ну то есть, пока что не предсказать, что за сервер понадобится под указанной нагрузкой под тестовым датасетом?
-
Так протестируйте, в чем сложность?
-
Нет, особенно что от версии к версии производительность меняется
-
Ага, надо предсказать сколько серверов, дисков и памяти понадобится при миграции из Oracle в ClickHouse
-
дисков - лучше взять столько же, по-моему... Вот сколько брать остального...
-
-
-
Мы не можем протестировать: нет доступа к исходным данным, конфиденциальная база большого объёма
-
Тады проще взять тестовый датасет и засунуть его в оракл и кликхаус...
-
Объем, структура, потоки на вход-выход известны? Если да, то сами данные не нужны, можно сэмулирвать
-
Это всегда самая большая сложность, просто вам нужно нагенерить похожий набор. Для этого вам нужно знать структуру в Oracle и посчитать что там как распределено
-
есть описание структуры и объём, который занимает база на диске, а так же примерное описание аналитической отчётности, которая строится по базе на Oracle, требуется хоть как то попробовать оценить пропорции в которых изменится требования к железу
-
Можете @alexanderzaitsev привлечь, они (https://www.altinity.com/) занимаются консалтингом и за денюжку вам с удовольствием могут помочь ;)ClickHouse Software And Services — Altinity
Deploy and operate ClickHouse, a lightning fast, open source SQL data warehouse for real-time analytics, time series, and log analysis.
-
-
соорудите аналогичный сервис, набейте 1/100 данных, смигрируйте его, оцените
-
Дональд Кнут, первый том по алгоритмам
-
Помочь сможем. Но тут даже помогать не о чем :) Попросите размер таблиц (в строках и байтах) — это не должно быть конфидициальным. Хотя бы самых крупных. Оцените, как вы их сделаете в КХ — сколько там и каких колонок получится. После этого можно прикинуть объем данных на диске. Дальше смотреть по нагрузке и типам запросов, сколько надо серверов, памяти и т.д. Но как правильно заметил Кирилл, скорее всего железа понадобится меньше, чем на Оракле
-
Если заказчика это устроит, можно дать оценку сверху сразу, пообещав уточнить в процессе реализации.
-
Все компании, с которыми мы работали или работаем, начинают с прототипа, где на подмножестве своих данных проверяют и уточняют требования к железу. Общего подхода тут быть не может, так как каждый случай уникальный. Только тестировать.
-
объём, структура изветстны и прогнозы роста за несколько лет эксплуатации тоже есть, есть потребность делать как регламентированную отчётность (да, под неё можно оптимизировать модель данных и добиться производительности) так и не регламентированную отчётность в рамках выполнения Ad-Hoc анализа в конструкторе данных. Есть понимание как при такой нагрузке работает Essbase но нет понимания того как работает КХ
-
Ну ведь понимание, как работает Essbase, оно возникло не абстрактно, а в процессе эксплуатации. Было бы странно ожидать другого от ClickHouse
-
оно возникло из результатов тестов Ораклом Essbase при разных типах нагрузки, высчитаны поправочные коэффициенты, которые оценивают процент загрузки ядра процессора какждым из видов нагрузки в расчёте на одного пользователя, данные получены в лабораторных испытаниях и создан инструмент для расчёта
-
вот так выглядит инструмент:
-
-
Судя по процессору и ядру не очень свежий гайд
-
Честно говоря, это выглядит как сферический конь в вакууме, но, конечно, понятно, зачем это нужно.
-
этот конь в вакууме даёт понимание сколько QphH будет прилетать на базу, сколько переваривает древний процессор, можно найти на http://www.tpc.org/tpch/ тесты свежих процессоров и по единицам QphH подобрать свежий процессор, эта методика прозрачна и понятна заказчикам, требуется что то аналогичное для КХ
-
Придется самим пока делать, пока не наберется критическое число заказчиков никто не форкнет ClickHouse в какой-нибудь ClickHouse Pro/Enterprise etc и не будет делать вот-такие вот гайды и подписываться под ними, так как отвечать, в случае чего, придется и к Open Source продукту тут сложно будет что-то предъявить.
-
Для ClickHouse это не очень подходит, потому что все очень сильно зависит от реализации, которую в таблицу не впишешь. Разница может быть в 100 раз.
-
Вот как раз тут заказчик из мира, где только Eterprise решения со всем вытекающим в виде потребности вот в таких расчётах
-
Ему еще и тулинг нужен будет, после Oracle его в других продуктах очень не хватает
-
Если вы хотите, мы проведем для вас такой анализ, покажете заказчику. Altinity — официальный партнер Яндекса, то есть вполне компетентная оценка. Пишите в личку.
-
Спасибо за информацию!
-
SELECT
extractAll(Variables, 'Th":\\[(".+)+",?]}') AS Certs,
arrayMap(x -> replaceRegexpAll(x, '"', ''), Certs) AS Ce2
FROM ( SELECT 'Th":["42"]}' AS Variables )
┌─Certs───┬─Ce2────┐
│ ['"42'] │ ['42'] │
└─────────┴────────┘ -
-
Насчет TPC-H — там сложный тест и он не очень релевантен для ClickHouse. Есть модифицированный тест SSB — Star Schema Benchmark — для него есть измерения ClickHouse, но нет сводной таблицы сравнений с другими системами (https://www.altinity.com/blog/2017/6/16/clickhouse-in-a-general-analytical-workload-based-on-star-schema-benchmark). Если есть TPC-H или SSB для Amazon RedShift — то можно взять его за основу. ClickHouse быстрее в 2-3 раза, чем RedShift на аналогичном железе.ClickHouse in a general analytical workload (based on Star Schema Benchmark) – ClickHouse Software And Services | Altinity
Jun 26, 2017 In this blog post, we’ll look at how ClickHouse performs in a general analytical workload using the star schema benchmark test.
-
Joined.
-
-
Всем привет, есть таблица с колонками event_time(DateTime), comment_id(int), status_id(int), любое действие (например оставляют новый коммент и т.п. записывается в таблицу)
И есть задача "среднее время которое комменты находятся в определенном статусе"
Как бы такое сделать? -
-
SELECT avgArray(y)
FROM (
WITH 1 AS S, 10 AS NOW
SELECT
N.comm,
groupArray(N.dt) AS dt,
groupArray(N.sta) AS sta,
arrayMap(i -> if(sta[i] = S, if(i < length(dt), dt[(i + 1)], NOW) - dt[i], 0), arrayEnumerate(dt)) AS x,
arrayFilter(xx -> (xx > 0), x) AS y
FROM
( SELECT * FROM
( SELECT
[2, 4, 6, 8, 1, 2, 4, 3] AS `N.dt`,
[1, 1, 1, 1, 2, 2, 3, 3] AS `N.comm`,
[1, 2, 3, 1, 2, 3, 1, 2] AS `N.sta`
)
ARRAY JOIN N
ORDER BY `N.dt` ASC
)
GROUP BY N.comm
)
┌─avgArray(y)─┐
│ 3.33 │
└─────────────┘ -
-
-
-
Добрый день. Это что-то случилось?
apt-update
E: The repository 'http://repo.yandex.ru/clickhouse/xenial stable Release' does not have a Release file.
N: Updating from such a repository can't be done securely, and is therefore disabled by default.
N: See apt-secure(8) manpage for repository creation and user configuration details.
вродь пару дней назад было нормально -
выще уже писали сменили адрес репо
-
в доке наверно тоже уже обновили
-
Это репу поменяли два дня назад
-
-
да, в доке обновили
-
clickhouse_repo: "deb http://repo.yandex.ru/clickhouse/deb/stable/ main/"
-
13.03.2018.
Уважаемые пользователи deb-репозитория clickhouse, url репозитория был обновлен. Новый url в документации: https://clickhouse.yandex/docs/ru/getting_started/
Dear clickhouse users! deb-repository has been changed. You can see new deb-repository url in doc: https://clickhouse.yandex/docs/en/getting_started/ -
@milovidov_an Алексей, может запинить выше про репу?
-
Joined.
-
-
Использование индексов в Clickhouse
Как работают индексы в Clickhose и как их использовать.
-
Там не совсем правда написана, лучше почитать тут https://groups.google.com/forum/#!searchin/clickhouse/%D0%B8%D0%BD%D0%B4%D0%B5%D0%BA%D1%81%7Csort:relevance/clickhouse/eUrsP30VtSU/p4-pxgdXAgAJ
-
-
-
@ztlpn где то на конференции рассказывал про внутреннее устройство КХ и там тоже очень разжеванно объясняется что и как работает.
-
А вообще в доке есть раздел с подробным описанием https://clickhouse.yandex/docs/ru/development/architecture/
-
Считается что это очевидно )
-
-
Joined.
-
None
-
это очень печально
-
Адрес deb репозитория с пакетами был изменён:
https://clickhouse.yandex/#quick-startClickHouse DBMSClickHouse is a fast open-source column-oriented database management system that allows generating analytical data reports in real-time using SQL queries
-
None
-
А что это означает? что то изменить нужно?
-
Joined.
-
и не такое бывало!
-
Ну я сначала удивился - а потом просто подправил свою роль для ансибла и живу дальше
-
печально что у меня сначала сломались плейбуки а только потом я узнал что они изменились и через 2 дня я увидел пин.
-
ещё оправдание — это, простите, международная практика, докер тоже так менял адреса репозиториев, с тем же откликом в сообществе
-
Изменилась вот эта строка. Теперь так:
deb http://repo.yandex.ru/clickhouse/deb/stable/ main/
Это то, что прописывается в /etc/apt/sources.list или указывается в apt-add-repository. -
для плейбуков ансибла это привело к тому что приходится делать миграцию для этого дела...
-
ибо старый файл по умолчанию остаётся а новый не выглядит сильно олично. поэтому apt update падает ага.
-
-
и для решения надо удалить старый файл.
-
еще я заметил что там нет разделения на версии осей
-
это значит что на деб 8 и 9 встанет одинаковый кх ?
-
Да, все верно. через apt_repository через absent работает
-
неужели на aptly переехали
-
Почему сделано изменение?
Нам было необходимо, чтобы:
1. Все версии пакетов хранились вечно. Раньше в репозитории была только одна, последняя версия.
2. Убрать разделение по ОС (precise/trusty/xenial), так как пакет для всех систем стал одинаковым.
Почему изменение сделано несовместимым образом?
Тот, кто разбирается в настройке .deb репозитория утверждает, что вариант с изменением адреса - это единственный способ. -
вопросов почему нету. есть печаль про уведомление :)
-
а репозитория для centos не планируется?
-
там какая то мутная тема. но в целом есть альтинити
-
Там же был какой-то неофициальный, собирал кто-то из сорцов вроде
-
но там стремный пакет с граблями при обновлении
-
я не хочу брать от неизвестно кого сборку
-
альтинити не неизвестно кто
-
команду посмотри там. думаю ты там всех знаешь :)
-
-
Что мешает для совместимости просто добавлять 1 и тот же пакет в разные репозитории?
-
-
Т.е. с ключами больше ни у кого проблем нет?
-
ключи не менялись же
-
По прежнему weak-key
-
W: GPG error: http://repo.yandex.ru/clickhouse/deb/stable main/ Release: The following signatures were invalid: 9EBB357BC2B0876A774500C7C8F1E19FE0C56BD4
у меня вот такое после смены репы.
Удалять и импортировать ключ я пробовал. -
Возможно, в Deb9 оно считается неприличным.
-
E0C56BD4 key же. нет ?
-
- name: Install by APT | Apt-key add yandex repo key
apt_key:
keyserver: keyserver.ubuntu.com
id: E0C56BD4
become: true -
Altinity/clickhouse - Packages · packagecloud
Browse packages for the Altinity/clickhouse repository. Host your own repository by creating an account on packagecloud.
-
Зачем их несколько поддерживать, лучше сразу один "отстрелить" и все. Сейчас с единым репозиторием для всех debian based бедут удобнее. При этом многие вообще пользуются своими репозиториями, что тоже правильно.
-
-
-
привет всем!
сможет кто-то глянуть ПР на clickhouse-jdbc?
https://github.com/yandex/clickhouse-jdbc/pull/186Maven shade plugin for uber jars with shaded dependencies by f1llon · Pull Request #186 · yandex/clickhouse-jdbcThe clickhouse-jdbc strictly depends on such libraries like com.google.guava & com.fasterxml.jackson.core well known of its issues with backward/forward compatibilities. I faced the classpath i...
-
Anton а можете еще правило для joda time добавить? или просто все в один путь положить? просто чтоб наверняка
-
joda time попадает в ru.yandex.repackaged.org
-
а, точно, по имени класса же
-
я посмотрел на группу и запутался)
-
-
ну да. я у себя какими-то костылями зафорсил версии так, что вроде все +- стабильно, но ощущение пороховой бочки осталось
👍 -
-
Да, он и есть. Последние символы строки.
-
временно можно сделать так deb [trusted=yes] http://repo.yandex.ru/clickhouse/deb/stable/ main/
-
-
остается еще этот ворнинг W: Conflicting distribution: http://repo.yandex.ru/clickhouse/deb/stable main/ Release (expected main/ but got clickhouse stable), но с ним можно жить
-
Большое спасибо, работает.
один из ворнингов: W: Conflicting distribution: http://repo.yandex.ru/clickhouse/deb/stable main/ Release (expected main/ but got clickhouse stable) я так понимаю, что это из-за "унификации" -
-
-
Планируется. Есть пакеты, но мы ещё не успели их туда залить.
-
Про weak digest algorithm посмотрели и что-то исправили.
-
1. взять файл из clickhouse - debian/.pbuilderrc и положить его в -odbc в debian/.pbuilderrc
2. запустить: sudo DIST=artful ARCH=i386 pbuilder create —configfile debian/.pbuilderrc && DIST=artful ARCH=i386 pdebuild —configfile debian/.pbuilderrc
3 - вот он, /var/cache/pbuilder/artful-i386/result/clickhouse-odbc_1.1.1_i386.deb - 16 March 2018 (237 messages)
-
Помогите, пожалуйста! После обновления до 1.1.54362 получаю ошибку Size of filter doesn't match size of column при работе со свежедобавленным столбцом с прописанным дефолтным значением (т.е. согласно документации, ch значение налету вычисляет для созданных ранее записей). Например, select sum(ve) from nr_views_t8 - так работает, а так нет: select sum(ve) from nr_views_t8 where a_s_o=1. ve UInt8 DEFAULT 1
-
Мы пока ещё не сталкивались с такой проблемой (хотя тоже недавно обновились до 54362).
Поэтому нужна диагностика.
Проверьте, не исчезает ли ошибка, если выставить
SET optimize_move_to_prewhere = 0
Также попробуйте выбрать какой-нибудь минимальный кусок данных, на котором проявляется проблема. Как это сделать? Смотрите, какие есть куски данных с помощью SELECT * FROM system.parts WHERE active AND table = 'nr_views_t8'. name - это имя куска данных.
В оригинальный запрос SELECT из nr_views_t8 можно добавить условие на кусок данных, вот так:
... AND _part = 'name'
Если есть такой небольшой кусок данных, то вы можете достать его из файловой системы и переслать нам (clickhouse-feedback@yandex-team.ru). Понадобится также схема таблицы. -
Там не просто в папку закинул и всё. В общем решение сделать общий репозиторий правильное и рано или поздно это сделать бы пришлось. Единственное что это произошло несколько внезапно.
-
Joined.
-
Коллеги, для КХ это стандартное поведение что при вставке поля DateTime КХ его модифицирует и приводит к своей таймзоне ?
-
можно ли через http запрос, как то указать КХ не модифицировать время
-
может при чтении преобразовывается дата к установленной таймзоне?
-
https://clickhouse.yandex/docs/ru/data_types/datetime/
По умолчанию клиент переключается на часовой пояс сервера при подключении. Это поведение можно изменить, включив у клиента параметр командной строки --use_client_time_zone. -
А в случае вставки по http?
-
это на отображение влияет
-
хранится она в unix timestamp формате
-
-
Подскажите, есть нормальный способ в python получать данные запроса не одним огромным списком, а вычитывать потоково? Есть хоть одна библиотека, умеющая это?
-
так и есть
-
Http запрос и декодировать стрим?
-
нужно поставить зону в клиенте, которым читаете
-
То есть "нет, пиши сам"?
-
использую Datagrip, но в нем какие то траблы с настройкой таймзоны
-
скорее это один из вариантов )
-
а можете рассказать, как вы датагрип прикрутили?
-
-
вот через него и подключился, впринципе завелся без проблем
-
-
-
-
Вот эта https://github.com/mymarilyn/clickhouse-driver с нативным протоколом работает, в нем (протоколе) есть возможность не все сразу вытаскиватьGitHub - mymarilyn/clickhouse-driver: ClickHouse Python Driver with native interface support
ClickHouse Python Driver with native interface support - GitHub - mymarilyn/clickhouse-driver: ClickHouse Python Driver with native interface support
-
В ClickHouse не только HTTP интерфейс есть
-
ага
-
-
вот по этому туториалу
http://blog.magazov.com/clickhouse-intellij-idea/Clickhouse + Intellij IdeaЧтобы подключить clickhouse к вашему любимому продукту от JetBrains, выкачаем репозиторий с jdbc клиентом: ➜ git clone https://github.com/yandex/clickhouse-jdbc.git соберем драйвер: ➜ cd clickhouse-jdbc ➜ mvn package assembly:single -DskipTests=true В директори target/ получим наш jar ➜ clickhouse-jdbc git:(master) ls target/*dependencies.jar target/clickhouse-jdbc-0.1-SNAPSHOT-jar-with-dependencies.jar Открываем
-
драйвер из коробки тоже не сразу заработал, помогло переключить java на 8ую версию и собрать пакет вручную
-
не помогло(
-
Вот с ним как раз и мучаюсь, он долго синхронно загружает все данные и потом выплевывает единым списком
-
спасибо
-
Тут где-то автор был, можно попробовать с ним связаться, в нативном протоколе данные передаются блоками, т.е. не нужно вытягивать весь результат перед тем как начать отдавать
-
-
чет и у меня не взлетело(
-
-
Добрый день. Вам нужна асинхронность или потоковая обработка данных?
-
какая версия java ?
-
-
-
Moiseevs-MacBook-Pro:clickhouse-jdbc mo1seev$ java -version
java version "9.0.4"
Java(TM) SE Runtime Environment (build 9.0.4+11)
Java HotSpot(TM) 64-Bit Server VM (build 9.0.4+11, mixed mode) -
-
Потоковое вычитывание данных
-
Такой возможности пока нет. Возможно в будущем оно появится
-
-
Да я собственно для себя уже начал добавлять поддержку, но она пока не очень стабильно работает
-
в 9 класса Loggerfactory нету, поставь 8
-
в процессе
-
пасиба, завелось!
-
-
Подскажите не работает autopurge в зукепере. В конфиге
autopurge.snapRetainCount=10
autopurge.purgeInterval=1
snapCount=3000000
когда zkCleanup.sh запускаю ничего не происходит. Если из доки зукипера взять java -cp zookeeper.jar:log4j.jar:conf org.apache.zookeeper.server.PurgeTxnLog /opt/zoo/data/ /opt/zoo/logs/ -n 10 то выдает Error: Could not find or load main class org.apache.zookeeper.server.PurgeTxnLog -
-
-
Привет!
Есть ли возможность поулчать данные в формате JSON: Ключ => Значение, с вычисляемым ключом?
Пример (псевдо код, так конечно не работает):
>SELECT 1 as NOW() FORMAT JSONEachRow
Желаемый результат:
>{"2018-03-16 14:13:52":1}
Можно было бы написать так и потом привести в нужный формат в своей программе, это решение не подходит:
>SELECT 1, NOW() FORMAT JSONEachRow -
-
Структура будет известна и определяется группировкой. Например "UserId" => "Какие то данные группировки по пользователю"
-
-
Завел пару тикетов на гитхабе по ODBC. Посмотрите, пожалуйста, как будет время.
https://github.com/yandex/clickhouse-odbc/issues/67ODBC with Tableau #67Hi, I have a problem with ODBC using Tableau. Outcoming query: SELECT CAST({fn TRUNCATE(EXTRACT(YEAR FROM `adv_watch`.`rocket_date`),0)} AS INTEGER) AS `yr_rocket_date_ok` FROM `adv_watch` GROUP BY...
-
там есть тикеты без ответа около 20 дней, скорее здесь ответят или на фриноде
-
SET optimize_move_to_prewhere = 0 помогло, спасибо! Но в момент написания просьбы о помощи не помогало. Правда тогда я пробовал почти сразу после апгрейда, может это повлияло. И да - если написать запрос с prewhere, ошибка есть. прогнал с условием по _part - ошибка на всех больших кусках (больше 4ГБ), на остальных ( менее 1ГБ) её нет.
-
там скорее не вопросы, а баг-репорты. В чате забудется и потеряется :)
-
Кликхаус пока не понимает EXTRACT , проблема известная, скоро поправим
-
-
а как-то возомжно изменить тип столбца, у которого указано default? я хочу добавить столбец, с помощью default "заполнить" его какими-то значениями, а потом поменять тип, что бы все дефолтные значения записались на диск и у колонки не было дефолтного значения. что бы optimize final не делать..
-
без optimize final default данные не запишутся на диск, если столбец новый
-
мы делали так: добавляли столбец с default, делали optimize final, потом убирали default. Другого способа не нашли
-
Всем привет!
Помогите, пожалуйста, привести дату '2017-04-13' к виду DD.MM.YYYY -
Нужно использовать substring? Или можно как-то еще?
-
:) select replaceAll(toString(toDate(now())), '-', '.') as new_date_format
SELECT replaceAll(toString(toDate(now())), '-', '.') AS new_date_format
┌─new_date_format─┐
│ 2018.03.16 │
└─────────────────┘
1 rows in set. Elapsed: 0.002 sec.
:)
А так нельзя? -
хотят сначала день, потом месяц и в конце год
-
-
Как то так
select replaceRegexpOne('2018-03-15', '(\\d{4})-(\\d{2})-(\\d{2})', '\\3.\\2.\\1') AS d
Поправил -
-
Э... Есть же всякие toDayOfMonth() и т.п.
-
-
может, сразу sprintf?
-
Нет, тут же даты. Вот пример https://www.postgresql.org/docs/9.5/static/functions-formatting.html
-
я тоже привыкла к to_char.
Всем большое спасибо! -
Что делаю не так http://joxi.ru/ZrJGWNLi1Y4o3m?
-
мб добавить в таблицу столбец date Date DEFAULT toDate(created) и по нему мержить?
-
created_date MATERIALIZED toDate(created)
и в ENGINE его добавь -
1) Вставляете скриншоты
2) Для всего используете String
) -
Я вообще такое хотел: есть таблица с движком MySQL, которая смотрит на большую таблицу в мускуле (23кк строк). И создать таблицу по образу
-
Про стринг понятно, а что не так со скриншотами?
-
-
Ну, код обычно текстом вставлять лучше, можно скопипастить и посмотреть что не так
-
А есть ли какой-то движок / способ который при слиянии позволял бы УДАЛЯТЬ ненужные строки? Задача на самом деле - позволить изменять некоторые столбцы, входящие в PK. ReplacingMegreTree не схлопнет 2 строки если у них отличается PK. Вот если бы можно было рядом со старой строкой вставить новую c тем же PK и скажем флагом "удали это" и вставить ещё раз новую строку с новым PK.
-
-
Часто нужно обновлять?
-
И кстати что это за зверь: VersionedCollapsingMergeTree ,
-
?
-
VersionedCollapsingMergeTree - расширение (и в некотором смысле упрощение) функциональности CollapsingMergeTree. Разработано для Яндекс.Метрики. Чтобы было действительно понятно, зачем оно понадобилась - какой сценарий использования, придётся написать более подробный текст...
Может быть @kochetovnicolai в этом поможет. -
-
CREATE TABLE referer_histories_copy ( _id String, guestId String, nginxRequestId String, originalUrl String, referer String, ip String, userAgent String, created Date, userId String, landing String, groupRef String, groupName String, created_date MATERIALIZED toDate(created)) ENGINE=MergeTree(toDate(created_date), (create_date, userId), 8192)
-
Не помогло с MATERIALIZED, такое ощущение что какой-то символ что ли не нравится
-
очень хочется чтобы replacingmergetree без танцев с бубном отдавал сразу последние версии записей.
и сортировку desc по primary key
мечты -
created_date, а не строку в параметры движка пихайте, без вызова функции
-
ENGINE = MergeTree(created_date,...
-
Скорее редко. В принципе эта планируемая реализация UPDATE / DELETE должна удовлетворить эти потребности (речь не о GDPR, а о скажем так - исправлению ошибок после неверной конфигурации тракинга) если использовать достаточно мелкие партиции.
-
Если партиции мелкие то можно перелить без этих ключей в новую партицию, а старую дропнуть
-
Ну в принципе тоже можно бы. Только момент переливания получится эээ... неловкий. В смысле будет какой-то (пусть небольшой) момент времени когда партиция отсутствует.
-
Атомарности не хватает этому варианту.
-
можно заливать в другую таблицу с такой же структурой и делать ренейм партиций) в пару секунд уложитесь)
-
Спасибо, помогло. Был почему-то уверен что в MergeTree можно вызвать toDate
-
-
-
зачем писать toDate второй раз???
-
Ошибка копипасты
-
ну в общем суть ошибки которая написана
поле даты должно быть просто именем а не функцией -
Joined.
-
CH возвращает после импорта какой-либо код ?
-
-
Joined.
-
всем привет!
у меня есть таблица 10 миллионов записей, движок CollapsingMergeTree
я пытаюсь с помощью inserta обновить первую запись в этой таблице
optimize не схлопывает 1ую и последнюю записи
при этом если добавить новую запись и обновить ее через схлопывание то все работает
подскажите пожалуйста в чем может быть проблема? -
А что у вас в
select distinct name from system.parts where active and table = 'ваша таблица' ? -
подозреваю, что вопрос глупый, но: я действительно не могу добавить колонку в таблицу, полученную из dictionary?:(
:) alter table offers add column flow String;
ALTER TABLE offers
ADD COLUMN
flow String
Received exception from server (version 1.1.54343):
Code: 48. DB::Exception: Received from localhost:9000, ::1. DB::Exception: Method alter is not supported by storage Dictionary. -
┌─partition─┐
│ 201301 │
│ 201302 │
│ 201303 │
│ 201304 │
│ 201305 │
│ 201306 │
│ 201307 │
│ 201308 │
│ 201309 │
│ 201310 │
│ 201311 │
│ 201312 │
│ 201401 │
┌─partition─┐
│ 201301 │
│ 201302 │
│ 201303 │
│ 201304 │
│ 201305 │
│ 201306 │
│ 201307 │
│ 201308 │
│ 201309 │
│ 201310 │
│ 201311 │
│ 201312 │
│ 201401 │ -
Это я там напутал, нужно не partition, а name. Скорее всего они (записи), лежат в кусках которые между собой ещё не мержились
-
Да, не можете, ClickHouse вам об этом намекает своим Exception
-
─name──────────────────────────┐
│ 20130101_20130131_1_89_16 │
│ 20130131_20130131_90_90_0 │
│ 20130101_20130101_1070_1070_0 │
│ 20130201_20130227_91_166_14 │
│ 20130227_20130228_167_171_1 │
│ 20130301_20130331_172_261_16 │
│ 20130331_20130331_262_262_0 │
│ 20130401_20130429_263_344_15 │
│ 20130429_20130430_345_349_1 │
│ 20130501_20130529_350_431_15 │
│ 20130529_20130531_432_439_2 │
│ 20130601_20130629_440_521_15 │
│ 20130629_20130630_522_527_1 │
│ 20130701_20130731_528_617_16 │
│ 20130801_20130831_618_707_16 │
│ 20130901_20130929_708_789_15 │
│ 20130929_20130930_790_795_1 │
│ 20131001_20131031_796_884_16 │
│ 20131031_20131031_885_885_0 │
│ 20131101_20131129_886_967_15 │
│ 20131129_20131130_968_972_1 │
│ 20131201_20131231_973_1062_16 │
│ 20131231_20131231_1063_1063_0 │
│ 20140101_20140101_1064_1073_3 -
я же делал optimize table hit
-
он не сработал