- 01 August 2019 (308 messages)
-
Joined.
-
Привет всем. Подскажите плиз, как достать только дату(или месяц, год) как число ? Например отсюда 2019-07-30 достаем только дату 30 или месяц 7.
-
-
Разобрался, спасибо
-
-
Вопрос к знатокам движков *GraphiteMergeTree, если я вырежу из правил прореживания(graphite_retentions)
первое условие про возраст метрик в 0 сеукнд, и осталю только
<age>86400</age>
<precision>60</precision>
это избавит КХ от необходимости прореживать сегодняшние данные, или так нельзя ? -
Все так. У меня как раз так и настроено.
-
Спасибо
-
Joined.
-
Доброе утро. У меня вопрос - можно ли отключить ротацию логов самим Кликхаусом и отдать ротацию логротейту? Спасибо)
-
а если поставитть size 0 в logger?
-
надо попробовать, я думал есть более простой метод, типа флага false
-
with [1, 2, 3] as a
select a, arrayMap(x->a[x+1], arrayEnumerate(a)) -
У меня 70 миллионов записей
-
-
Ох, отлично
-
Всем привет, подскажите в какую сторону посмотреть, нужно составить запрос, который будет возвращать для каждого начала часа среднее значение столбца за предыдущие сутки. Не глубоко разбираюсь в SQL и поэтому застрял.
-
чтот через join не получается собрать, либо я не туда смотрю(((
-
create table tmp_del_me(dt DateTime, qty UInt16) Engine = Log;
insert into tmp_del_me(dt, qty) values ('2019-07-01 10:00:00', 1), ('2019-07-01 10:30:00', 3), ('2019-08-01 10:00:00', 10), ('2019-08-01 10:30:00', 30), ('2019-08-01 11:00:00', 20), ('2019-08-01 11:30:00', 50);
select
dt_
, avg_qty
, runningDifferenceStartingWithFirstValue(hou) = 0 ? avg_qty - runningDifferenceStartingWithFirstValue(avg_qty) : 0 as prev_avg_qty
from
(
select
toStartOfHour(dt) as dt_
, toHour(dt_) as hou
, avg(qty) as avg_qty
from tmp_del_me
group by dt_
order by hou, dt_
); -
Спасибо большое, сейчс пересмотрю!
-
падает кликхаус от такого
-
Как крайний случай задрать значенияд о высоких, чтобы просто не достигать лимитов. Можно попробовтаь дефолты глянутть, если эти опции совсем убрать.
-
Любим и практикуем рассказывать истории об успехах, которых добиваются компании в Облаке.
Сегодня кейс AdsCompass - платформы по монетизации интернет-трафика. С помощью облачного сервиса управляемой базы данных ClickHouse компания снизила затраты на обслуживание растущего бизнеса и повысила стабильность работы с данными клиентов.
https://cloud.yandex.ru/blog/posts/2019/07/case-adsОпыт AdsCompass: оптимальная поддержка кластера в Yandex Managed Service for ClickHouseКак повысить стабильность и снизить затраты на поддержку.
-
салют всем!
у кого есть успешный опыт выполнения запроса по odbc из ch?
вот как можно объяснить, что я могу подключиться isql -v myconnection и выполнить запрос, получить данные.
когда я делаю тоже самое из CH, SELECT * FROM odbc('DSN=myconnection', 'sspdb', 'site_asdtxt') limit 1;
Received exception from server (version 19.7.3):
Code: 86. DB::Exception: Received from localhost:9000, ::1. DB::Exception: Received error from remote server /columns_info?connection_string=DSN%3Dmyconnection&schema=sspdb&table=site_asdtxt. HTTP status code: 500 Internal Server Error, body: Error getting columns from ODBC 'Poco::Exception. Code: 1000, e.code() = 0, e.displayText() = Connection attempt failed: Connection:Not applicable
Server:Not applicable
===========================
ODBC Diagnostic record #1:
===========================
SQLSTATE = IM002
Native Error Code = 0
[unixODBC][Driver Manager]Data source name not found, and no default driver specified
все делал согласно этому гайду - https://clickhouse.yandex/docs/en/query_language/dicts/external_dicts_dict_sources/#example-of-connecting-postgresql -
по идее где то в системных таблицах должна быть написана текущая конфига DSN. Можно было бы посмотреть и выцепить.
-
а лучше бы конечно конфигурацию из кх сюда скинуть
-
это .odbc.ini
[DEFAULT]
Driver = myconnection
[myconnection]
Driver = PostgreSQL Unicode
Description = PostgreSQL connection to sspdb
Database = sspdb
Servername = 127.0.0.1
UserName = ssp
Password = ssp
Port = 5432
Protocol = 11.3
ReadOnly = No
RowVersioning = No
ShowSystemTables = No
ConnSettings =
<yandex>
<dictionary>
<name>local_pg_sspdb_site_adstxt</name>
<source>
<odbc>
<!-- You can specify the following parameters in connection_string: -->
<!-- DSN=myconnection;UID=username;PWD=password;HOST=127.0.0.1;PORT=5432;DATABASE=my_db -->
<connection_string>DSN=myconnection</connection_string>
<table>site_adstxt</table>
</odbc>
</source>
<lifetime>
<min>300</min>
<max>360</max>
</lifetime>
<layout>
<hashed/>
</layout>
<structure>
<id>
<name>id</name>
</id>
<attribute>
<name>domain</name>
<type>String</type>
<null_value>''</null_value>
</attribute>
<attribute>
<name>compliant</name>
<type>Int8</type>
<null_value>false</null_value>
</attribute>
<attribute>
<name>debug</name>
<type>String</type>
<null_value>''</null_value>
</attribute>
<attribute>
<name>last_modified_date_time</name>
<type>DateTime</type>
<null_value>now()</null_value>
</attribute>
</structure>
</dictionary>
</yandex> -
-
-
-
-
Добрый день! Проверьте меня и подскажите, как правильно по возможности. Хочу сделать из GraphiteMergeTree ReplicatedGraphite MergeTree с переносом данных.
Сейчас разворачиваю сервер который будет резервом(репликой). Как будет правильно перенести данные? Alter freeze,copy data & attach или лучше через clickhouse copier/backup?
Или банально insert into .. select ? -
Joined.
-
-
Driver = /usr/lib/psqlodbca.so
-
Зачем вам данные в старой таблице. Не проще просто переделать mt в RMT?
-
@den_crane, Из директории detached можно удалить те части, которые не удалось смержить?
-
Freeze создаёт хардлинки можно их использовать. Кх файлы не изменяет.
-
если они вам не нужны и все данные на месте. Что в логе то?
-
Ну при перезапуске кх старается примержить то, что в детачед, это у него естественно не получается, он выдает всё ту же ошибку с перекрытием частей, но продолжает работать дальше. Периодически кх запускает мержи с детачедом и ошибки повторяются. Полный текст ошибки могу скинуть через полчаса примерно, если нужно
-
-
ну надо было после attach partition отложить все из detached куда-нибудь. КХ на всех репликах при detach partition перекладывает detached, а при attch partition берет из detached только на той реплике где выполнили attch. На остальных все остается в detached и надо либо отложить в другой каталог для поиска недостающих данных либо удалить. У вас много осталось в detached на реплике на которой attach делали?
-
-
Я не понял этой фразы.
-
Много осталось в детачед на той реплике, где аттач не делали
-
ну я про это уже три раза сказал, это так и задумано
-
там все осталось
-
эта реплика все скачала с той где сделали attach
-
пробовал также указывать
пробовал, тоже самое -
-
И поэтому содержимое той папки не нужно
-
бридж запускается в своем окружении и похоже не видит пути lib, это началось с версии с бриджом как отдельный от КХ процесс.
-
это сложный вопрос, надо читать лог. Возможно там есть парты которые вставились но не реплицировались. Ну например вы смотрите в лог и в таблицу и нету данных за 484 час от 42 июля. И есть такой парт в detached. Читаем лог, что с этим произошло и как так получилось. Ну дальше все очевидно
-
В папке /data/dbname/tablename около 142 подпапок - это каждая партиция и её надо ручками заводить потом атачем?
-
-
А что хранится в UncompressedCache ? Из названия следует ,что декомпрессионные данные , но ч вот смотрю на исходник и не понимаю там ничего почти .я не C++ мастер (. Может кто пролить свет на это процесс. Хочется понять как это кэш работает.
-
у вас такой файл /usr/lib/psqlodbca.so вообще есть? Он может по другому называться.
-
КХ хранит данные на диске закомпрешеннно в lz4/zstd . И читает их через линуксовый кеш.
В UncompressedCache КХ хранит маленькие куски в декомресированном виде. -
А КХ значит сначала ищет эти кусочки в кэше ?
-
Если ищет , то каким образом? По каким параметрам он там ищет ?
-
Ага... Похоже он делает хэш от пути к файлу и офсета . Так ?
-
я не знаю, никогда не интересовался, у меня никогда данные не помещаются в UncompressedCache, нет таких мелких повторяющихся запросов.
-
Всем привет!
коллеги, столкнулся с проблемой что на одной из реплик начали выпадать куски и помечаться как broken, при чем за рандомные даты и в разных таблицах.
в логах вижу при этом
2019.08.01 08:51:06.998053 [ 42 ] {} <Error> default.event_shard (ReplicatedMergeTreePartCheckThread): DB::CheckResult DB::ReplicatedMergeTreePartCheckThread::checkPart(const String&): Code: 173, e.displayText() = DB::ErrnoExcepti
on: Allocator: Cannot malloc 64.00 KiB., errno: 12, strerror: Cannot allocate memory, Stack trace:
2019.08.01 08:51:06.998113 [ 42 ] {} <Error> default.event_shard (ReplicatedMergeTreePartCheckThread): Part 20190801_20190801_1194_2517_7 looks broken. Removing it and queueing a fetch.
может ли это быть связано с тем , что кх не смог посчитать чексумму из-за проблем с памятью и пометил их как broken или проблема в чем-то другом?
из гипотез были проверены так же диски, но с ними все ок.
пара таблиц в качестве эксперемента была полностью пересинхрена, но после ресинка куски также выпадают.
сетевых проблем между до реплики и зк, так же обнаружено не было, и проблема возникает ток на одной паре из 4х
версия 19.11.3.11 -
Спасибо. Тоже вижу , что не все туда попадают. Только маленькие запросы его используют. Но , например как КХ поймет использовать кэш или нет
-
Он же не знает заранее объем выборки
-
None
-
Всем привет !
Вопрос: реально и поднять в докерконтейнере кликхаус размером в полтора террабайта и свой сервис который агрегирует с него данные и посомтреть логи на каком запросе он падает ? -
у меня он такой /usr/lib/x86_64-linux-gnu/odbc/psqlodbcw.so
-
вы lowcardinality испольуете? в брокен парте есть .dict. file?
-
Кому может любопытно . Это кэш только для мерд трии . У нас как рас был кейс, что маленькие таблицы типа лог медленнее , чем mergetree. Похоже, что дело в Кеше было
-
да, и вообще-то этот кеш выключен по умолчанию
-
таблицы log работают совсем по другому и они не для хранения данных, и там нет индекса. Попробуйте stripelog , там больше параллельность обработки.
-
И кто это может запретить? Логи в файлы, файлы смотреть либо средствами докера, либо просто перенаправить каталог через опцию -v /<каталог за пределами докера>:/var/log/clickhouse-server и смотреть любым привычным способом.
-
Лог наверное и не паралелится ?
-
Я про то, что из мерджтри запросы могут выполнятся несколькими потоками . А для лога такое возможно ?
-
-
Засечки пишутся на каждый блок данных и содержат смещение - с какого места нужно читать файл, чтобы пропустить заданное количество строк. Это позволяет читать данные из таблицы в несколько потоков.
https://clickhouse.yandex/docs/ru/operations/table_engines/log/
https://clickhouse.yandex/docs/ru/operations/table_engines/log_family/ -
не используем, в брокенах такого файла нет
-
Приветствую!
Что может значить вот такой ответ сервера на попытку вставки?
HTTP/1.1 500 Internal Server Error
Date: Thu, 01 Aug 2019 10:04:49 GMT
Connection: Keep-Alive
Content-Type: text/plain; charset=UTF-8
X-ClickHouse-Server-Display-Name: **.com
Transfer-Encoding: chunked
Keep-Alive: timeout=3
402
Code: 171, e.displayText() = DB::Exception: Block structure mismatch in Buffer stream: different types:
body String String(size = 32), ..., ts DateTime UInt32(size = 32)
body String String(size = 0), ..., ts DateTime UInt32(size = 0), e.what() = DB::Exception
0
HTTP/1.1 400 Bad Request
Connection: Close
(код вставки отлажен и обычно срабатывает) -
попробовали в rollup-файле убрать все агркгации из первых суток, а у нас один файл используется и КХ и graphite-clickhouse, так второй стал считать, что все точки должны быть(за каждую секунду) и графики превратились в облако точек. Вы используете разные правила для КХ и бэкенда ?
-
Мужики, сколько ключей в списке КХ может съесть в запросе where in [list]?
И есть ли вариант что делать если этих ключей нужно очень много? -
По ключам тащить из кх вроде долговато будет
-
нашел косяк с odbc, оказывается в /etc/odbcinst.ini
были дефолтные конфиги:
[PostgreSQL ANSI]
Description=PostgreSQL ODBC driver (ANSI version)
Driver=psqlodbca.so
Setup=libodbcpsqlS.so
Debug=0
CommLog=1
UsageCount=1
[PostgreSQL Unicode]
Description=PostgreSQL ODBC driver (Unicode version)
Driver=psqlodbcw.so
Setup=libodbcpsqlS.so
Debug=0
CommLog=1
UsageCount=1
которые видимо имени больший приоритет, указал правильные конфиги для .so файлов и завелось -
-
Using ODBC with Clickhouse
20 Sept 2018This article shows different ways of how you can use ClickHouse in connection with other data sources to make queries use all of ClickHouse optimization features in order to make results come faster. Also, it is good practice when you have some infrastructure elements already linked to some other data sources or tools that supports ODBC.
-
Ребята спасались уменьшая index_granularity, если нужна была выборка конкретных значений
-
Но тем не менее вопрос, как загнать большой пул ключей которые надо выдернуть =/
-
Я использую автодискавери правил в graphite clickhouse и параметр default rollup который туда когда-то закоммитил. Он указывает интервал усреднения по умолчанию для тех точек которые не попадают в интервалы в КХ т.е. в данном случае для первых суток
-
сколько угодно, есть ограничение на размер sql запроса в MB и размер AST их можно увеиличивать до сколько хотите
> И есть ли вариант что делать если этих ключей нужно очень много?
external data https://clickhouse.yandex/docs/en/operations/table_engines/external_data/External Data | ClickHouse DocumentationExternal Data for Query Processing ClickHouse allows sending a server the data that is needed for processing a query, to
-
Можно поподробнее? То есть оставялем одно умолчальное правило, скажем , по-умолчанию - 1 точка в секунду и бэкенд сам будет рисовать ежеминутные точки, если из БД не вычитал больше ?
-
вообще вещи малосвзязанные, КХ будет использовать индекс пока значений меньше ~<100 тыс в списке (или как-то хитрее теперь, от размера блока зависит), но и без индекса все будет работать, хоть миллиард в списке, другое дело как вам список на сервер доставить
-
Ну ты убрал правило для последних суток. Соответственно графит кх не знает как выводить этот интервал и рисует тебе его как есть. Поэтому для таких интервалов можно задать дефолтное усреднение допустим 1 минута
-
поменял пока оверкомит и уменьшил потребление памяти, посмотрим повторится ли после ресинка побитых данных
-
то есть в настройках не используем "auto" вместо имени файла-схемы, а в схеме только дефолт, остальное - из КХ , верно ?
-
Именно в этом и вопрос. Есть ли практики как загнать толстый where in [...list...]
-
Используем авто. Он прочитает из кх те правила какие есть, а для тех интервалов которые не покрываются правилами т.е. в твоем случае первые сутки он будет юзать дефолт
-
тогда не знаю, попробуйте напрямую передать сам брокен парт Миловидову или Сапину. Чтобы они посмотрели на самом деле сломан или чекер ломается.
-
Создать таблицу, записать в нее и потом where in (select)
-
сколько угодно, есть ограничение на размер sql запроса в MB и размер AST их можно увеиличивать до сколько хотите
> И есть ли вариант что делать если этих ключей нужно очень много?
external data https://clickhouse.yandex/docs/en/operations/table_engines/external_data/ -
external data специально для этого
-
дефолт где описан , в конфиге КХ или graphite-clickhouse ?
Это в 0.11 добавили, нужно обновиться -
external data - ой жара, спасибо. Странно что поисковик меня на эту страницу так и не привел(
-
А есть ли функционал для ручной проверки чексумм и партов, например optimize?
-
rollup-default-precision = 60
rollup-default-function = "avg"
В графит кх -
ок, спасибо
-
по-моему нет
-
Joined.
-
Joined.
-
Коллеги, вопрос следующего толка:
"Существует возможность задать первичный ключ .... отличный от ключа сортировки"
А где пример глянуть? -
-
при создании MergeTree видимо
Order by (field1, field2),
Primary key (field1) -
create table X (A Int64, B String) Engine=MergeTree primary key A order by (A,B);
-
спасибо! не знал про синтаксис primary key
-
Joined.
-
это полезно для агрегатов(summing, aggregating), добавлять дименшины
alter table X add column C String modify order by (A,B,C);
и индекс полегче, а то у меня 30 полей в order by -
-
нет, тут все по 40 млрд в день вставляют в таблицы из 500 полей
-
это основной usecase
-
сори за оффтоп, но это не сарказм? реально 40 лярдов строк в таблицу из 500 полей?
-
Order by tuple () ... Это как ? Сейчас увидел такую конструкцию при создании таблицы
-
А если он отдает Allocator: Cannot malloc 64.08 KiB., errno: 12, strerror: Cannot allocate memory?
-
нет не сарказм, зависит от железа, у меня тестовый сервер (64 ГБ озу, 1 cpu слабенький, 2 жестких в raid1) вставляет 1 млрд в сутки в таблицу из 500 полей
-
-
без сортировки.
-
Можно , но они все равно будут "связаны". Первичный ключ будет префиксом ключа сортировки
-
и? вы дали 0 информации, может быть что угодно. Я могу такую ошибку 20 способами устроить.
-
[2019-08-01 14:57:31] Code: 53, e.displayText() = DB::Exception: Type mismatch in IN or VALUES section. Expected: String. Got: UInt64 (version 19.5.2.6 (official build))
Ребятки, а нет никакого способа сделать так что бы показало на какой позиции? У меня полей там тьма -
-
2019.08.01 11:56:18.851824 [ 190 ] {} <Error> BaseDaemon: ########################################
2019.08.01 11:56:18.851888 [ 190 ] {} <Error> BaseDaemon: (version 19.10.1.5 (official build)) (from thread 143) Received signal Segmentation fault (11).
2019.08.01 11:56:18.851905 [ 190 ] {} <Error> BaseDaemon: Address: 0xb588
2019.08.01 11:56:18.851916 [ 190 ] {} <Error> BaseDaemon: Access: read.
2019.08.01 11:56:18.851939 [ 190 ] {} <Error> BaseDaemon: Address not mapped to object.
2019.08.01 11:56:18.918411 [ 190 ] {} <Error> BaseDaemon: 0. /usr/bin/clickhouse-server(DB::MergeTreeReaderStream::MergeTreeReaderStream(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11:
:basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned long, std::vector<DB::MarkRange, std::allocator<DB::MarkRange> > const&, DB::MarkCache*, bool, DB::UncompressedCache*, unsigned long, unsigned long, unsig
ned long, DB::MergeTreeData::IndexGranularityInfo const*, std::function<void (DB::ReadBufferFromFileBase::ProfileInfo)> const&, int)+0x22d) [0x6a2901d]
2019.08.01 11:56:18.918442 [ 190 ] {} <Error> BaseDaemon: 1. /usr/bin/clickhouse-server() [0x6db4bef]
2019.08.01 11:56:18.918459 [ 190 ] {} <Error> BaseDaemon: 2. /usr/bin/clickhouse-server(DB::MergeTreeReader::addStreams(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, DB::IDataType const&, std::fun
ction<void (DB::ReadBufferFromFileBase::ProfileInfo)> const&, int)+0xa9) [0x6db4239]
2019.08.01 11:56:18.918494 [ 190 ] {} <Error> BaseDaemon: 3. /usr/bin/clickhouse-server(DB::MergeTreeReader::MergeTreeReader(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::shared_ptr<DB::Merge
TreeDataPart const> const&, DB::NamesAndTypesList const&, DB::UncompressedCache*, DB::MarkCache*, bool, DB::MergeTreeData const&, std::vector<DB::MarkRange, std::allocator<DB::MarkRange> > const&, unsigned long, unsigned long, std::map<st
d::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, double, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const, double> > > const&, std::function<void (DB::ReadBufferFromFileBase::ProfileInfo)> const&, int)+0x319) [0x6db5e19]
2019.08.01 11:56:18.918508 [ 190 ] {} <Error> BaseDaemon: 4. /usr/bin/clickhouse-server(DB::MergeTreeThreadSelectBlockInputStream::getNewTask()+0x7e3) [0x6a47893]
2019.08.01 11:56:18.918522 [ 190 ] {} <Error> BaseDaemon: 5. /usr/bin/clickhouse-server(DB::MergeTreeBaseSelectBlockInputStream::readImpl()+0x43e) [0x6da3afe]
2019.08.01 11:56:18.918533 [ 190 ] {} <Error> BaseDaemon: 6. /usr/bin/clickhouse-server(DB::IBlockInputStream::read()+0x188) [0x65c1b08]
2019.08.01 11:56:18.918544 [ 190 ] {} <Error> BaseDaemon: 7. /usr/bin/clickhouse-server(DB::ExpressionBlockInputStream::readImpl()+0x2d) [0x6ba366d]
2019.08.01 11:56:18.918555 [ 190 ] {} <Error> BaseDaemon: 8. /usr/bin/clickhouse-server(DB::IBlockInputStream::read()+0x188) [0x65c1b08]
2019.08.01 11:56:18.918572 [ 190 ] {} <Error> BaseDaemon: 9. /usr/bin/clickhouse-server(DB::ParallelInputsProcessor<DB::UnionBlockInputStream::Handler>::thread(std::shared_ptr<DB::ThreadGroupStatus>, unsigned long)+0x304) [0x6721b14]
2019.08.01 11:56:18.918591 [ 190 ] {} <Error> BaseDaemon: 10. /usr/bin/clickhouse-server(ThreadFromGlobalPool::ThreadFromGlobalPool<DB::ParallelInputsProcessor<DB::UnionBlockInputStream::Handler>::process()::{lambda()#1}>(DB::ParallelInpu
tsProcessor<DB::UnionBlockInputStream::Handler>::process()::{lambda()#1}&&)::{lambda()#1}::operator()() const+0x6d) [0x67225bd]
2019.08.01 11:56:18.918603 [ 190 ] {} <Error> BaseDaemon: 11. /usr/bin/clickhouse-server(ThreadPoolImpl<std::thread>::worker(std::_List_iterator<std::thread>)+0x1af) [0x72ec28f]
2019.08.01 11:56:18.918614 [ 190 ] {} <Error> BaseDaemon: 12. /usr/bin/clickhouse-server() [0xb20db9f] -
2019.08.01 11:56:18.918624 [ 190 ] {} <Error> BaseDaemon: 13. /lib/x86_64-linux-gnu/libpthread.so.0(+0x76db) [0x7f29802276db]
2019.08.01 11:56:18.965231 [ 190 ] {} <Error> BaseDaemon: ########################################
2019.08.01 11:56:18.965266 [ 190 ] {} <Error> BaseDaemon: (version 19.10.1.5 (official build)) (from thread 172) Received signal Segmentation fault (11).
2019.08.01 11:56:18.965277 [ 190 ] {} <Error> BaseDaemon: Address: 0x19b98
2019.08.01 11:56:18.965287 [ 190 ] {} <Error> BaseDaemon: Access: read.
2019.08.01 11:56:18.965296 [ 190 ] {} <Error> BaseDaemon: Address not mapped to object.
2019.08.01 11:56:19.020924 [ 190 ] {} <Error> BaseDaemon: 0. /usr/bin/clickhouse-server(DB::MergeTreeReaderStream::MergeTreeReaderStream(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11:
:basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned long, std::vector<DB::MarkRange, std::allocator<DB::MarkRange> > const&, DB::MarkCache*, bool, DB::UncompressedCache*, unsigned long, unsigned long, unsig
ned long, DB::MergeTreeData::IndexGranularityInfo const*, std::function<void (DB::ReadBufferFromFileBase::ProfileInfo)> const&, int)+0x22d) [0x6a2901d]
2019.08.01 11:56:19.020952 [ 190 ] {} <Error> BaseDaemon: 1. /usr/bin/clickhouse-server() [0x6db4bef]
2019.08.01 11:56:19.020968 [ 190 ] {} <Error> BaseDaemon: 2. /usr/bin/clickhouse-server(DB::MergeTreeReader::addStreams(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, DB::IDataType const&, std::fun
ction<void (DB::ReadBufferFromFileBase::ProfileInfo)> const&, int)+0xa9) [0x6db4239]
2019.08.01 11:56:19.020999 [ 190 ] {} <Error> BaseDaemon: 3. /usr/bin/clickhouse-server(DB::MergeTreeReader::MergeTreeReader(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::shared_ptr<DB::Merge
TreeDataPart const> const&, DB::NamesAndTypesList const&, DB::UncompressedCache*, DB::MarkCache*, bool, DB::MergeTreeData const&, std::vector<DB::MarkRange, std::allocator<DB::MarkRange> > const&, unsigned long, unsigned long, std::map<st
d::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, double, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const, double> > > const&, std::function<void (DB::ReadBufferFromFileBase::ProfileInfo)> const&, int)+0x319) [0x6db5e19]
2019.08.01 11:56:19.021019 [ 190 ] {} <Error> BaseDaemon: 4. /usr/bin/clickhouse-server(DB::MergeTreeThreadSelectBlockInputStream::getNewTask()+0x7e3) [0x6a47893]
2019.08.01 11:56:19.021031 [ 190 ] {} <Error> BaseDaemon: 5. /usr/bin/clickhouse-server(DB::MergeTreeBaseSelectBlockInputStream::readImpl()+0x43e) [0x6da3afe]
2019.08.01 11:56:19.021042 [ 190 ] {} <Error> BaseDaemon: 6. /usr/bin/clickhouse-server(DB::IBlockInputStream::read()+0x188) [0x65c1b08]
2019.08.01 11:56:19.021053 [ 190 ] {} <Error> BaseDaemon: 7. /usr/bin/clickhouse-server(DB::ExpressionBlockInputStream::readImpl()+0x2d) [0x6ba366d]
2019.08.01 11:56:19.021064 [ 190 ] {} <Error> BaseDaemon: 8. /usr/bin/clickhouse-server(DB::IBlockInputStream::read()+0x188) [0x65c1b08]
2019.08.01 11:56:19.021079 [ 190 ] {} <Error> BaseDaemon: 9. /usr/bin/clickhouse-server(DB::ParallelInputsProcessor<DB::UnionBlockInputStream::Handler>::thread(std::shared_ptr<DB::ThreadGroupStatus>, unsigned long)+0x304) [0x6721b14]
2019.08.01 11:56:19.021098 [ 190 ] {} <Error> BaseDaemon: 10. /usr/bin/clickhouse-server(ThreadFromGlobalPool::ThreadFromGlobalPool<DB::ParallelInputsProcessor<DB::UnionBlockInputStream::Handler>::process()::{lambda()#1}>(DB::ParallelInpu
tsProcessor<DB::UnionBlockInputStream::Handler>::process()::{lambda()#1}&&)::{lambda()#1}::operator()() const+0x6d) [0x67225bd]
2019.08.01 11:56:19.021111 [ 190 ] {} <Error> BaseDaemon: 11. /usr/bin/clickhouse-server(ThreadPoolImpl<std::thread>::worker(std::_List_iterator<std::thread>)+0x1af) [0x72ec28f] -
2019.08.01 11:56:19.021121 [ 190 ] {} <Error> BaseDaemon: 12. /usr/bin/clickhouse-server() [0xb20db9f]
2019.08.01 11:56:19.021131 [ 190 ] {} <Error> BaseDaemon: 13. /lib/x86_64-linux-gnu/libpthread.so.0(+0x76db) [0x7f29802276db] -
-
-
аа, это похоже на баг который в adaptive granularity. Там надо выключить ее, но не помню как.
-
-
по умолчанию она включена или выключена?
-
Joined.
-
Долгожданный ClickHouse Meetup в Москве состоится 5 сентября, уже можно регистрироваться: https://yandex.ru/promo/clickhouse/moscow-2019
Обратите внимание, что в программе большой слот выделен под доклады пользователей — не стесняйтесь в него записываться при заполнении формы.LinkПриглашаем технических специалистов на митап по ClickHouse. Разработчики системы расскажут о новых функциях и планах, а пользователи — о собственном опыте.
-
None
-
Joined.
-
-
Joined.
-
кнопка в Chrome не перемещает к форме регистрации
-
+
-
В сафари тоже самое
-
в ФФ тоже
-
спасибо, исправлено
-
-
по идее там большая форма, другие поля есть? в самом конце «Отправить»
-
-
что за телефон/браузер? и что происходит если пытаться скроллить между полями формы?
-
счас кстати при селектах отваливается. говорит, что не находит файлы
-
вы тикет создайте в гитхабе, с примерами ошибок, со структурой таблицы, с запросами на которых падает, с логами что делал (from thread 172)
-
-
нашел https://github.com/apoyan/kafka-clickhouse-docker, но он не заводитсяGitHub - apoyan/kafka-clickhouse-docker
Contribute to apoyan/kafka-clickhouse-docker development by creating an account on GitHub.
-
Привет всем,
подскажите, может ли КХ работать с zone offset
например select toDate(now(), '-12:00'); ?
или можно как то получить зону по оффсету?
конечная цель прибавить оффсет к времени/дате -
-
всем привет!
планируем добавить еще сервер под третий шард и реплику шарда соответственно
как грамотно сделать ?
мы планируем так
1. добавляем новый сервер и его реплику в блок описания структуры кластера remote_servers на всех существующих хостах
2. создаем таблицы replicated на новом хосте с той же структурой соответственно
3. перешардируем данные
что скажете? -
select toDate(now() - interval 12 hour)
-
Всем привет, подскажите, обновили на 19.11.4 и встал импорт из кафки
в ошибках ничего нет, в обычном логе такое ощущение что он читает не комитает в кафку
https://gist.github.com/simpl1g/aaaad69fc46bff961402a1a5d2e3c35cclickhouse-kafkaclickhouse-kafka. GitHub Gist: instantly share code, notes, and snippets.
-
>3. перешардируем данные
что???
1 и 2 я бы поменял местами -
Что за баг? Есть issue?
-
я подумал про https://github.com/yandex/ClickHouse/pull/6126Fix secondary indices write with adaptive granularity by alesapin · Pull Request #6126 · yandex/ClickHouse
I hereby agree to the terms of the CLA available at: https://yandex.ru/legal/cla/?lang=en For changelog. Remove if this is non-significant change. Category (leave one): Bug Fix Short description ...
-
-
Сможете сделать issue?
-
хотелось бы ISO 8601 : '+12:00', 'Z' ...
-
select addSeconds(now(), -25200); так тоже как бы работает, но не оч красиво
-
про перешардирование читал тут
https://clickhouse-docs.readthedocs.io/en/latest/table_engines/resharding.html -
вы там не читайте. Это лажа(устрело и выпилено 2 года назад). Читайте официальную доку. Нет никакого решардинга.
-
Надо бы этот сайт выпилить вообще. Меня тоже вначале путал...
-
хм.. спасибо что вовремя остновили))
-
недавно я эту тему поднимал поищите тут по "решардинг"
-
спасибо, сейчас поищу
-
-
nanoseconds внутри секунды можно хранить сбоку числом
-
-
это нормально что кликхаус комитает в кафку offset меньше чем до этого комитил?
2019.08.01 14:08:43.274182 [ 42 ] {} <Trace> StorageKafka (dashboard_stats_queue): Committed offset 39178653051 (topic: dashboard_stats, partition: 12)
2019.08.01 14:08:52.051062 [ 49 ] {} <Trace> StorageKafka (dashboard_stats_queue): Committed offset 39178646027 (topic: dashboard_stats, partition: 12) -
Вряд ли это нормально. А научите как?
-
обновили на свежий 19.11.4.24 c 19.11.3.11, должен был быть патч для https://github.com/yandex/ClickHouse/issues/5846
Больше ничего не трогалиKafka consumer stops - cppkafka::HandleException Local: Timed out · Issue #5846 · yandex/ClickHouseDescribe the bug ClickHouse Kafka consumer stops consuming from Kafka, and restarts after some time (from 0 up to 2 hours)... Restart of ClickHouse docker container helps imediately. Problem starte...
-
-
-
норм норм,а вот там провал в 14:15 это чо
-
кликхаус как-то теперь по 5 минут что-то делает, потом тупит
-
а диск как себя в это время ведёт
-
-
он не флушит кэш случайно не ?
-
каойнить sync не срабатывает ?
-
-
очень уж регулярно
-
я бы пошарился в syslog и других логах, что там случается в это время
-
-
-
Н-да. Я в ближайшие дни буду смотреть на то как можно улучшить тесты для кафки. Если есть предложения/пожелания какие сценарии должны быть проверены и покрыты тестами в первую/вторую и т.д. очередь - напишите мне в прив, пожалуйста. Потому что пока с тестами кафки у нас всё плохо и поэтому все эти проблемы и постоянные регрессии.
-
если присмотреца - там тоже есть провалы cpu user time, не настоьлко заметные но есть
-
и тоже регулярные
-
а есть статистика по диску ?
-
и свопу
-
на серваках 210 GB свободной оперативы, свопа нет
-
поищу, но так сходу нет
-
-
-
Попробуйте ещё 19.11. Версия 19.10 у нас получилась не очень, там нет многих фиксов.
-
-
А оно ваще такой режим поддерживает?
-
Для чего в таблицах делают следующие столбцы:
timestamp UInt32,
date Date,
hour UInt8,
Допустим, hour ещё можно понять, а для чего Date и Timestamp одновременно? Это какая-то денормализация? -
Так date это дата а таймстамп это с точностью до мс
-
А то и точнее
-
Может как pk его используют
-
По date может быть партицирование, а timestamp - в pkey
-
В принципе никто не мешает делать дату из таймштампа и по ней партиционировать
-
Где можно прочитать про правильный дизайн таблиц в КХ? Пришел в проект, тут юзают КХ, но допустим в ORDER BY засунули все столбцы (кроме timestamp).
-
create table shows
(
amount UInt32,
adv_uid UInt32,
web_uid UInt32,
subacc UInt32,
source UInt32,
category UInt8,
type UInt8,
country UInt16,
timestamp UInt32,
date Date,
hour UInt8,
ptype UInt8
)
engine = MergeTree() ORDER BY (adv_uid, web_uid, subacc, source, category, type, ptype, country, date,
hour) SETTINGS index_granularity = 8192;
вот полная DDL -
Есть подозрения, что не нужен тут такой ORDER BY.
-
Беги оттуда :)
-
тут как и в других СУБД, чем больше столбцов в индексе, тем жирнее этот индекс? И именно то что в ORDER BY описано, это то, по чему будут строиться выборки?
-
ну я так понимаю, партиционировать можно по дате, нужно чтобы не было много значений.
-
Индекс можно сделать меньше. Но в твоем случае да, он равен тому что в ордер бай т.к. primary key не указан
-
по партициям ясно, типо оптимизатор может сходить в нужные партиции, если допустим данные нужны за три последних дня.
-
а индекс как правильно подобрать, не совсем понимаю.
-
Joined.
-
От запросов зависит, как в любой субд
-
Ну и читать доки, смотреть канал КХ на ютубе там много полезного
-
ездить на митапы в Лимасол
-
-
-
Я сейчас не готов давать какие-то практические/операционные советы про кафку. Скажу лишь - что эту проблему нужно обязательно записать в виде ишью.
-
Joined.
-
Ещё такой вопрос, у нас должна быть табличка показов, мы хотим в неё писать показы, примерный рейт на вставку - 20-30 млн. в час, но нам не нужна сверхточность по секундам, нам достаточно точности "Дата ЧЧ:ММ". Хотелось бы как-то так: я лью в Кафку события показов, КХ все собирает и пишет в табличку, в итоге табличка группирует это значение, и я могу сделать запрос на псевдокоде: покажи кол-во показов у рекламодателя 123 за последний час. Он просуммирует все показы, выбрав строки с кол-вом показов поминутно для конкретного рекламодателя. Вопрос, как это организовать в таблицах: хранить все показы, и взять SummingMergeTree как аггрегацию? В доке как раз так и советуют. При рейте в 20-30 млн. в час слишком много строк получится.
-
Если планируете аналитику то историческую таблицу все равно придется хранить. А витрины можно сделать например через mat view чтобы они на лету аггрегировали данные и уже из них поставать запросами "покажи кол-во показов у рекламодателя 123 за последний час."
-
-
-
а подскажите как посмотреть кол-во партов которые сейчас мержаться?
-
В таблице system.merges есть эта информация
-
Спасибо
-
Эм. Двойные кавычки вообще-то стандартны для SQL. Может у вас регистр получается не тот?
-
-
Ну и если в верхнем регистре такой запрос выполнить что будет? Версия кх какая?
-
-
-
При чем тут без кавычек. Проблема не в кавычках.
-
-
-
-
Requested SQL statement: SELECT "Code", "Name", "ContractRef" FROM "[dbo]"."[Goods]";
Native SQL statement: SELECT "Code", "Name", "ContractRef" FROM "[dbo]"."[Goods]";
: Connection:Not applicable
Server:MOW1SRVVSQL11\SQL2016
===========================
ODBC Diagnostic record #1:
===========================
SQLSTATE = 42000
Native Error Code = 102
[FreeTDS][SQL Server]Incorrect syntax near '[dbo]'.
(version 19.11.4.24 (official build)).
0 rows in set. Elapsed: 0.002 sec. -
Кавычки я не выставляю, они появляются при запросе. В конфигурации словаря их нет
-
Ну понятно что они добавляются. Это специально сделано. Вы понимаете что SQL объекты без двойных кавычек приводит либо в нижний либо в верхний регистр?
Как у вас в словаре написано Code ? -
Имена колонок в таблице совпадают по написанию с именами в словаре
-
У вас в таблице тоже Code? С большой буквы?
-
Да
-
-
Не помогло
-
[ ] тоже в словаре? Уберите?
-
Их не было
-
-
Не всегда. Вообще проблема же в odbc драйвере
-
-
-
-
-
а подскажите оптимальный кусок на вставку в кликхаус это сколько? ~100k строк?
-
Раз в секунду
-
а если у меня трафика 1-2млн строк, мне раз в секунду по 1млн строк пихать?
-
он их по 30-40 секунд прожевывает)
-
он у меня 100к прожевывает за 10-20 секунд
-
так то, может у меня кликхаус не здоровый 🤔
-
о! code: 252, message: Too many parts (304). Merges are processing significantly slower than inserts а вот откуда он взял 304? видимо слишком дробные пачки :(
-
или возможно не успевает мерджить?
-
Ога
-
Что за железо под CH? Что с дисками? Партиционирование как настроено?
-
Спасибо, но к сожалению попытка добавления set QUOTED_IDENTIFIER OFF во freetds.conf не увенчалась успехом
-
-
-
Joined.
-
партиционирование по дня, диск жестки 10тб. хосты вот такие (s2.large (12 vCPU, 48 ГБ) по мониторам диски не загружены (меньше половины).
-
Привет! У меня ClickHouse ругается на такую строчку arrayStringConcat(splitByString(OriginalManufacturer, ' '), ' ') as Manufacturer
Ругается так
Illegal column String of first argument of function splitByString. Must be constant string. (version 19.11.3.11 (official build))
Можете подсказать, как строчку сделать константной или как правильно этими функциями пользоваться? Почему в документации не сказано, что первый аргумент должен быть константной строкой? -
а вот select sum(num_parts) from system.merges; так я смогу этот mergeq измерить?
-
Что-то у вас точно нездоровое. Миллион в секунду он вставлять должен без особых проблем даже на среднем железе.
-
Да, извиняюсь, очепятка. Не помогло
-
поменяйте местами аргументы функции splitByString
-
ну строки примерно по 1кб
-
Все равно он не должен инсерь в 100к обрабатывать так долго. Вы явно в него пихаете слишком часто.
-
Возможно.
-
Пробуйте в ssms, я только завтра обкатаю, но вот freetds под рукой нет.
-
Хорошо, сейчас попробую
-
1кб * 1млн. = 1 ГБ, это записать надо, это 10-20 hdd
-
да, это 10 шардов
-
я хочу выжать из одного шарда стабильные 100мбс
-
пока получается плохо :(
-
у меня пока что стабильные 60-70, с пиками до 100 :(
-
1кб это вообще дофига широкие строки.
60-70 сколько дисков и какой там рейд? -
там 20 колонок, 2 довольно жирные (текстовые логи). Рейд честно хз, это облачный инстанс. Кластер из 2х машинок.
-
Через ssms работает даже без SET QUOTED_IDENTIFIER ON
-
т.е. 10 шардов на 2х машинках с хз какими дисками. Тут как бы ждать высокой скорости записи не стоит.
я бы пробовал отключить direct_io ( min_merge_bytes_to_use_direct_io = 0 ) чтобы меньше читать и разгрузить диски от чтения. -
не, сейчас у меня 1н шард на 2х машинках. Хочу нащупать его дно. Диски там такие себе, постараюсь утром найти что за они. А как понять что кх в диски упирается?
-
sar -d 1 100
там столбики
await svctm %util
если util = 100% и svctm >200 (ms) то диски загружены совсем вполную -
У нас появились официальные rpm пакеты. Информация прямо на сайте: https://clickhouse.yandex/ Устанавливаются на любую rpm систему: CentOS (начиная с CentOS 5), RHEL, GosLinux и другие.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
-
-
-
ORDER BY (project, message_id, timestamp) SAMPLE BY timestamp
вот так
timestamp UInt32, -
-
-
очевидно что не равномерно) это же настоящий timestamp
текущее значение - 1564697896 -
-
-
а можешь чуть подробнее рассказать как это работает?
он разбивает uint32 на 10
и отдает значения от 0 до 429496729? -
-
-
да, intHash32 подходит
спасибо! - 02 August 2019 (147 messages)
-
Joined.
-
Ура.
-
Joined.
-
Коллеги, добрый день! Подскажите, пожалуйста, движок summingMergeTree удаляет дубликаты записей или суммриует их?
-
суммирует
-
спасибо
-
Почему ругается на создание view?
в исходной таблице колонка cur_clean_state - LowCardinality(String). Таргет таблица - summingMergeTree
CREATE MATERIALIZED VIEW db.to_entity_state_sum_by_hour TO db.entity_state_sum_by_hour
AS
SELECT entity_id,
loc_campus_id,
loc_building_id,
loc_ward_id,
loc_floor_id,
loc_room_id,
toStartOfHour(timestamp) as start_of_hour,
toUInt64(cur_clean_state = 'clean') as clean,
toUInt64(cur_clean_state = 'occupied') as occupied,
toUInt64(cur_clean_state = 'dirty') as dirty,
toUInt64(cur_clean_state = 'occupied-infected') as occupied_infected,
toUInt64(cur_clean_state = 'dirty-infected') as dirty_infected
from db.locatable_entity_states
where timestamp = cur_clean_timestamp;
Creating columns of type LowCardinality(UInt64) is prohibited by default due to expected negative impact on performance. It can be enabled with the "allow_suspicious_low_cardinality_types" setting.. -
LowCardinality(UInt64) ? Зачем?
-
If this setting is turned off (default), don't allow to create a table with LowCardinality of integers, enums, Nullable integers, etc... (all types that have fixed size in memory and the size is 8 or less). Always allow to attach table.
https://github.com/yandex/ClickHouse/issues/4965Add `allow_suspicious_low_cardinality_types` setting. · Issue #4965 · yandex/ClickHouseIf this setting is turned off (default), don't allow to create a table with LowCardinality of integers, enums, Nullable integers, etc... (all types that have fixed size in memory and the si...
-
я не знаю, зачем он такой тип делает. Возможно, это какая- то специфика конверсии LowCardinality(String) в Uint64
-
Таргет таблица выглядит так. Тут нет упоминаний о LowCardinality
create table db.entity_state_sum_by_hour on cluster default
(
entity_id UUID,
loc_campus_id UUID,
loc_building_id UUID,
loc_ward_id UUID,
loc_floor_id UUID,
loc_room_id UUID,
start_of_hour DateTime,
dirty UInt64,
clean UInt64,
occupied UInt64,
occupied_infected UInt64,
dirty_infected UInt64
) ENGINE = ReplicatedSummingMergeTree('/clickhouse/tables/{shard}/db/entity_state_sum_by_hour',
'{replica}') PARTITION BY toYYYYMM(start_of_hour) ORDER BY (
loc_campus_id,
start_of_hour,
entity_id,
loc_ward_id,
loc_building_id,
loc_room_id,
loc_floor_id
); -
Скорее всего баг. КХ свежий?
-
да, сейчас напишу версию
-
toUInt64(toString(cur_clean_state) = 'clean')
-
19.9.3.31
-
сейчас попробую, спасибо
-
Это как-то контринтуитивно, даже если сработает.
В SQL мы считаем что столбец - стринг, а как он хранится словарем или нет нам должно быть пофиг. -
не помогло, такая же ошибка
-
я просто угадываю, так как у пациента дедушка партизан, то тут мало что можно сделать.
-
т.е. вообще не про это поле
-
Исходная таблица
CREATE TABLE db.locatable_entity_states on cluster default
(
timestamp DateTime,
location_online_status LowCardinality(String),
cur_patient_state LowCardinality(String),
cur_patient_timestamp DateTime,
prev_patient_state LowCardinality(String),
prev_patient_timestamp DateTime,
loc_room_id UUID,
loc_ward_id UUID,
loc_floor_id UUID,
loc_building_id UUID,
loc_campus_id UUID,
loc_campus_org_code LowCardinality(String),
loc_timestamp DateTime,
site_id UUID,
site_type LowCardinality(String),
entity_id UUID,
entity_org_code LowCardinality(String),
entity_type LowCardinality(String),
entity_sub_type LowCardinality(String),
entity_name String,
cur_clean_state LowCardinality(String),
cur_clean_timestamp DateTime,
prev_clean_state LowCardinality(String),
prev_clean_timestamp DateTime,
cur_broken_state LowCardinality(String),
cur_broken_timestamp DateTime,
prev_broken_state LowCardinality(String),
prev_broken_timestamp DateTime
) ENGINE = ReplicatedMergeTree('/clickhouse/tables/{shard}/db/locatable_entity_states', '{replica}') PRIMARY KEY (loc_campus_id, timestamp, entity_id)
ORDER BY (loc_campus_id, timestamp, entity_id, loc_ward_id, loc_building_id, loc_room_id, loc_floor_id)
PARTITION BY toYYYYMM(timestamp)
SETTINGS index_granularity = 8192; -
ошибка легко репродьюсится:
create table test (a LowCardinality(String)) engine=MergeTree() Order by a;
create table test2 (a UInt64) engine=MergeTree() Order by a;
create materialized view test_mv to test2 as select toUInt64(a = 'foo') from test;
Code: 455. DB::Exception: Received from localhost:9000, ::1. DB::Exception: Creating columns of type LowCardinality(UInt64) is prohibited by default due to expected negative impact on performance. It can be enabled with the "allow_suspicious_low_cardinality_types" setting.. -
Зарепортите иссуе на гитхаб
-
ок
-
можно взять мои три запроса выше как пример без лишних столбцов
-
Причина в общем понятна:
SELECT toTypeName(a = 'foo')
FROM test
┌─toTypeName(equals(a, 'foo'))─┐
│ LowCardinality(UInt8) │
└──────────────────────────────┘
Оно возвращает вместо обычного UInt8 лоукард-версию -
я попытался сконвертить в обычный int8, но это не помогло
-
cast помогает
desc (select (cast (a as String) == 'foo') from test) -
но забавано да
-
зарепортите
-
уже
-
спасибо
-
Привет! Кто в последнее время использовал Kafka engine, можете дать фидбек, плиз?
Все ли с ним ок, на что обратить внимание? -
на данный момент всё печально, 19.11.3 19.11.4 сломаны
-
а чуть подробнее можно?
-
-
-
https://github.com/yandex/ClickHouse/issues/5846
19.9 19.11.3 - топики рандомно отваливаются по таймауту, надо пересоздавать постоянно по несколько раз на деньKafka consumer stops - cppkafka::HandleException Local: Timed out · Issue #5846 · yandex/ClickHouseDescribe the bug ClickHouse Kafka consumer stops consuming from Kafka, and restarts after some time (from 0 up to 2 hours)... Restart of ClickHouse docker container helps imediately. Problem starte...
-
-
да, упираюсь в полку :(
-
@simpl1g спасибо за фидбек
А как проблемы решаете? Не планируете написать отдельный перекладчик ? И если нет, то почему ? -
их на гитхабе десяток https://github.com/search?q=kafka+clickhouseLink
GitHub is where people build software. More than 36 million people use GitHub to discover, fork, and contribute to over 100 million projects.
-
-
А есть какие-то стабильные и проверенные ?
-
Понял, спасибо
-
Data get lost on heavy load via KafkaEngine · Issue #4736 · yandex/ClickHouse
We have created Yandex tank scenario in order to test the database on heavy load. We use KafkaEngine to populate the database. The problem is that the database starts loosing data at 100rps. How to...
-
-
Видимо, надо писать свой коннектор
-
-
GitHub - housepower/clickhouse_sinker: Easily load data from kafka to ClickHouse
Easily load data from kafka to ClickHouse. Contribute to housepower/clickhouse_sinker development by creating an account on GitHub.
-
select toDateTime(today()) + interval 6 hour
select toDateTime(today()) + 6*60 -
👍
-
Вы им пользуетесь в проде ?
-
нет не пользуюсь,
там нету kafka exactly once delivery. -
Ок, спасибо
-
Joined.
-
Подскажите пжалуйста: как поменять параметр connect_timeout (по умолчанию стоит 10). Если просто прописать в <yandex> - не применяется даже после рестарта
-
это пользовательская настройка, ставится в users.xml внутри пользователя.
но на самом деле, ставить ее надо на клиенте, в вашем клиенте. Я например ставлю в JDBC.
например в клиенте кх clickhouse-client --connect_timeout=100 или в /etc/clickhouse-client/config.xml -
-
Подскажите, пожалуйста, почему:
select crc32('dfgd')
>message: Code: 46, e.displayText() = DB::Exception: Unknown function CRC32
указана в доке тут - https://clickhouse.yandex/docs/en/query_language/functions/string_functions/ -
КХ обновите
-
в 19.11 есть, в 19.9 нет
-
Binary representation of hashes (FixedString(16) for MD5
подскажите, как теперь вставить туда значение?
CAST('c5c2c7c3a9070915510e8829ad5c2cc0', 'FixedString(16)') и toFixedString('c5c2c7c3a9070915510e8829ad5c2cc0', 16) выдают одну и ту же ошибку: DB::Exception: String too long for type FixedString(16): (at row 1) (version 19.11.3.11 (official build)) -
Выбирайте всегда в углу слева в доке версию КХ, а не мастер
-
нет, запланирован на 20? год.
-
Тут под знаком вопроса что-то скрывается?
-
-
неуверенность(в смысле я не очень в курсе, и многие такие планы сдвигались и сдвигались), раньше был в плане 2019Q4
-
да
-
-
Спасибо
-
а зачем тогда final ?
-
-
нет.
Можно вручную две таблицы сделать, final и history (и заполнять ее из MV) -
🙈 Ха-ха. :) Спасибо!
-
-
если у меня есть query_id. Я могу проследить ┌──read_rows─┬─total_rows_approx─┐
и примерно знать когда запрос отработает.
А можно ли зная query_id войти в полоску прогресса? которая бывает, когда делаешь запрос с клиента -
в логах заметил Delaying inserting block by 3.0200 ms. because there are 173 parts на каждый инсерт. А кто знает по какому правилу он тротлит так?
-
снова вопросы по odbc. вот такой запрос:
SELECT
sdr.date,
toTypeName(sdr.date)
FROM odbc('DSN=psql', 'site_adstxt') AS s
INNER JOIN supply_debug_reporting_aggregate AS sdr ON (sdr.detected_domain = s.domain) AND (s.compliant = '0')
LIMIT 1
отдает:
┌────────────────date─┬─toTypeName(date)─┐
│ 2019-07-30 15:00:00 │ DateTime │
└─────────────────────┴──────────────────┘
но когда я пытаюсь добавить date в where - получаю ошибку.
SELECT
sdr.date,
toTypeName(sdr.date)
FROM odbc('DSN=psql', 'site_adstxt') AS s
INNER JOIN supply_debug_reporting_aggregate AS sdr ON (sdr.detected_domain = s.domain) AND (s.compliant = '0')
WHERE sdr.date = '2019-07-30 15:00:00'
LIMIT 1
`===========================
ODBC Diagnostic record #1:
===========================
SQLSTATE = 42703
Native Error Code = 1
ERROR: column "date" does not exist;
No query has been executed with that handle
` -
https://github.com/yandex/ClickHouse/blob/50c22ef71a00cde8c6588461cc0a485983f721f5/dbms/src/Storages/MergeTree/MergeTreeSettings.h
parts_to_delay_insertClickHouse/ClickHouseClickHouse® is a free analytics DBMS for big data. Contribute to ClickHouse/ClickHouse development by creating an account on GitHub.
-
-
а неназывать поля системными именами пробовал?
-
<merge_tree>
<parts_to_throw_insert>600</parts_to_throw_insert>
<parts_to_delay_insert>150</parts_to_delay_insert>
<max_delay_to_insert>5</max_delay_to_insert>
</merge_tree> -
можно как-то заэкранировать?
-
SELECT
sdr.date,
toTypeName(sdr.date) FROM (
SELECT
sdr.date,
toTypeName(sdr.date)
FROM odbc('DSN=psql', 'site_adstxt') AS s
INNER JOIN supply_debug_reporting_aggregate AS sdr ON (sdr.detected_domain = s.domain) AND (s.compliant = '0'))
WHERE sdr.date = '2019-07-30 15:00:00'
LIMIT 1 -
Да, такие типы LowCardinality появляются автоматически при вычислении выражений. Но хранить их в таблице не имеет смысла. Получается неудобно создавать CREATE TABLE AS... сейчас решим, как можно улучшить.
-
ога, спасибо. А не подскажешь - 4.3652 ms это 4мс или 4 секунды? Если 4мс то какой то не серьезный слип.
-
А лучше на правую таблицу вообще надо делать подзапрос
SELECT
sdr.date,
toTypeName(sdr.date)
FROM odbc('DSN=psql', 'site_adstxt') AS s
INNER JOIN (select detected_domain from supply_debug_reporting_aggregate WHERE sdr.date = '2019-07-30 15:00:00')
AS sdr ON (sdr.detected_domain = s.domain) AND (s.compliant = '0'))
LIMIT 1 -
4 ms.
-
Не серьёзный, потому что кусков пока ещё не слишком много. Так доходит до одной секунды, а потом просто кидает исключение на INSERT.
-
спасибо. как то не много 🤔 но ведь исключение бросит на 300
-
Подскажите. В ReplicatedReplacingMergeTree какие параметры ? Не могу в доке найти
-
получается такой delay можно трактовать как почти номральную работу, возможно стоит замедлить заливку, но не сильно.
-
После пути в зоокипера. Там ещё 2 параметра ! Зачем 2
-
ver — столбец с версией, тип UInt*, Date или DateTime. Необязательный параметр.
Последнюю в выборке, если ver не задан.
С максимальной версией, если ver задан. -
Спасибо большое
-
спасибо! то что нужно
-
-
Всегда стоит разобраться - почему куски почти не успевают мержиться...
-
потому что КХ пока не умеет оптимизировать фильтры на правую таблицу: помещает правую таблицу в память (избыточно жрет память), потом делает join, потом фильтрует.
-
я вставляю в несколько потоков довольно крупные куски, грешу на то что слишком часто (в полете всегда 7-12 инсертов). При этом диск загружен в полку или почти в полку. Хотя интересно что очередь мержей не растет а держится в стабильных границах 170-180 партов.
-
> При этом диск загружен в полку или почти в полку.
Значит всё ожидаемо :)
> очередь мержей не растет а держится в стабильных границах 170-180 партов.
Как раз из-за того, что throttle работает. Хотя несколько мс. выглядят странно. -
я увидел тротл в 4.23424мс и подумал что это 4 секунды, это бы обьяснило все. Инсерты отрабатывают как то долго (часто по 10-20 секунд) и я думал что тротлинг это как раз причина этого.
-
Ещё особенность - это throttle на каждую затронутую партицию.
-
Если INSERT разбивается по партициям, будет много таких sleep.
-
хм, ну партиция у меня дневная (и в рамках инсерта строго одна), так что это не стреляет тут ок.
-
а вот снаружи getMaxPartsCountForPartition можно определить каким то запросом?
-
select value from system.asynchronous_metrics where metric = 'MaxPartCountForPartition'
-
я сейчас мониторю вот эту циферку select sum(num_parts) from system.merges; но она не сходится с тем что в логе написано (там в границах 150 елементов)
-
о, спасибо.
-
ну так оно должно сходится c
select max(cnt) m from
(
select database, table, partition, count() cnt from system.parts
where active
group by database, table, partition
) -
а имеет ли смысл если у меня репликейт таблица направлять вставку в ту реплику у которой эта циферка поменьше?
-
Смысл есть, но я бы не делал такие сложности. Ведь если реплики сильно отличаются при равномерной нагрузке на них, значит что-то не так. Если заведомо знаем, что какая-то реплика на плохом железе, тогда можно.
-
циферка будет одинаковая практически всегда, если сервера одинаковые, то либо random либо round robin
-
🤔 блин у меня облако и пёс его знает когда реплика болеет.
-
-
железо совсем разное? или они в разных датацентрах и один дальше от зукипера?
-
разные дц. зукипер тоже в кросс дц. та реплика что выше она сильно дальше дц
-
хм
-
это в целом и логично тогда
-
вру, наоборот) сильно ближе :D моя теория рассыпалась
-
зукипер насколько кросс дц? Сколько пинг?
я вставляю в том дц который ближе к зк, а на том что дальше ставлю
<merge_tree>
<replicated_can_become_leader>0</replicated_can_become_leader>
</merge_tree> -
15ms vs 9ms
-
вроде не сильно плохо.
-
ну это близко, проблема не в этом.
я бы график iowait посмотрел -
» iowait
он вроде плотный но не в потолок. -
ладно, продолжу копать. спасибо, стало сильно понятнее чего происходит.
-
-
Можно указать партицию.
https://clickhouse.yandex/docs/ru/query_language/misc/#misc_operations-optimize -
не, нужно не в OPTIMIZE TABLE а при SELECT ... FROM replacing_table FINAL
-
А если у вас where попадает в партицию, он все равно фуллсканит?
-
пока проверяю на таблице с 2 партициями за июль и август, если указываю WHERE по ключу партицирования за август то все равно идет фулскан
-
Если убрать final то идет четко по партиции?
-
неа, тоже похоже на фулскан по количеству обработанных строк
-
В логе он пишет сколько партов прочитал.
-
-
toYYYYMM(datetime)
-
А в селекте как указываете?
-
toDate(datetime)=today()
-
Что то для теста попробуйте добавить and toYYYYMM(datetime) == toYYYYMM(today())
-
тот же результат, к сожалению лог сервера сейчас не могу посмотреть на предмет используемых партов
-
SET send_logs_level = 'trace'
-
-
подскажите, можно как-то остановить мердж партов?
-
-
System stop merges;
-
Запустить потом соотв.:
System start merges; - 03 August 2019 (11 messages)
-
о, оставил на ночь стало похуже (Delaying inserting block by 436.5158 ms. because there are 281 parts) а точно достаточно такого тротлинга? просто на вид кликхаусу лучше не становится, мб имеет смысл его как то поагрессивнее делать?
-
-
Лучше dns для Кафки использовать, а не ip напрямую
-
А кликаус нормально с dns работает? У меня в докере в тестовом окружении криво работал
-
Нужно прокинуть dns конфиг в докер. Сейчас не подскажу как, не компа под рукой.
Но это не проблема CH -
Подозреваю, что можно создать ещё одну таблицу, которая будет переливать данные, а старые хлопнуть когда из старых топиков/хостов больше не ожидаются данные.
-
И по опыту кх в докер контейнер лучше на локальном хосте запускать, что то типо —net = host
-
По другому не получилось заставить нормально работать ddl on cluster запросы
-
Но может что то мы не так делали
-
В этом нет ничего страшного, сделайте детач мат вью которая смотрит на engine kafka и смело убивайте
-
Joined.
- 04 August 2019 (28 messages)
-
Всем привет. Есть табличка, в котором поля а, б и время. Нужно посчитать промежутки интервалов, как для а, так и б. Считаю через Running_difference и предварительную сортировку. Ожидаемо, что запрос по полю, которое стоит первым в ключе сортировки таблицы работает приемлемое время (десятки секунд), а запрос по полю, которое второе в ключе, нет (десятки минут) . Вопрос, у меня только вариант держать две одинаковые таблицы с разными ключами сортировки (что равносильно дублировать записи в одну таблицу и писать разные поля в разные партиции) ? Или есть волшебство, которое не знаю?
-
-
Изначально ключ сортировки в таблице строился по двум полям: Order by a, b. Или можно ещё один индекс создать?
-
-
Там вроде можно добавить первичный ключ, но который является префиксом для ключа сортировки. Т. Е. Ключ сортировки а, б, с, д. Можно добавить первичный ключ а, б. Если я прав, то мне не пойдёт (нужен ключ б, а). Если не прав, конкретный пример приведи - у себя проверю.
-
Там можно сделать и просто minmax(b) или set(b)
-
-
-
Подскажите, пожалуйста, по бэкапированию данных? Перечитал документацию, можно делать FREEZE без указания PARTITION. Сохраняются директории с именами вида “all_цифры_цифры_цифры“. Но при попытке присоединения (ATTACH) сохранённых данных, указание PARTITION|PART обязательно. Но совершенно неясно, что там указывать. 🤷♂️
-
цифры))
-
-
-
Это в том случае, если они есть в system.parts. Но у меня там partition = tuple(), а partition_id=all
-
Ок, попробую PART с именем
-
No columns in part „part_name“ 🤷♂️
-
-
-
alter table attach partition tuple();
-
Выходной не самое лучшее время для спама но все же.
Может кто-нибудь зарегиться и поставить КХ мониторинг?
Нужен фидбек небольшой что нелогично или непонятно в инструкции.
https://apps.sematext.com/ui/login -
Подскажите, если два столбца складываются в группирующем запросе в массив через groupArray, то ведь соответствие сложенных строк в этих массивах гарантируется?
Например, если такую таблицу GROUP BY a:
a | b | c
0 | 1 | 1
0 | 2 | 2
То на выходе, groupArray(b), groupArray(c) будет:
[1, 2] и [1, 2]
или
[2, 1] и [2, 1]
Но точно не:
[1, 2] и [2, 1]
или
[2, 1] и [1, 2]
Верно? -
а если у тебя будет
```
a | b | c
0 | 1 | 1
0 | 1 | 2
0 | 2 | 2
```
То на выходе, groupArray(b), groupArray(c) будет:
[1, 2] и [1, 2]
и порядок уже не важен -
Насколько я знаю, если делать groupArray(), то порядок сохранится, но если делать groupUniqArray(), то порядок уже точно не сохранится
-
Нет, в этом случае на выходе будет по 3 элемента в каждом массиве. Но вопрос про порядок - гарантируется или нет.
-
Мои эксперименты показывают, что порядок сохраняется, но это может быть случайностью, а не гарантией.
-
Joined.
-
гарантируется 1,2 1,2
т.е.
select groupArray(x)
(select * from X order by g,t)
group by g
гарантируется что в массиве элементы будут в порядке t -
Отлично, спасибо 👍
-
в доке написано
некоторых случаях, вы всё же можете рассчитывать на порядок выполнения запроса. Это — случаи, когда SELECT идёт из подзапроса, в котором используется ORDER BY.
https://clickhouse.yandex/docs/ru/query_language/agg_functions/reference/#grouparray-x-grouparray-max-size-x
т.е. ORDER BY нужен, смысл в том что без ORDER BY потоки которые кормят groupArray могут туда доставлять вперемешку из-за параллеьности - 05 August 2019 (111 messages)
-
-
Доброе утро, коллеги.
Есть задача сделать бэкап базы кликхауса, пара десятков таблиц, по десятку партиций на таблицу. Делаю по этой инструкции: https://ruhighload.com/%D0%91%D0%B5%D0%BA%D0%B0%D0%BF+%D0%B8+%D0%B2%D0%BE%D1%81%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5+%D0%B2+clickhouse
Фриз прошёл нормально, данные в shadow появились. Решил проверки ради восстановить - и тут возникли проблемы.
В инструкции написано скопировать данные в директорию /var/lib/clickhouse/data/[БД]/[таблица]/detached/.
Непонятно, что именно копировать, если в shared 321 директория с названиями в виде цифр, в которых куски разных таблиц, непонятно, что именно копировать.
Подскажите, пожалуйста, как оно восстановить или пните в сторону другого мана по бэкапу/восстановлению.Бекап и восстановление в ClickhouseКак сделать бекап и восстановить данные в Clickhouse
-
Копиповать файлы бекапа из папки с именем таблицы. Аттачить потаблично, по одной партиции. Все должно работать, после аттача из папки detached файлы исчезнут
-
То есть по всем трёхста с лишним директориям искать нужные директории с данными?
Может, есть какой-то более другой способ бэкапа, чтобы данные для восстановления хранились в более адекватном виде? -
Можно написать скрипт для автоматизации. Или использовать готовый clickhouse-backup. Либо репликация через Clickhouse-Copier
-
clickhouse-backup у меня, к сожалению, не взлетел.
root@ch01 ~/clickhouse-backup # ./clickhouse-backup -c ./config.yml create
2019/08/05 08:13:11 Create backup '2019-08-05T08-13-11'
2019/08/05 08:13:12 can't get Clickhouse tables with: code: 47, message: Unknown identifier: metadata_path
root@ch01 ~/clickhouse-backup # grep metadata_path ./config.yml
metadata_path: "/var/lib/clickhouse/metadata/"
root@ch01 ~/clickhouse-backup #
Про Clickhouse-Copier сейчас почитаю. -
Joined.
-
-
Возможно, с clickhouse-backup проблема в том, что версия сервера у меня старая.
root@ch01 ~/clickhouse-backup # dpkg -l | grep clickhouse-server
ii clickhouse-server-base 1.1.54236 amd64 Server binary for clickhouse
ii clickhouse-server-common 1.1.54236 amd64 clickhouse-server-common
root@ch01 ~/clickhouse-backup # -
-
Всем привет, столкнулся с такой же проблемой:
https://github.com/yandex/ClickHouse/issues/5846
2019.08.05 08:51:51.173153 [ 3 ] {} <Error> void DB::StorageKafka::streamThread(): std::exception. Code: 1001, type: cppkafka::HandleException, e.what() = Local: Timed out, version = 19.11.3.11 (official build)
2019.08.05 08:51:58.175637 [ 6 ] {} <Error> void DB::StorageKafka::streamThread(): std::exception. Code: 1001, type: cppkafka::HandleException, e.what() = Local: Timed out, version = 19.11.3.11 (official build)
2019.08.05 08:52:05.177770 [ 4 ] {} <Error> void DB::StorageKafka::streamThread(): std::exception. Code: 1001, type: cppkafka::HandleException, e.what() = Local: Timed out, version = 19.11.3.11 (official build)
2019.08.05 08:52:12.180081 [ 8 ] {} <Error> void DB::StorageKafka::streamThread(): std::exception. Code: 1001, type: cppkafka::HandleException, e.what() = Local: Timed out, version = 19.11.3.11 (official build)
2019.08.05 08:52:19.182092 [ 31 ] {} <Error> void DB::StorageKafka::streamThread(): std::exception. Code: 1001, type: cppkafka::HandleException, e.what() = Local: Timed out, version = 19.11.3.11 (official build)
2019.08.05 08:52:26.184083 [ 30 ] {} <Error> void DB::StorageKafka::streamThread(): std::exception. Code: 1001, type: cppkafka::HandleException, e.what() = Local: Timed out, version = 19.11.3.11 (official build)
2019.08.05 08:52:33.186477 [ 5 ] {} <Error> void DB::StorageKafka::streamThread(): std::exception. Code: 1001, type: cppkafka::HandleException, e.what() = Local: Timed out, version = 19.11.3.11 (official build)
2019.08.05 08:52:40.188840 [ 28 ] {} <Error> void DB::StorageKafka::streamThread(): std::exception. Code: 1001, type: cppkafka::HandleException, e.what() = Local: Timed out, version = 19.11.3.11 (official build)
подскажите кто как решал? только откат на более старую версию? если да, то какую?Kafka consumer stops - cppkafka::HandleException Local: Timed out · Issue #5846 · yandex/ClickHouseDescribe the bug ClickHouse Kafka consumer stops consuming from Kafka, and restarts after some time (from 0 up to 2 hours)... Restart of ClickHouse docker container helps imediately. Problem starte...
-
На 19.8
-
буду пробовать, спасиба
-
Всем привет.
Подскажите кто сталкивался.
Есть таблица с эвентами, и таблица timestamp'ов.
Нужно найти первый эвент после каждого из timestamp'ов.
Тут бы вроде банальный JOIN подошел, но CH пока не умеет джойнить по "больше/меньше".
ASOF подходит больше всего, но работает в обратную сторону, только по меньше или равно. -
А если таблицы в джойне местами поменять?
-
получится не совсем то. Получится что к разным эвентам поджойнится один timestamp.
-
-
Насколько я знаю, кликхаус не будет скачивать данные с других реплик, если разница в данных очень большая.
Будут ли выполняться селекты в реплицируемую таблицу на этом сервере? Может ли получится так, что запрос вернет старые данные, потому что он выполнится на таком сервере? -
Идея сделать ASOF JOIN по больше или равно очевдна и относительно легко реализуема. Заведите issue - чтоб стало видно, что кому-то надо :)
-
-
Добрый день,
Получилось что текущий_номер_блока = 11, максимальный_номер_блока = 199
Подскажите, как удалить эти партиции? Может переименовать во что-то другое? -
Joined.
-
Добрый день, при попытке записи в таблицу из tsv-файла в какой-то момент ложится весь кластер. В error-логах ошибка такого вида: BaseDaemon: ########################################
2019.08.05 12:58:28.711085 [ 801 ] {} <Error> BaseDaemon: (version 19.9.2.4) (from thread 520) Received signal Segmentation fault (11).
2019.08.05 12:58:28.711122 [ 801 ] {} <Error> BaseDaemon: Address: NULL pointer.
2019.08.05 12:58:28.711158 [ 801 ] {} <Error> BaseDaemon: Access: read.
2019.08.05 12:58:28.711188 [ 801 ] {} <Error> BaseDaemon: Unknown si_code.
2019.08.05 12:58:28.747198 [ 801 ] {} <Error> BaseDaemon: 0. clickhouse-server(DB::ColumnNullable::checkConsistency() const+0x15) [0x5b89ee5]
2019.08.05 12:58:28.747258 [ 801 ] {} <Error> BaseDaemon: 1. clickhouse-server(DB::DataTypeNullable::serializeBinaryBulkWithMultipleStreams(DB::IColumn const&, unsigned long, unsigned long, DB::IDataType::SerializeBinaryBulkSettings&, std::shared_ptr<DB::IDataType::SerializeBinaryBulkState>&) const+0x2c) [0x59a9cec]
2019.08.05 12:58:28.747295 [ 801 ] {} <Error> BaseDaemon: 2. clickhouse-server(DB::IMergedBlockOutputStream::writeSingleGranule(std::string const&, DB::IDataType const&, DB::IColumn const&, std::set<std::string, std::less<std::string>, std::allocator<std::string> >&, bool, std::shared_ptr<DB::IDataType::SerializeBinaryBulkState>&, DB::IDataType::SerializeBinaryBulkSettings&, unsigned long, unsigned long, bool)+0x58) [0x5d48b58]
2019.08.05 12:58:28.747328 [ 801 ] {} <Error> BaseDaemon: 3. clickhouse-server(DB::IMergedBlockOutputStream::writeColumn(std::string const&, DB::IDataType const&, DB::IColumn const&, std::set<std::string, std::less<std::string>, std::allocator<std::string> >&, bool, std::shared_ptr<DB::IDataType::SerializeBinaryBulkState>&, unsigned long)+0x180) [0x5d490e0]
2019.08.05 12:58:28.747357 [ 801 ] {} <Error> BaseDaemon: 4. clickhouse-server(DB::MergedBlockOutputStream::writeImpl(DB::Block const&, DB::PODArray<unsigned long, 4096ul, AllocatorWithHint<false, AllocatorHints::DefaultHint, 67108864ul>, 15ul, 16ul> const*)+0x12bb) [0x5d4aaab]
2019.08.05 12:58:28.747410 [ 801 ] {} <Error> BaseDaemon: 5. clickhouse-server(DB::MergeTreeDataWriter::writeTempPart(DB::BlockWithPartition&)+0x8f6) [0x5d0a736]
2019.08.05 12:58:28.747439 [ 801 ] {} <Error> BaseDaemon: 6. clickhouse-server(DB::ReplicatedMergeTreeBlockOutputStream::write(DB::Block const&)+0xfd) [0x5d56e3d]
2019.08.05 12:58:28.747461 [ 801 ] {} <Error> BaseDaemon: 7. clickhouse-server(DB::PushingToViewsBlockOutputStream::write(DB::Block const&)+0x42) [0x5ec5f82]
2019.08.05 12:58:28.747484 [ 801 ] {} <Error> BaseDaemon: 8. clickhouse-server(DB::SquashingBlockOutputStream::finalize()+0xf1) [0x5ed0d81]
2019.08.05 12:58:28.747505 [ 801 ] {} <Error> BaseDaemon: 9. clickhouse-server(DB::SquashingBlockOutputStream::writeSuffix()+0x11) [0x5ed1051]
2019.08.05 12:58:28.747549 [ 801 ] {} <Error> BaseDaemon: 10. clickhouse-server(DB::TCPHandler::processInsertQuery(DB::Settings const&)+0x372) [0x31849d2]
2019.08.05 12:58:28.747572 [ 801 ] {} <Error> BaseDaemon: 11. clickhouse-server(DB::TCPHandler::runImpl()+0x7d8) [0x31851e8]
2019.08.05 12:58:28.747592 [ 801 ] {} <Error> BaseDaemon: 12. clickhouse-server(DB::TCPHandler::run()+0x1c) [0x31857fc]
2019.08.05 12:58:28.747611 [ 801 ] {} <Error> BaseDaemon: 13. clickhouse-server(Poco::Net::TCPServerConnection::start()+0xf) [0x6409baf]
2019.08.05 12:58:28.747632 [ 801 ] {} <Error> BaseDaemon: 14. clickhouse-server(Poco::Net::TCPServerDispatcher::run()+0xe5) [0x640a295]
2019.08.05 12:58:28.747652 [ 801 ] {} <Error> BaseDaemon: 15. clickhouse-server(Poco::PooledThread::run()+0x81) [0x69162f1]
2019.08.05 12:58:28.747672 [ 801 ] {} <Error> BaseDaemon: 16. clickhouse-server(Poco::ThreadImpl::runnableEntry(void*)+0x38) [0x69120b8]
2019.08.05 12:58:28.747690 [ 801 ] {} <Error> BaseDaemon: 17. clickhouse-server() [0x6d566df]
2019.08.05 12:58:28.747709 [ 801 ] {} <Error> BaseDaemon: 18. /lib64/libpthread.so.0(+0x7dd5) [0x7fd5861bcdd5]
2019.08.05 12:58:31.531654 [ 801 ] {} <Error> BaseDaemon: ######################################## -
2019.08.05 12:58:31.531733 [ 801 ] {} <Error> BaseDaemon: (version 19.9.2.4) (from thread 610) Received signal Segmentation fault (11).
2019.08.05 12:58:31.531767 [ 801 ] {} <Error> BaseDaemon: Address: 0x800b
2019.08.05 12:58:31.531784 [ 801 ] {} <Error> BaseDaemon: Access: read.
2019.08.05 12:58:31.531801 [ 801 ] {} <Error> BaseDaemon: Address not mapped to object.
Может кто сталкивался с таким? -
Коллеги, настраиваю авторизацию для кафки в зависимости от топика
по доке <kafka_topic_*> должны дополнять глобальную конфигурацию:
<yandex>
<kafka>
<security_protocol>SASL_PLAINTEXT</security_protocol>
<sasl_mechanism>SCRAM-SHA-512</sasl_mechanism>
</kafka>
<kafka_minlogsearch.test>
<sasl_username>user1</sasl_username>
<sasl_password>secure1</sasl_password>
</kafka_minlogsearch.test>
</yandex>
по доке неоднозначно, перепробовал варианты kafka_minlogsearch_test, kafka_topic_minlogsearch_test, kafka_minlogsearch.test, kafka_topic_minlogsearch.test
работает только если креды в основной конфигурации, но этот вариант не подходит в силу того что они разные на разных топиках
в чём может быть проблема? -
Support for `<`, `<=`, `>`, `>=` operator with ASOF join. · Issue #6337 · yandex/ClickHouse
It would be useful, for example, if we want to join previous entity state to current state. CREATE TABLE states ( entity_id UUID state INT8 timestamp DateTime ) SELECT state AS cur_state, prev_stat...
-
А можете сделать issue с воспроизводимым примером?
-
Есть утилита zookeeper-adjust-block-numbers-to-parts, она может подкрутить текущий номер блока, после чего удаление будет работать. Утилиту эту можно собрать из мастера:
mkdir -p build && cd build && cmake ..
ninja zookeeper-adjust-block-numbers-to-parts
cd utils/zookeeper-adjust-block-numbers-to-parts
zookeeper-adjust-block-numbers-to-parts —help
zookeeper-adjust-block-numbers-to-parts -z localhost:2181 —dry-run -
Спасибо!
-
Joined.
-
помогите, пожалуйста победить
https://github.com/yandex/ClickHouse/issues/5846
2019.08.05 08:51:51.173153 [ 3 ] {} <Error> void DB::StorageKafka::streamThread(): std::exception. Code: 1001, type: cppkafka::HandleException, e.what() = Local: Timed out, version = 19.11.3.11 (official build)
2019.08.05 08:51:58.175637 [ 6 ] {} <Error> void DB::StorageKafka::streamThread(): std::exception. Code: 1001, type: cppkafka::HandleException, e.what() = Local: Timed out, version = 19.11.3.11 (official build)
2019.08.05 08:52:05.177770 [ 4 ] {} <Error> void DB::StorageKafka::streamThread(): std::exception. Code: 1001, type: cppkafka::HandleException, e.what() = Local: Timed out, version = 19.11.3.11 (official build)
2019.08.05 08:52:12.180081 [ 8 ] {} <Error> void DB::StorageKafka::streamThread(): std::exception. Code: 1001, type: cppkafka::HandleException, e.what() = Local: Timed out, version = 19.11.3.11 (official build)
2019.08.05 08:52:19.182092 [ 31 ] {} <Error> void DB::StorageKafka::streamThread(): std::exception. Code: 1001, type: cppkafka::HandleException, e.what() = Local: Timed out, version = 19.11.3.11 (official build)
2019.08.05 08:52:26.184083 [ 30 ] {} <Error> void DB::StorageKafka::streamThread(): std::exception. Code: 1001, type: cppkafka::HandleException, e.what() = Local: Timed out, version = 19.11.3.11 (official build)
2019.08.05 08:52:33.186477 [ 5 ] {} <Error> void DB::StorageKafka::streamThread(): std::exception. Code: 1001, type: cppkafka::HandleException, e.what() = Local: Timed out, version = 19.11.3.11 (official build)
2019.08.05 08:52:40.188840 [ 28 ] {} <Error> void DB::StorageKafka::streamThread(): std::exception. Code: 1001, type: cppkafka::HandleException, e.what() = Local: Timed out, version = 19.11.3.11 (official build)
На тесте всё работает норм, возникает только на проде.
(пробовал версии 19.11.3.11 и 19.11.2.7)
пытался откатится на версию 19.8.3.8, но кх не подымается
Кх и кафка в докере.
Интересно почему на тесте всё ок, а на проде не работает?
Может как-то влияет то, что кафка за океаном от кх и надо какую-то опцию подтюнить?Kafka consumer stops - cppkafka::HandleException Local: Timed out · Issue #5846 · yandex/ClickHouseDescribe the bug ClickHouse Kafka consumer stops consuming from Kafka, and restarts after some time (from 0 up to 2 hours)... Restart of ClickHouse docker container helps imediately. Problem starte...
-
Из кафки ни одного сообщения не доходит?
-
да, ничего не приходит
-
Привет. Наступил в баг https://github.com/yandex/ClickHouse/issues/5615
Попробовал начать писать в топик кафки, но engine больше не читает из него.
Подскажите, пожалуйста, можно как-то иначе удалить таблицу с Kafka engine?Kafka storage's shutdown hangs if no messages are ever fetched · Issue #5615 · yandex/ClickHouseUsing ClickHouse 19.8.3.8 on Debian 9 on WSL, installed from Yandex repository. The problem also appeared on version 19.7.5.27. Queries were executed in ClickHouse CLI. Test table is created with t...
-
-
-
коллеги, подскажите, пожалуйста, где- то можно посмотреть changelog сборок?
-
залез в исходники понял что если в топике точки то либа воспринимает как иерархический конфиг завелось вот так:
<yandex>
<kafka>
<security_protocol>SASL_PLAINTEXT</security_protocol>
<sasl_mechanism>SCRAM-SHA-512</sasl_mechanism>
</kafka>
<kafka_minlogsearch>
<test>
<sasl_username>user1</sasl_username>
<sasl_password>secure1</sasl_password>
</test>
</kafka_minlogsearch>
</yandex> -
на гитхабе же всё, отфильтровали нужный бранч или тег и вот оно
-
сломан? когда успели?
-
Kafka consumer stops - cppkafka::HandleException Local: Timed out · Issue #5846 · yandex/ClickHouse
Describe the bug ClickHouse Kafka consumer stops consuming from Kafka, and restarts after some time (from 0 up to 2 hours)... Restart of ClickHouse docker container helps imediately. Problem starte...
-
массово проблемы начались после обновлении librdkafka
-
-
-
нашел, спасибо)
-
Коллеги, добрый день, собрали на тестовый стенд 19.11.4.24 - появилась проблема с нашей программой, общается она с КХ через с++ драйвер (https://github.com/artpaul/clickhouse-cpp) -
Code: 209, e.displayText() = DB::NetException: Timeout: connect timed out: 10.68.74.223:9000 (10.68.74.223:9000) (version 19.11.4.24)
Какие-то новые конфиги появились или куда копнуть?GitHub - artpaul/clickhouse-cpp: ClickHouse C++ client libraryClickHouse C++ client library. Contribute to artpaul/clickhouse-cpp development by creating an account on GitHub.
-
timed out это явно сетевая проблема
-
сокет не открывается, до КХ дело не доходит даже
-
подскажите, при SELECT ... FROM mysql( ... ) это ожидаемое поведение, что в WHERE mysql_index_column > 100 - индекс применяется нормально, а при WHERE mysql_index_column > 100 AND mysql_index_column < 200 выкачивается вся таблица ?
ClickHouse server version 19.11.3 revision 54423 -
подскажите, довольно встречаю такую проблему:
rename table1 to table2;
Error: Code: 84. DB::Exception: Received from localhost:9000, ::1. DB::Exception: Target path already exists: /var/lib/clickhouse//data/table1/
sudo rm -r /var/lib/clickhouse//data/table1/
rename table1 to table2;
Code: 0. DB::Exception: Received from localhost:9000, ::1. DB::Exception: File not found: /var/lib/clickhouse//data/table1/ -
что я делаю не так?🤔
-
в общем ренейминг - очень опасная штука, любит зависать и создавать неконсистентные состояния
-
таблица distributed?
-
нет, просто MergeTree
-
это странно тогда.
особенно путь с table1
rename table1 to table2;
Target path already exists: /var/lib/clickhouse//data/table1/
версия КХ ? -
ну это последствия не до конца удавшегося ренейма видимо
-
версия 18.14.19
-
Ребят в каких единицах передаються значения в pointInEllipses ?
-
Точно метры?
-
pointInEllipses(
longitude,
latitude,
55.1,
37.1,
toFloat64(339)
,toFloat64(339)
) -
там безразмерное все
-
т.е. в чем передаются координаты - в том и должны быть и параметры эллипса
-
доки надо подправить
-
55.2221314,37.2131511 если мои координаты в грудусах, то я должен в градусах длину окружности указывать?
-
да
-
прикольно
-
Как перевести метры в градусы в кх?)
-
это зависит от планеты для которой считаешь 😁
-
А во что перевести координаты точки чтобы давать кх метры?
-
ну это тот же вопрос только наоборот. в расстояние от нулевых широты-долготы вероятно...
-
Там не градусы, pointInEllipses это не география
-
это геометрия
-
x, y, R -- это попугаи, не метры, и не градусы широты и долготы
-
Вы меня запутали
-
еще раз - оно безразмерное
-
это плоскость, меряется в единицах.
-
-
Зависит от широты
-
Недавно же обсуждали, скопипастите ктонить а то я с телефона
-
-
Так у меня есть плоскость, и координаты центра окружности 55.7520233,37.6174994 с радиусом в 25 метров. Как мне проверить, принадлежит ли точка 55.7528384,37.620128,17 этой окружности?
-
В твоих условиях 55 и 37 тоже метры
-
-
ааааааааа
-
-
Там не градусы, pointInEllipses это не география
-
x, y, R -- это попугаи, не метры, и не градусы широты и долготы
-
То есть получается, я беру "длину" и "ширину" земли в этой точке и с помощью этого из метров перевожу в координаты?...
-
Наверное проще мне будет считать расстояние между точками, и если оно меньше моего радиуса то значит точка внутри окружности
-
Походу мне надо начать контрибутить в кх работу с геоданными
-
yandex/ClickHouse tagged: v19.11.5.28-stable
Link: https://github.com/yandex/ClickHouse/releases/tag/v19.11.5.28-stable
Release notes:
v19.11.5.28-stableClickHouse/ClickHouseClickHouse is a free analytics DBMS for big data. Contribute to ClickHouse/ClickHouse development by creating an account on GitHub.
-
-
-
-
minmax индекс хранит мин макс значения гранулы насколько я помню. И позволяет не читать ее если интересующее значение не в этим диапазоне. К aggregating не имеет никакого отношения. Глянь видео с недавнего митапа там Алексей кажется это объяснял
-
Minmax он используется совместно с примари индексом ?
-
-
да
но если например у вас таблица -- aggregatingmergetree order by banner_id
т.е. в каждой грануле будет типа min = 0 a max = Infinity то скипать будет нечего -
-
https://github.com/yandex/ClickHouse/commit/849af746a10803b5419a4ff2fc70703f452883d9
хорошо пофиксили кафку)Fix build · yandex/ClickHouse@849af74ClickHouse is a free analytic DBMS for big data. Contribute to yandex/ClickHouse development by creating an account on GitHub.
-
Да, кафку в 19.11.5 не чинили, но уже чиним
-
-
есть какие-нибудь эстимейты когда будет релиз?
-
-
есть готовый datasource плагин для графана
https://grafana.com/grafana/plugins/vertamedia-clickhouse-datasourceClickHouseClickHouse datasource for Grafana
-
Тут больше вопрос, как из ch метрики посылать, вроде как самое удобное - это в графит, так как ch поддерживает.
-
тогда да, или экстратор для prometheus использовать
-
Ещё не совсем понятно поведение движка aggregatingMT . Пример : есть 3 поля - дата , какое-то значение , по которому аггрегация и собственно сам аггрегат_стайт. Вычисляется max() . Допустим , хранятся значений за какой-то условный примежуток -3 дня. Посчитал максимальное значение - оно равно A. Если удалить партицию самую старую , изменится ли значение значение , возвращающее запросом ? Написанно , что " хранится промежуточное состояние агрегатной функции" , значит можно смело удалять старые парты , а промежуточное значение будет хранится в более свежих записях, или не так ?
-
Вот и хотел понять какой путь более "прямой".
-
тот максимум который вы получите будет равен максимуму за то время, за которое вы делаете запрос (и за который есть данные)
-
Благодарю.
- 06 August 2019 (260 messages)
-
-
добрый день, пытаюсь сделать ALTER TABLE UPDATE text_column = '' WHERE user_id >= 100 AND user_id <= 200 AND started_at >= toDate('2019-03-07') AND started_at =< toDate('2019-04-07') - создается mutation и сразу же говорит что нужно обработать 200 parts, я захожу в папку с данными КХ и там 26 папок с данными, которые соответствуют данному диапазону. started_at - partition key (таблица была создана в старом синтаксисе) - тип Date
-
-
мутируют всегда ВСЕ парты.
создаются хардлинки для всех файлов всех партов, создаются новые временные файлы для колонок которые апдейтятся для кусков которые подпадают под условия, по концу создания временный файл переименовывается в постоянный. -
со временем количество партов уменьшается - получается он выполняет запрос из WHERE для каждой part и переписывает те записи которые соответстуют запросу?
Так же вопрос по оптимизации перформанса для ALTER TABLE - у меня есть большой (40 тыс пользователей) разреженный (буквально по 2-3 в группе) список пользователей который нужно почистить, например (user_id >= 100 & user_id =< 102) OR (user_id >= 104 & user_id =< 105). Если все это объединять через OR то все в один ALTER TABLE не влезает. Приходится создавать несколько мутаций подряд. Все записи которые надо почистить находятся в рамках одного месяца (по которому нет активных инсертов), но все мутации выполняются очень долго (в-целом активность по КХ кластеру в это время суток очень маленькая).
Я запустил простой SELECT с подобным условием он выполнялся очень долго - наверняка из-за этого сложного списка пользователей. Можно ли как-то оптимизировать подобный запрос? Может всех пользователей для которых надо выполнить мутацию в отдельную временную таблицу и подзапросом проверять на наличие в таблице? -
libgeos было бы неплохо прикрутить
-
Привет! Если метрики в graphite-формате, то https://github.com/lomik/graphite-clickhouse
- самое верное средствоGitHub - lomik/graphite-clickhouse: Graphite cluster backend with ClickHouse supportGraphite cluster backend with ClickHouse support. Contribute to lomik/graphite-clickhouse development by creating an account on GitHub.
-
Сорян, мне кажется какая-то путаница постоянно. Кликхаус и так умеет в графит (метрики слать), а графана и так умеет в графит тоже.
-
да, табличку с нужными user_id и потом alter .. where in (select ... ) если нужен update то сверху словарь (на табличку) (или использовать табличку с движком JOIN) и dictGet / joinGet
-
-
Умеет то умеет, но работать именно с метриками удобнее в графит-формате(фильтровать, объединять, усреднять и т.д.).
Не знаю где он устарел, но у нас он активно используется. Не знаю надежного решения для вставки 50МЛРД точек в сутки с хранением более 1,5 лет и извлечением графиков по ним за ~1c -
Понял, буду знать. Я уже было думал начал думать, что нужен отдельный ch под метрики ch
-
У нас один графит(1 кластер) на КХ и хранит в тч метрики КХ
-
-
-
У нас был обычный гафит(go-carbon), который заменили на свзку carbon-clickhouse(принимает метрики и вставялен их в КХ) - > clickhouse-server(хранит данные) ->graphite-clickhouse(принимает запросы на метрики и селектит их в КХ) -> carbonapi(реализуте графит-функции) ->grafana
как на схеме: https://github.com/lomik/graphite-clickhouseGitHub - lomik/graphite-clickhouse: Graphite cluster backend with ClickHouse supportGraphite cluster backend with ClickHouse support. Contribute to lomik/graphite-clickhouse development by creating an account on GitHub.
-
Joined.
-
-
Ага, спасибо. В чем основная разница над чем графит крутится?
-
Обычный графит(whisper-файлы) перестал вывозить из-за ИО, хотя в стораджах у нас страйп на 10ССД
-
-
более 600к, 40М в минуту
но в 3 реплики, в среднем в 1 сервер вставяем 15М, хотя при необходимости можем вставлять и 150М (в неесколько потоков) -
Ок, спасибо, выглядит как хороший план, я так понял с графаной для графиков вы уже экспериментировали и предпочли графит.
-
Да, исторически все смотрели свои графики из графита в graphite-web/grafana, мы заменили хранилище и ускорились в разы (iops дисков хранилищ упали с 50к до 100)
-
Тут надо понимать что хранить метрики кх в самом кх это рекурсия. Если кх заболеет вы их не увидите и диагностировать сложно будет. Либо завести отдельный кх, либо хранить в старом графите (или его гошных аналогах) - метрик кх не много генерирует.
-
Я думаю отдельный ch под это конечно намного правильнее.
-
С 50к до 100 (сто)?
-
у нас метрики идут в мойру параллельно КХ, и если кластер КХ совсем падет, без алертов не останемся, а потеряем историю
-
да
-
-
и сеть просела в 10 раз, так как в графиты мы писали forward'ом, каждую метрику в 3 стораджа, а сейчас одну в один, а потом по реплике все сходится
-
опечатка, с 5к до 100
-
Переход:
-
-
Без кворума?
-
тут нет кворума, можно писать в любой, хоть 1 реплику из 10, все расползется на все
-
Но без кворума это без гарантий при падении этой одной. Если вы клали в 3 до этого - то это было с гарантиями, вроде как.
-
да, если одна нода получила уникальные данные, и не успев их передать(другие не скачали их с неё) умерла, то данные потеряны, это да, но для аналитики, где вставляется миллионами, потеря несколько тысяч - небольшая потеря
-
пока мы ничего значительного не теряли при падении сервера, репликация достаточно быстрая
-
-
макисмум можем потерять все данные за одну минуту, то есть 15-20М метрик, или одну точку на половине графиков, это несущественно, таких точек 1440 в сутках
-
-
имхо - чумовая фича, таблички одинаковые, во второй добавил вторичный индекс
-
ну индексы работают
-
Да. Понятно, здорово. Строки и размер меняется, а время запроса всегда одинаковое
-
тебе повезло, у тебя получился покрывающий индекс
-
Это что значит?
-
попробуй отобрать поля которые не входят в индекс
-
это значит что индекс покрывает все поля запроса
-
и для обработки запроса может использоваться только индекс, без доступа к данным
-
здесь должна быть просадка по скорости. т.к. по индексу надо будет сходить в оригинальные данные и посмотреть поле
-
-
-
-
Joined.
-
cтарые партиции должны проредиться при optimize ... final
другое дело , что новые мерджи не идут, если нет 2х кратного места под партишен текущий -
-
-
То есть первый вариант - расширить место более чем в 2 раза.
Второй - создать реплику с большим местом, перелить данные туда, запустить OPTIMIZE final и вернуть обратно -
-
-
сейчас попробую
-
Поможет, мы так делали на помесячных партициях, таммерджи по 3 суток шли
-
Спасибо! Ещё задумался над партицированием по суткам, т.к. хостов и метрик много, а читают обычно графаной последние 12 часов. Пробовал кто?
-
да, мы на прошлой неделе окончательно перешли на подневню таблицу, помесячная ещё есть, но скоро удалим, в помесячной - 7ТБ, в подневной 3ТБ
-
данных > 1,5 года
-
О как, сколько узлов на мониторинге?
Есть разница в скорости при работе с графаной? -
Joined.
-
привет, есть домашний сервачок, на котором хочется развернуть ClickHouse с целью посливать туда метрики с IoT устройств и отобразить это в Grafana. Но есть одна проблема - SSE 4.2 отсутсвует. Пытаюсь собрать из сходников с флагами отсюда https://github.com/yandex/ClickHouse/issues/1695#issuecomment-353779526, но тесты всё равно разваливаются с Illegal instruction (core dumped). Я в файле для сборки не особо разбираюсь. Подскажите, те ли я флаги использовал и в нужное ли место поместил? тут есть информация о конфигурации железа, мой release файл и вывод билда https://markdownshare.com/view/a7040a10-31cf-4845-b4be-0429f1e43cf3Check flags when run Clickhouse · Issue #1695 · yandex/ClickHouse
Hello! I try run Clickhouse on old CPU, but get error: Illegal instruction I found Clickhouse required CPU flag SSE 4.2. Can add check flags when run Clickhouse and echo "CPU doesnt suppor...
-
серверов единицы тысяч, но кроме системных есть ещё бизнес метрики и метрики приложений, пока что 99й перцентиль ответов графаны держится в 1-3 секунды
-
иногда всплески до 5с, когда запросят странного или большоой диапазон
-
и мониторингом у нас мойра занимается, в КХ только история
-
Вот этот баг (https://github.com/yandex/ClickHouse/issues/4040) проявился между версиями 19.1.8 и 19.10.1. В каком релизе это исправлено?remote(...) to older server = Not found column comment_expression in block · Issue #4040 · yandex/ClickHouse
Trying to connect from 18.16.1 to 1.1.54362 via remote table function, getting: Received exception from server (version 18.16.1): Code: 10. DB::Exception: Received from localhost:9000, ::1. DB::Exc...
-
Подскажите, когда и в каком релизе будет пофикшено? https://github.com/yandex/ClickHouse/issues/5846Kafka consumer stops - cppkafka::HandleException Local: Timed out · Issue #5846 · yandex/ClickHouse
Describe the bug ClickHouse Kafka consumer stops consuming from Kafka, and restarts after some time (from 0 up to 2 hours)... Restart of ClickHouse docker container helps imediately. Problem starte...
-
на 19.11.4 работает
-
а мб знаете проекты, которые автоматизированно делают такой инсерт из селекта для множества таблиц?
-
notepad++ и bash/python
-
-
-
я чет не совсем понимаю, что здесь происходит
-
да было бы там что писать)), 1 select from system.tables и в notepad сформировать INSERT регэкспом)
-
Joined.
-
Ребят а как слайсануть стринг в кх? Из арт10011-3123 взять с 4 символа по 8 включительно? str(val)[4:9] что-то типо такого
-
-
Да действительно... Спасибо
-
-
-
-
None
-
Joined.
-
-
всем привет, есть ли смысл использовать кликхаус, в случае, когда событий не много ( ориентировочно 3к в минуту)
терять их не хочется, но терпимо
и при этом хочу быстро получать данные агрегитированые по суточно, почасово, поминутно
в некоторых случаях по строчкам
хочу хранить эти данные за последний год,
а может и не удалять вовсе, если будет все устраивать -
Да, вполне, в этом случае необходимый набор будет помещаться в ram
-
возможно 19.1 или ранее
-
коллеги, подскажите, есть ли возможность приблизительного поиска? Например, у меня есть словарь девайсов Apple где id вида: iPad 5,7 и соответствие правильных названий этим девайсам в name
Далее, если таблица с данными, где в тч есть device где как раз большая часть в таком Apple-формате (iPad 5,7)
но есть часть косячных данных типа iPad 5 7 или iPad5;7
Есть ли возможность не искать вручную все такие косяки и просто связывать по подобию? -
"подобие" очень субьективный показатель
-
iPad5;7 это 5 или 7 ?
-
и еще допустим мне нужно получить все события определенного пользователя, чтобы выгрузить их в отчет. допустим за месяц, квартал, полгода, год
этот сценарий для кликхауса нормальный? -
-
перепутал цифры местами) iPad7,5 = iPad 9.7" 6th Gen (Wi-Fi Only)
-
вот здесь уже обсуждаемо, исходя из того что я прочитал за последние две недели - это кейс для кассандры
-
-
-
просто там будет много колонок, по которым будет необходима такая выборка
-
-
3к событий в минуту - это же всего 1.5млрд в год
-
это примерно, там если и больше, то x2 - x5 будет
-
а если побезумствовать и все колонки, по которым хочу такие выборки в ПК положить? )
-
-
ну да
-
ок, тогда разведка боем, попробую нагенерить данные и посмотрю что будет
-
Это бессмысленно и ухудшает производительность.
Поиск работает по префиксу как и везде. -
а подскажите еще такой момент, пытаюсь в докере настроить кликхаус, при запуске сервера вижу
Include not found: networks
но у меня в конфиге нигде не указан такой incl -
это warning. ни на что не влияет.
В дефолтном конфиге есть incl=.... (который ссылается на /etc/metrica.xml которого у вас нет) -
ага, нашел, в users xml есть такой incl
-
спасибо
-
-
-
ваш запрос не использует индекс, чтобы оно работало быстрее вам надо ts делать перым полем в индексе
-
привет, а подскажите как себя ведет go clickhouse-ный драйвер с Default значениями?
-
Почему он не может использовать второе поле из индекса ?
-
На первый взгляд в этом есть выгода . Индекс скип скан ?
-
вот тут описано, как это работает https://clickhouse.yandex/docs/ru/operations/table_engines/mergetree/#primary-keys-and-indexes-in-queries
-
Понятно , что не всегда будет выгода, но индекс всегда в памяти
-
Скорее всего под условие в where попадают все или большинство партов, поэтому выгоды нет
-
Я про проверил на простом примере , если на вторую колонку наложить условие > чего то, то он юзает индекс
-
Подскажите, новичку. Можно ли установить TTL на всю строку в таблице, а не на отдельные столбцы и как это сделать?
-
-
Хорошо, я не правильно выразился, индекс используется, но он ничего не отсекает, потому что значения ts в каждом парте от 0 до 9999999999, в результате кликхаус фулсканит
-
ага, на всю таблицу ставьте
-
Спасибо. Побоялся, что это оно всю таблицу дропнет 😊
-
оно дропнет все строки по условию TTL
-
up, драйвер вот этот https://github.com/kshvakov/clickhouseGitHub - ClickHouse/clickhouse-go: Golang driver for ClickHouse
Golang driver for ClickHouse. Contribute to ClickHouse/clickhouse-go development by creating an account on GitHub.
-
У вас партиции по дате. а в индексе 3 поля. Сделайте ts первым
-
🙏
-
А что значит selected 2 parts by date, 2 parts by key...почему и по дате и по ключам ?
-
КХ умеет это (использовать индекс без префикса) и делает скип скан, если кардинальность префикса <100 в парте
-
Пока сталкивался только с долгой выгрузкой на жирных селектах.
-
А что значит кардинальность меньше 100 для конкретного парта
-
я ток что столкнулся что пишу nil в колонку у которой есть дефолт а оно ругается
-
order by a,b
where b=? будет работать по индексу если у поля a мало возможных значений -
А он же не сможет узнать сколько значений поля
-
У него есть только n значений в индексе
-
Посмотрите по ссылке, котораю я вам дал, кейс когда в запросе только дата, она там вторая в списке полей order by, там выбирается почти весь парт
-
Спасибо. Я читал тот документ. Это понятно , что индекс не всегда выгоден. Вопрос как КХ решает . Когда выгоден , а когда нет
-
Если по индексу получилось отсечь часть данных - индекс выгоден, не удалось - не выгоден
-
Ок.т.е он обработал инлекс и если хотя бы один блок удалось отсечь , то он его юзает ?
-
create table test(a Int64, b Int64, c Int64, d String)
engine=MergeTree partition by tuple() order by (a,b,c);
insert into test select 1, 0, number, toString(number) from numbers(1000000);
insert into test select 2, 2, number, toString(number) from numbers(100);
insert into test select 3, 3, number, toString(number) from numbers(1000000);
select count() from test prewhere c=1;
1 rows in set. Elapsed: 0.002 sec. Processed 16.48 thousand rows, 131.87 KB (10.45 million rows/s., 83.58 MB/s.)
select count() from test prewhere identity(c)=1;
1 rows in set. Elapsed: 0.009 sec. Processed 2.00 million rows, 16.00 MB (224.66 million rows/s., 1.80 GB/s.) -
индекс используется для 3-го!!!! поля
-
а подскажите, я по глупости поставил дефолтному пользователю в кх пароль, можно его както удалить?
-
удалить файлик в users.d/default что-то
-
а где оно? чет не нахожу ничего похожего :(
-
новые пакеты при установке спрашивают пароль пользователя default и сохраняют в /etc/clickhouse-server/users.d/default-password.xml
-
а лучше прям файлик грохнуть или из него удалить пароль?
-
вы у админа спросите какие настройки default нужны вашей системе, у меня например портянка на пол экрана у default
-
В терминах чтения . Что КХ называет ranges ?
-
а я себе локально поставил, тесты в драйвере поотлаживать)
-
ну тогда просто удаляйте
-
я удалил его из конфижика, стало окич, огромное спасибо ❤️
-
А кто знает как Кх определяет кол-во потоков для чтения ? Если можно , киньте ссылку на исходный код сюда
-
Вроде это зависит от parts by key ? Но я видел , что там связь не 1 к 1
-
подскажите плиз, в докере подсунул в директорию
/docker-entrypoint-initdb.d
файлик schema.sql
там создаю БД и таблицы.
база создается, таблицы - нет. в логах ничего такого не увидел
куда копать?
если выполнить эти же запросы после запуска - таблицы создаются -
CREATE DATABASE IF NOT EXISTS pult_playback;
CREATE TABLE IF NOT EXISTS pult_playback.test_table1
(
EventDate DateTime,
CounterID UInt32,
UserID UInt32
) ENGINE = MergeTree()
PARTITION BY toYYYYMM(EventDate)
ORDER BY (CounterID, EventDate, intHash32(UserID))
SAMPLE BY intHash32(UserID);
CREATE TABLE IF NOT EXISTS pult_playback.test_table3
(
EventDate DateTime,
CounterID UInt32,
UserID UInt32
) ENGINE = ReplicatedMergeTree('/clickhouse/tables/{shard}/test_table', '{replica}')
PARTITION BY toYYYYMM(EventDate)
ORDER BY (CounterID, EventDate, intHash32(UserID))
SAMPLE BY intHash32(UserID); -
Добрый вечер, коллеги. Не могу найти упоминаний о джойнах в материалайзед вью. Такое возможно?
-
Попробуй через баш с включенной опцией мультилайн.
#!/bin/bash
set -e
clickhouse client -n <<-EOSQL
// запросы
EOSQL -
А вместо schema.sql подкинь schema.sh например
-
спасибо, попробую
-
на докерхабе, человек делавший описание как раз уснул на этом месте, или ограничение там есть на символы
-
ну там кол-во тредов (если не задано, то половина от кол-ва cpu) умножается на мультипликатор стримов на тред, умножается на мультипликатор для движка merge если это мердж движок, умножается еще на чего-то для вроде дистрибьютид и дальше еще кучка всего
-
Т.е максимум - это половина цпу?
-
нет, наоборот, это минимум
-
возможно, только самые простые, и лучше не надо (лучше словарь)
MV конечно срабатывает только на левую таблицу -
Па максимум какой ?
-
без понятия, вам зачем?
-
Для интереса. Кстати максимум все же похож на половину от всех ядер, как вы сказали изначально. Сейчас взял огромную таблицу. Минимум - соответственно 1, когда одна парта .маленькая
-
Смотрю , что он в пайплайн пишет . В логе
-
ну задайте max_streams_to_max_threads_ratio=10 и max_streams_multiplier_for_merge_tables=10
и посмотрите на новый максимум -
т.е. при max_threads=10 и max_streams_to_max_threads_ratio=10 будет 100
-
Спасибо, а про словарь, это куда мне гуглить? Или можно ссылку, если не сложно?
-
-
Спасибо
-
@kshvakov кажется дефолты совсем не обрабатываются завел ишуй, https://github.com/kshvakov/clickhouse/issues/199Columns with DEFAULT values not inserted · Issue #199 · kshvakov/clickhouse
When is insert nil value in column that has DEFAULT specified i receive exception: Here example how to reproduce it: package main import ( "fmt" "log" "...
-
Skipping Indice type set(n) работают только для пропуска по условию в where? Если нужно посчитать уникальные ID, есть ли смысл собирать их в set?
-
Вы же колонки при инсерте явно задаёте
-
я вот ща попробовал через cli сделать то же и не вышло, у меня просто поток однородных инсертов, где то есть пропуски, хочу их заполнить дефолтами.
-
сейчас я крэшусь, разбивать это на кучку инсертов с пропусками не вариант
-
😩
-
я искренне ожидал что nil будет интерпретирован как пропуск :(
-
судя по коду там такой штуки как дефолт в инсерте нигде нету.
а cli это тоже не поддерживает? -
А вот не совсем понял со словарями. Моя идея взять данные из нескольких таблиц, струппировать определенным образом, обьединить и записать в новую таблицу. Словари, как указано просто хранят в памяти обьедененные данные с разных источников. Не уверен, что мне это подходит
-
нет, здесь индексы не помогут.
"посчитать" в смысле кол-во? в aggregating можно uniqState хранить/считать -
Спасибо, да, смотрел в сторону -State, буду пробовать
-
что ? какой nil ? вы про какой формат вообще? values ? TSV ? JSON ?
-
разве что для uniqExact это полный список...
-
я тогда вообще не понял
-
Есть пять таблиц со смежными данными. Хочу достать из них всех данные за день, сгруппировать по дате и записать в новую таблицу
-
>данные за день
звучит как будто вам cron нужен а не MV -
Ну хотелось максимально все сделать средствами КХ
-
-
тогда вам надо понять что MV это триггер на инсерт который не ходит в таблицу.
а словари позволяют сделать примерно все тоже самое что и join -
это в терминологии го NULL
-
формат там нативный, и судя по тому что я вижу в нативном фомрате нельзя задать DEFAULT-уемую колонку и не передать ее значение.
-
так в ANSI SQL тоже нельзя.
insert into X (a) values (Null) положит Null -
а если колонку не нулабельная?
-
насколько я помню по стандарту положено ключевое слово DEFAULT
-
раньше вставлялось как JSONEachRow и работало хорошо, а вот когда попробовал через нативный интерфейс сломалось :(
-
default задает в поле таблицы и заполняется если поле опущено в insert
insert into X (b) values (1) положит Null или Default в колонку a , потому что ее не было в insert
PG:
create table X(a int default 5, b int default 44);
insert into X(b) values(null);
select * from X;
a | b
---+---
5 |
(1 row) -
да, я понимаю но есть вот такое:
create table X(a int default 5, b int default 44);
insert into x(a, b) values (default, default);
select * from x;
5 44 -
удивительно, не знал такого
-
видимо фича постгре
-
наверное надо ишуй завести?
-
эт вроде в стандарте есть 🤔
-
Как минимум в мелкомягком SQL тоже имеется. Стандарты SQL92 и прочие не читал так что хз
-
ну вон кстати есть такой fr https://github.com/yandex/ClickHouse/issues/6331Add support for DEFAULT keyword for INSERT statement · Issue #6331 · yandex/ClickHouse
Use case create table table1 ( field1 Int32, field2 Int32, field3 Int32 default CAST(1337, 'Int32'), field4 Int32 default CAST(1337, 'Int32') )engine = MergeTree() P...
-
свежее) вчера открытое)
-
и для csv и json уже есть https://clickhouse.yandex/docs/ru/operations/settings/settings/#session_settings-input_format_defaults_for_omitted_fieldsНастройки | Документация ClickHouse
Настройки distributed_product_mode Изменяет поведение распределенных подзапросов. ClickHouse применяет настройку в тех с
-
да, с JSONEachRow это работает, потому что оно транслируется в пропущенный филд
-
-
Joined.
-
-
show processlist
-
1. с sse скорее все хорошо, падает специальный тест .
а сам сервер говорит что
Start clickhouse-server service: Cannot obtain value of path from config file: /etc/clickhouse-server/config.xml
и это надо исправить.
2. release можно не исправлять а запускать так:
env CMAKE_FLAGS="-DHAVE_SSE41=0 -DHAVE_SSE42=0 -DHAVE_POPCNT=0 -DHAVE_PCLMULQDQ_INTRIN=0 -DPCLMULFLAG=' '" ./release
3. если собирать на том же сервере где планируется запускать - никакие HAVE_* выключать не нужно - все определится автоматически.
итого - подложить правильный конфиг и собирать просто через ./release -
Спасибо за подробное объяснение, на неделе попробую с этим разобраться
-
У меня есть кластер из трех серверов.
Все таблице работают с шардированием и одной репликой локальной.
Хочу для каждего сервера еще добавить реплики.
Мне достаточно обновить конфиги трех серверов и запустить новые сервера для реплики. И все само засинхронизируется в новых серверах. Верно ? -
Если есть зукипер и таблицы Replicated... то да
-
Супер, спасибо!
-
репликация (replicated engine) не имеет отношения к конфигам.
У вас на старом сервере есть таблица Engine = Replicated ('/zk_path/{shard}/tttt','{replica}') shard и replica заданы (через конфиги - макросы), в тот момент когда на новом сервере вы создадите таблицу с таким же zk_path/{shard}/tttt и другим replica, начнется репликация. -
а вам не поможет настройка input_format_null_as_default?
-
а как ее задать? в частности для нативного формата? (например cli)
-
set input_format_null_as_default = 1
-
ой, оно ж для csv, невнимательно прочитал(
-
Joined.
-
-
-
-
Joined.
-
http POST vs GET ? get -- read only
-
-
-
что??????
When using the GET method, 'readonly' is set. In other words, for queries that modify data, you can only use the POST method. You can send the query itself either in the POST body, or in the URL parameter. -
-
-
тут понял, что 2 настройки регулируют. Да
-
вы путаетесь в показаниях, табикс бы тоже не работал
-
-
если у пользователя 1 — Only read data queries are allowed. то таббикс так же точно не сможет remote
-
-
-
-
-
LightHouse точно выставляет вручную, может быть SuperSet тоже это делает?
-
-
-
Это было бы очень странно
-
но на самом деле это всё не отменяет этого вопроса
-
Table function is just a way to dynamically create a table for single query.
-
https://tabix.io/doc/Requirements/
readonly user can if setting readonly=2 -
-
Не обязательно. Ты можешь в теории с помощью remote подключиться к произвольному серверу, который доступен только с сервера ClickHouse, но не снаружи. Это потенциально небезопасно, даже если технически это будет всегда read
-
- 07 August 2019 (258 messages)
-
Вопрос к знатокам. Если в логах по ИД потока, выполняющего INSERT INTO ...
я вижу:<Debug> default.graphite_day (Replicated OutputStream): Wrote block with ID '20190807_4408477239303692248_10282740961717760983', 1001096 rows
значит, вставился 1М строк, верно ? -
-
-
<source>
<mysql>
<update_field>
date_add(updated_date, interval 15 minute)
</update_field>
В документации нет, действительно -
-
-
-
Дык що мешает в пределах одного хоста развернуть 100500 инстансов КХ, каждый на своем порту?
-
-
:) В продукшене так никто не делает, а для тестов - самое оно.
-
-
-
Нет. 1 инстанс КХ - один шард.
-
ну да, сервер КХ имелся ввиду (как процесс) 🙂
-
Ну я под сервером таки понимаю 1 виртуалку или физисский хост. А вот инстанс - енто таки сервис :)
-
-
-
Хогвардс рулит
-
А смысл?
-
Запрос выполняется в три раза быстрее, данные реплицтруются
-
Можно, у меня именно такая конфигурация. Насчёт более быстрых запросов - не обольщаться. Вдумчиво смотреть на необходимые IOPS, на HDD захлебнуться элементарно.
-
А, именно цикличная репликация имеется в виду? Не понял сразу.
-
Такое можно конечно https://www.altinity.com/blog/2018/5/10/circular-replication-cluster-topology-in-clickhouseCircular Replication Cluster Topology in ClickHouse
In some cases, there is a need to configure a distributed cluster with replication but there are not enough servers in order to place every replica on a separate node. It is better to have multiple replicas at the same nodes configured in a special way, that allows to continue executing queries even in the case of a node failure. Such replication configuration can be found in different distributed systems, it is often referred to as ‘circular’ or ‘ring’ replication. In this article, we will discuss how to set up circular replication in ClickHouse.
-
Я так живу, все ок
-
-
-
Можно, но мы не очень советуем, если честно. Скажем, ON CLUSTER не работает, есть и другие неудобства
-
на всех. Можно ON CLUSTER написать
-
Ну, зависит от юзкейса. Для меня очень подходит, нагрузка не очень большая, позволяет не плодить сервера. ON CLUSTER я не юзаю - разливаю всё через Ansible
-
можно же проще: <update_field>updated_at</update_field>
-
-
Всем доброго дня!
Кто-нибудь может подсказать, как в Clickhouse можно реализовать механизм с start_date И end_date?
Например: есть таблица с полями ключ/значение/start_date/end_date
В ней есть строка:
1 val1 2019-08-05 NULL
Прилетела еще строка:
1 val2 2019-08-08 NULL
Соответственно, состояние таблицы должно стать таким:
1 val1 2019-08-05 2019-08-08
1 val2 2019-08-08 NULL
Как это можно реализовать в Clickhouse? -
можно через aggregatedMergeTree попробовать, при помощи функции argMax
-
-
если чуть поточнее опишите, что требуется, постараюсь подробнее подсказать
-
-
-
В TinyLog нет засечек и это приводит у тому , что запросы на нем не могут работать в параллель. В джижке Log есть засечки и на каждую колону - отдельный файл.т.е можно параллелить и читать только одну колонку. В движке StripeLog ест засечки, но все колонки в одном файле. Зачем он нужен ,иемли есть log ?
-
Автоматически вставлять запись для предыдущего значения с end_date, где end_date - это start_date текущего значения не получится (насколько я знаю).
Если только вручную вставлять старое значение и проставлять end_date. Тогда можно будет сделать materialized view, которая будет записи, где end_date is not null писать в отдельную таблицу, а по ней уже делать эффективный поиск -
а подскажите как из запроса под Distributed таблице вытянуть имя шарда?
-
Лучше с перехлестом, чтобы не пропустить что-то
-
hostName()
-
-
-
У тебя может прилететь что-то в mysql в момент апдейта словаря.
-
ПОнял, спасибо за инфу, попробую посмотреть вариант с argmax, мб получится
-
так индекс работать не будет
-
а можно как то создать Distributed таблицу создать на кластере?
-
какой функцией можно строку md5, подобную этой 2a9fab266cf3acb3c51d6922970d8b5e, вернуть обратно в бинарное представление, чтобы записать в тип FixedString(16)?
-
В теории, если на каждой ноде кластера. Только зачем?
-
что бы на каждую ноду кластера ходжить и стучать в дистр табличку?)
-
это понятно, только не ясно, что это дает. Запрос в любом случае пойдет на все шарды, на которые смотрит эта таблица
-
ну да, в целом согласен, у меня просто код делает клиенсткую балансировку по доступным хостам кликхауса и с дистр таблицами мне может не повезти)
-
Будет. Либо через интервалы
-
Joined.
-
-
Он запоминает свое локальное время. https://github.com/yandex/ClickHouse/issues/6084Configurable shifting parameter (lag) for partial dictionary update instead of hardcoded 1s. · Issue #6084 · yandex/ClickHouse
Currently CH uses hardcoded (-1 sec) lag. https://github.com/yandex/ClickHouse/blob/master/dbms/src/Dictionaries/HTTPDictionarySource.cpp#L58 time_t hr_time = std::chrono::system_clock::to_time_t(t...
-
Мне @milovidov_an по другому рассказывал
-
-
-
Он рассказывал вам как он хочет сделать. На самом деле нет хорошего варианта. Из-за транзакций в бекенде нужен лаг и да вычитать 15мин. это правильный воркэраунд для обхода commited read.
-
Я рассказывал, что там есть проблема с локальным временем.
-
Если бы. Я считаю что нужно локальное и удаленное использовать нельзя. Потому что с удаленным я начну грузить одни и теже 1000000записей у которых время не двигается.
-
Data can be skipped when using partial dictionary updates · Issue #2847 · yandex/ClickHouse
I am experimenting with partial dictionary updates using the update_field parameter. I found out that time_point is increased after every update, even if there was an error. Because of that data ca...
-
В некоторых usecase страйплог быстрее потому что надо прочить все целиком (все поля insert into x select * from stripelog) и получается меньше random i/o
-
StripeLog нужен для сценария, в котором есть много таблиц маленького размера, но с большим количеством столбцов. Для примера, в Яндекс.Метрике, в таблицах типа StripeLog хранятся данные, представляющие собой очередь задач на обработку.
-
select unhex('2a9fab266cf3acb3c51d6922970d8b5e')
-
yandex/ClickHouse tagged: v19.13.1.11-stable
Link: https://github.com/yandex/ClickHouse/releases/tag/v19.13.1.11-stable
Release notes:
v19.13.1.11-stableClickHouse/ClickHouseClickHouse is a free analytics DBMS for big data. Contribute to ClickHouse/ClickHouse development by creating an account on GitHub.
-
Благодарю, разобрался. Сработало через toFixedString(unhex(field), 16)
-
-
> < мозг ломает.
visited может быть больше чем 1-е марта -
-
-
WITH '2019-02-01', '2019-03-01', '2019-04-01' as date
SELECT count()
FROM table_event_visitors
WHERE toStartOfMonth(toDate(date)) < visited AND visited > addMonths(toStartOfMonth(toDate(date)), 1)
Получить статистику по месяцам. Как сделать for date in '2019-02-01', '2019-03-01', '2019-04-01’, чтобы все уместилось в одном запросе? -
-
Joined.
-
Всем привет! Подскажите куда смотреть и что проверить. при создании материализованного представления на 88% возникает ошибка "Code: 9. DB::Exception: Received from localhost:9000. DB::Exception: Size of filter doesn't match size of column."
-
всем привет! подскажите, а можно как-то заставить работать ASOF LEFT JOIN не по условию "меньше или равно" а по "больше или равно"? менять таблицы местами не хочется т.к. нужен именно LEFT JOIN (помог бы RIGHT JOIN, но ASOF с ним не работает). Есть какие-то воркэраунды для этого?
-
Привет. Если колонки целочисленные, то можно их negate две обе
-
Joined.
-
подписывайтесь на тикет https://github.com/yandex/ClickHouse/issues/6337Support for `<`, `<=`, `>`, `>=` operator with ASOF join. · Issue #6337 · yandex/ClickHouse
It would be useful, for example, if we want to join previous entity state to current state. CREATE TABLE states ( entity_id UUID state INT8 timestamp DateTime ) SELECT state AS cur_state, prev_stat...
-
-
Ребята, у меня есть задача записывать события, а через некоторое время (довольно долгое) дописывать в них дополнительные параметры. Я думаю сделать две таблицы, в одну писать сразу, во вторую по мере поступления данных (по которым потом будут делаться выборки). Подскажите пожалуйста, нормальная ли это идея, или может в кликхаусе что-то появилось (не следил за разработкой примерно пол года) что позволяет делать update по таблице, или еще что-то что решает эту задачу. Может есть какие-то бестпрактис?
-
-
В зависимости от того, какие события и что дозаписывать. Большинство подобных проблем решается через Summing/Collapsing или Aggregating MergeTree
-
Поссотрите, pull requests с исправлением Kafka ещё не закрыты?
-
Fix infinite loop when reading Kafka messages by abyss7 · Pull Request #6354 · yandex/ClickHouse
I hereby agree to the terms of the CLA available at: https://yandex.ru/legal/cla/?lang=en For changelog. Remove if this is non-significant change. Category (leave one): Bug Fix Short description ...
-
Мне нужно дописывать в новые колонки, задача примерно такая: есть событие, к примеру, пользователь зашел на страницу (колонки UserId, Date, UserAgent и т.д.), после по UserId используя внешний сервис подтягиваются дополнительные параметры (колонки Sex, Age и т.д.), количество запросов к внешнему сервису ограничено, поэтому планируется что детализация будет происходить раз в сутки. Насколько я понимаю эту задачу нельзя решить через Summing/Collapsing или Aggregating MergeTree, исправьте меня если я ошибаюсь.
-
заведите отдельную таблицу и пишите в нее, а потом через джойн доставайте данные из обеих
-
Кстати, на сколько я помню - тут подобный кейс:
https://www.youtube.com/watch?v=5KQsNmRTQmgРазгоняем обработку событий до 1.6М/сек. Опыт Badoo / Александр Крашенинников (Badoo)Приглашаем на Saint HighLoad ++ 2021 20 и 21 сентября 2021, Санкт-Петербург, DESIGN DISTRICT DAA in SPB Программа, билеты и подробности - https://clck.ru/VmKaW -------- HighLoad++ Moscow 2018 Тезисы и презентация: http://www.highload.ru/moscow/2018/abstracts/4132 Три года назад на Highload++ я рассказывал, как мы построили масштабируемую систему near-realtime обработки событий. С тех пор она эволюционировала, в процессе росли объёмы, и нам приходилось решать задачи, сопутствующие любому проекту с нагрузкой — масштабирование, отказоустойчивость и прочие. В определённый момент мы достигли точки, когда потребовались радикальные меры, а именно — смена технологического стека. В докладе я расскажу, как мы заменили связку Spark + Hadoop на ClickHouse, в три раза сэкономили железо и увеличили нагрузку в пять раз (с 300 000 событий в секунду до 1 600 000 в пике). -------- Нашли ошибку в видео? Пишите нам на support@ontico.ru
-
джойн слишком сильно ударит по производительности как мне кажется
-
Ребята из видоса пишут в массивы eventName и eventValue. А не в отдельные колонки. Вы можете сделать также, а потом, как уже вам удобно собирать, когда вам будет удобно.
-
Сейчас посмотрю видео, спасибо
-
https://github.com/adjust/clickhouse_fdw
— postgresql clickhouse fdw, который умеет в бинарный и http протокол, может кому будет полезенGitHub - adjust/clickhouse_fdw: ClickHouse FDW for PostgreSQLClickHouse FDW for PostgreSQL. Contribute to adjust/clickhouse_fdw development by creating an account on GitHub.
-
19.1 ? 19.6? поле nullable ?
-
19.11.3.11 ни одного nullable нет
-
запустил CHECK TABLE, но кажется независимо от его результатов придётся truncate ить таблицу и все материализованные представления на ней и перезаливать данные(( 1.2T
-
Есть ли способ искуственно притормозить выполнение запроса (чтобы потестить max_execution_time, например?
Смотрю в сторону функции sleep(seconds), но пока не понял, как ее юзать. -
-
у меня не получилось т.к. sleep спит только один раз, а потом его результат кешируется
-
CHECK TABLE вернул 0 - данные в таблице повреждены. в логе сервера нет никакой информации ни о партиции ни о кусочке ни о колонке((
-
привет, а подскажите то что на 100 шардах дистр табличка выполняется тривиальный запрос 70 секунд, это же не норма? Как это дебажить та
-
select sleep(1) from numbers(10) format Null settings max_block_size=1
-
а если
set max_threads=100
перед запросом
дебажить --send_logs_level = debug -
Connection failed at try №1, reason: Code: 209, e.displayText() = DB::NetException: Timeout: connect timed out
оога, какой то из хостов болеет? -
сколько летенси? ping? один датацентр?
-
3 дц, латенси 10-15мс
-
у яндекса 50мс таймаут по дефолту
-
300 хостов, 100 шардов по 3 хоста
-
а можно как то сказать что мне 80% хостов хватит?
-
я себе ставлю <connect_timeout_with_failover_ms>1000</connect_timeout_with_failover_ms>
-
тут у вас все 3 реплики 3 раза не ответили за 50мс
-
ога
-
ну и Яндекс рекомендует субкластеры из 20 нод, т.к. при распределенном запросе на более чем 20 нод вероятность сетевой ошибки и в итоге падение запроса слишком велики
-
Посмотрел видео, не совсем понимаю как этот подход решит мою проблему. Но стало интересно почему они отказались от широких таблиц и как к этому подходу относится Алексей Миловидов ))
-
спасибо!
-
насколько позже данные приезжают? Вам точно надо в КХ писать неполные данные? Чаще всего эту проблему решают до dwh, на этапе ETL. Я использую кассандру.
-
планируется что где-то через сутки, а статистика по событиям с неполными данными нужна сразу к сожалению
-
Добрый вечер.
Есть задача перенести данные из одной таблицы в другую c изменением части данных.
Простой INSERT INTO table1 SELECT ... FROM table2 работает очень долго (~ 80MB/s). Хочется запустить несколько таких запросов паралельно с указанием разных промежутков по времени
(INSERT INTO table1 SELECT ... FROM table2 WHERE date >= t1 and date < t2;
INSERT INTO table1 SELECT ... FROM table2 WHERE date >= t2 and date < t3; ...)
Так делают? И нужно ли тут на что-то обратить внимание при выполнении? -
ну я бы хранил эти данные еще дополнительно где-то (в кассандре например) и по приезду всех данных либо перезаписывал в КХ заново (replacing) либо писал во вторую таблицу. В принципе aggregating тоже позволяет такое, но зависит от кол-ва данных.
-
Делают. Это пока единственный способ ускорить
-
Спасибо
-
А что вы имеете в ввиду под replacing? Во вторую таблицу имеется ввиду копию первой таблицы + дополнительные данные, и в зависимоти от задачи забирать данные либо из первой, либо из второй?
-
--skip_unavailable_shards
-
о дзякуй!
-
ReplacingMergeTree
-
>и в зависимоти от задачи забирать данные либо из первой, либо из второй?
да -
Выглядит как то что нужно. Это давно появилось?
-
лет 5 назад
-
ох
-
спасибо за ответ
-
там не все так просто, но в принципе решаемо и не особо мешает что оно eventual
-
а до слияния мне может вернуться больше чем одна запись, но с разными версиями да?
-
да
-
Скорее всего это не очень подходит, решение с двумя таблицами выглядит как самое рабочее, буду думать, спасибо еще раз за ответы и за кликхаус ))
-
до слияния можно делать SELECT .. FINAL но это будет дольше
-
проблема в том что на миллиардах записей это будет в 1000 раз дольше
-
Получается что всегда нужно добавлять FINAL так как неизвестно когда было слияние и данные постоянно пишутся в таблицу, а это сильно снижает производительность
-
-
А что там особенного? HTTP proxy любой в зубы и вперед :)
-
я тож так думаю. Вдруг есть какие-то особенности
-
Пришел эвент, пишите строку UserId,Date, [‘UserAgent’,’Sex’], [‘{UA}’, ‘m’]
Итог -> у вас есть доступ к эвенту.
Пользователь добавил мыло через неделю пишите
UserId,Date, [‘email’], [‘email@email.email’]
Из этой таблицы вы сможете получить нужные параметры по юзерам, которые когда-то заполнили -
А как фильтровать эффективно такое?
-
Меня настораживает отказ от широких таблиц, хотя разрабоитчики кликхауса везде упоминают про то что следует их использовать и не бояться. У меня очень много событий приходит постоянно, по которым реалтайм выводится куча различной статистики с агрегированием и прочим, не хотелось бы терять производительность. Плюс нет ресурсов на написание каких-то сложных систем агрегирования данных, хотелось бы остаться на простом решении с MergeTree.
-
Эффективно не знаю, но можно попробовать смерджить массивы, сгрупировав по UserId, а потом фильтровать через WHERE val[indexOf(name, ‘Sex’)] = ‘m’
-
-
да, я бы так и делал если бы ненужно было сразу показывать статистику по неполным данным
-
-
Есть url по урлу csv шка. Можно ли к ней обратиться из кх?
-
Не загружая ее в таблицу
-
да
https://clickhouse.yandex/docs/en/query_language/table_functions/url/ -
О_О
-
-
ну и словарь тоже
-
Какая-то магия твориться, особенно после mysql
-
Стоклнулся с проблемой сборки на powerpc из-за принудительного объявления SSE2 - никто не встречал ?
+if (PPC64LE)
+ set (COMPILER_FLAGS "${COMPILER_FLAGS} -maltivec -D__SSE2__=1 -DNO_WARN_X86_INTRINSICS")
+endif ()
в boost simd ругается на то, что сразу две архитектуры задействовано. -
Ребята, добрый вечер
Пытаюсь отправить на HTTP запрос, вида:
select
replaceRegexpAll(my_field_1, '([\\\\r\\\\n]|;|\\\\t)+', ' ') as my_field_2
from
my_table
А он не отрабатывает. Логи пишут, что запрос обрезается на точке с запятой, которая внутри replaceRegexpAll.
Как обойти эту засаду и целиком заслать запрос?
Спасибо. -
-
да, это работает; но почему КХ так на точку с запятой реагирует:
- он может в одном POST-запросе несколько SQL-выражений выполнить через точку с запятой
- или он просто видит точку с запятой и считает, что это конец SQL-выражения? -
Есть max_execution_speed.
-
А что за кластер, может я прсмотрю?
-
У нас ещё есть один плоский кластер на 120 шардов.
-
ОК. Я просто помню что читал статью чью-то из яндекса что 20 нод это ОК. И там рассчет вероятностей был. Мне приснилось?
-
Как ни странно, это ок. В gcc сделали эмуляцию sse intrinsics поверх Power. А разве мы используем где-то boost simd?
-
adfox, https://nda.ya.ru/3VmheL
-
Да, я знаю что ок. с boost нарвался так:
cd /usr/src/RPM/BUILD/clickhouse-19.11.5.28/BUILD/libs/libcommon && /usr/bin/c++ -I/usr/src/RPM/BUILD/clickhouse-19.11.5.28/libs/libcommon/include -I/usr/src/RPM/BUILD/clickhouse-19.11.5.28/BUILD/libs/libcommon/include -I/usr/src/RPM/BUILD/clickhouse-19.11.5.28/contrib/cityhash102/include -pipe -Wall -g -O2 -pipe -maltivec -D__SSE2__=1 -DNO_WARN_X86_INTRINSICS -fno-omit-frame-pointer -Wall -Wnon-virtual-dtor -Wno-array-bounds -O2 -DNDEBUG -fPIC -pthread -std=c++17 -o CMakeFiles/common.dir/src/DateLUT.cpp.o -c /usr/src/RPM/BUILD/clickhouse-19.11.5.28/libs/libcommon/src/DateLUT.cpp
In file included from /usr/include/boost/predef/hardware.h:14,
from /usr/include/boost/predef.h:20,
from /usr/include/boost/smart_ptr/detail/yield_k.hpp:28,
from /usr/include/boost/smart_ptr/detail/spinlock_std_atomic.hpp:18,
from /usr/include/boost/smart_ptr/detail/spinlock.hpp:47,
from /usr/include/boost/smart_ptr/detail/spinlock_pool.hpp:25,
from /usr/include/boost/smart_ptr/shared_ptr.hpp:36,
from /usr/include/boost/shared_ptr.hpp:17,
from /usr/include/boost/filesystem/path.hpp:29,
from /usr/include/boost/filesystem.hpp:16,
from /usr/src/RPM/BUILD/clickhouse-19.11.5.28/libs/libcommon/src/DateLUT.cpp:3:
/usr/include/boost/predef/hardware/simd.h:77:5: error: #error "Multiple SIMD architectures detected, this cannot happen!"
# error "Multiple SIMD architectures detected, this cannot happen!"
^~~~~ -
проблема был в 2х тупящих шардах, но было странно то что оно так долго их отстреливало.
-
У нас есть проблема - если машина тормозит, но принимает соединение, то нет failover на другую реплику.
-
Спасибо. Попробую заменить boost::filesystem на std::filesystem. Кстати, в какой компании нужен ClickHouse на Power?
-
да, кажется это было как раз оно.
-
Можно как-то затайминговать время выполнения всего запроса и сабквери в нем?
-
Чтобы понять где просадка в скорости?
-
--send_logs_level = debug
-
Базальт СПО. В Сизиф собираю
-
Joined.
-
Алексей , а почему КХ не использует асинхронное чтение ? Я про io_submit и io_getevents . Тогда бы даже одним потоком быстрее бы читали
-
В ClickHouse есть возможность использовать асинхронное чтение - достаточно выставить настройку
SET min_bytes_to_use_direct_io = 1;
В этом случае используется O_DIRECT, а чтобы он нормально работал, используется io_submit, io_getevents...
Правда заказывается для чтения только один кусочек вперёд - не особо оптимально, и чтобы нормально работало, приходится ещё увеличивать размер буфера - max_read_buffer_size. -
Спасибо
-
Коллеги , правильно ли я понимаю, что при обращении к КХ по http. Используется http 1.1 и ответ отдается чанками и новые чанки перестанут посылается, когда выполнится запрос или превысится кол-во строк , которое можно отдать на клиента
-
Да - используется HTTP 1.1, если клиент поддерживает. Когда запрос выполнился или прекратил выполнение, поток чанков заканчивается (пустым чанком, как должен).
-
Спасибо , Алексей !
-
подскажите, можно как то посчитать что в колонке с числами нет пропусков?
-
может есть уже какая то готовая функция
-
Подскажите, плиз. Задача: есть типы и подтипы сущностей, в которых неравномерно распределены сущности. Надо выбрать некоторую часть от всех сущностей, чтобы выборка соответствовала распределению данных по типам и подтипам. Это через семплирование можно сделать? Если хеш от идентификатора сущности, как ключ семплирования делать - выборка по нему не покрывает все типы и подтипы сущностей.
-
Готовой функции нет, но можно просуммировать эти числа и "сверить с ответом".
-
max-min == count() спасибо, чет не подумал -_-
-
Если одновременно пропуски и повторы, то такой способ не очень.
-
ох, про повторы то я забыл :(
-
хотя погрупировать могу, не страшно.
-
повторы я уже умею трекать.
-
Или надо ключ сэмплирования делать по идентификатору сущности, а потом через union all перебрать выборки по 10% из типов подтипов?
-
подскажите, правильно ли я сетаплю массив RAID 10 3x4
mdadm --create --verbose /dev/md2 --level=1 --raid-devices=4 --layout=f2 --chunk=1M --bitmap=internal --bitmap-chunk=128M /dev/sd[a-d]1
mdadm --create --verbose /dev/md3 --level=1 --raid-devices=4 --layout=f2 --chunk=1M --bitmap=internal --bitmap-chunk=128M /dev/sd[e-h]1
mdadm --create --verbose /dev/md4 --level=1 --raid-devices=4 --layout=f2 --chunk=1M --bitmap=internal --bitmap-chunk=128M /dev/sd[i-l]1
mdadm --create /dev/md1 --level=0 --raid-devices=3 /dev/md2 /dev/md3 /dev/md4
нужно ли указывать в конце при создании raid 0 указывать far расположение и другие доп параметры? -
-
адский велосипед, чем вам --level=10 не нравится?
mdadm --create --verbose /dev/md0 --raid-devices=10 --level=10 --layout=f2 --chunk=1M --bitmap=internal --bitmap-chunk=128M /dev/sda2 /dev/sdb2 /dev/sdc2 /dev/sdd2 /dev/sde2 /dev/sdf2 /dev/sdg2 /dev/sdh2 /
dev/sdi2 /dev/sdj2 -
RAID10 по схеме 3 рейда по 4 диска не более безотказный вариант? хотим перестраховаться на всякий случай
-
нет конечно. Раид 10 это страйп из зеркал, фигней не страдайте, ничего надежнее чем --level=10 управляемый mdadm вы никогда не сделаете.
-
Не поправили?
-
-
Да - есть специальная настройка для этого - log_query_threads.
-
-
Нет, времени не было. При прогоне тестов ClickHouse баги в zetcd неплохо воспроизводятся, @alexanderzaitsev говорил что у них в Altinity есть те кто может Go, можно попробовать их попросить) А я пока останусь при своем мнении, что zetcd жуткий костыль
-
Я полностью уверен, что даже после допиливания zetcd до рабочего состояния, всё будет плохо.
-
-
Да, так и есть, просто будет ещё больше проблем
-
Спасибо!
Правильно ли я понимаю что для того чтобы оставить только query_log, нужно выставить:
<log_queries>1</log_queries>
<log_query_threads>0</log_query_threads>
? -
Да.
-
Это выглядит весьма тяжело для вычислений.
-
Да, это хорошее решение чтоб Кафка сама все умела, но у них других проблем нет и коммерческие решения неплохо обеспечивают разработку свободными и оплаченными руками
-
зависит от WHERE внутри. Если например выборка 1000 строк то работает вполне сносно
-
-
RIGHT JOIN, но таблицы поменять местами - чтобы большой словарь был слева, а маленькая выборка - справа.
-
-
-
Тогда неудобно.
-
-
-
У вас, вроде бы, были проблемы с ZK, вы их порешали?)
-
-
-
-
-
-
-
select arrayFilter((v, k) -> k = 'a', values, keys) from
(select ['a','a','b','a'] keys, [1,2,3,4] values) -
-
-
Я к тому что тупл не нужен вам
-
И это не нужно
-
-
-
Может вам Engine=Dictionary нужен?
-
-
-
Представьте задачу - есть словарь длиной 1000 миллионов записей; и вам надо в ответе подставлять из него значения типа как dictGetString()… можно конечно как @milovidov_an предложил делать JOIN но это сильно усложняет сам запрос. И кроме того если запрос создается code generation то это еще сложнее
-
Этот вариант кстати адски медленный. Такие подзапросы работают миллисекунду и на миллиарде это аукается. Но в общем то через словари такое сделать наверное можно. Это похоже на кешид словарь с кешем 1.
-
А remote таблица не подходит? Или медленно слишком?
-
таблица локальная. зачем remote?
-
ээээ. Тогда я чет совсем не в контексте видимо. Сори.
-
Joined.
-
Подскажите, как лучше поступить в такой ситуации. Есть таблица ReplicatedMergeTree: ClientId, AccountId, Date. Уникальных ClientId в разы больше чем уникальных AccountId. Когда-то давно я сделал ORDER BY (ClientId, Date), предполагалось что все запросы будут содержать ClientId, но тут понадобилось делать запросы просто по AccountId. Можно ли как-то поменять Primary Key на AccountId, ClientId, Date (этот вариант подойдет потому что все запросы теперь содержат AccountId)?
-
Можно. Создать новую таблицу и перелить данные.
-
Насколько больше в сравнении с чем?
-
по сравнению с LZ4
-
Ну, конечно, оверхед есть, но выигрыш больше. Вы же видели, наверное: https://www.altinity.com/blog/2019/7/new-encodings-to-improve-clickhouseNew Encodings to Improve ClickHouse Efficiency
July 10, 2019Modern analytical databases would not exist without efficient data compression. Storage gets cheaper and more performant, but data sizes typically grow even faster. Moore’s Law for big data outperforms its analogy in hardware. In our blog we already wrote about ClickHouse compression (https://altinity.com/blog/2017/11/21/compression-in-clickhouse) and Low Cardinality data type wrapper (https://altinity.com/blog/2019/3/27/low-cardinality). In this article we will describe and test the most advanced ClickHouse encodings, which especially shine for time series data. We are proud that some of those encodings have been contributed to ClickHouse by Altinity.This article presents an early preview of new encoding functionality for ClickHouse release 19.11. As of the time of writing, release 19.11 is not yet available. In order to test new encodings ClickHouse can be built from source, or a testing build can be installed. We expect that ClickHouse release 19.11 should be available in public releases in a…
-
-
-
-
А что за данные? counters или gouges?
-
А, так надо с LZ4, конечно
-
Он почти бесплатный
-
-
Для rand лучше всего T64
-
И он самый быстрый
-
-
ругается, что для Float64 не подходит
-
Да, он только для Int и Decimal до 64 бит
-
-
- 08 August 2019 (222 messages)
-
-
-
подозреваю, что лучше ALTER TABLE ... DROP PARTITION ... пока ещё ничего не придумали
-
Но это если партишны - по дате
-
-
Ещё бывают данные бьются кусками в СУБД
2019.08.03 10:37:18.092983 [ 11 ] {} <Error> void DB::BackgroundProcessingPool::threadFunction(): Code: 40, e.displayText() = DB::Exception: Checksum doesn't match: corrupted data. Reference: 5eceadab25511462d751523fa70b6e6f. Actual: 741491bad403aca83e46aeee803bc78e. Size of compressed block: 23893: (while reading column totalbytes): (while reading from part /database2/clickhouse/data/subdname/tabelname/20190401_20190415_4367_5075_5/ from mark 68 with max_rows_to_read = 8192): Cannot fetch required block. Stream MergeTreeSequentialBlockInputStream, part 0, e.what() = DB::Exception, Stack trace:
Почему такое происходит и можно ли их как-то восстановить? -
alter table delete where?
-
Это тяжелая операция будет
-
-
-
инсертить реже
-
-
-
-
Кто использует метабейз, работают ли вопросы на основе сохранённых вопросов? При создании нового доступны только таблицы из БД, даже если в сохранённых вопросах нет агрегации. В документации метабейза написано, что не поддерживаются сохранённые вопросы к друиду, гугл аналитике и монге, может кликхаусовый плагин тоже не поддерживается?
-
-
Правильно ли я понимаю, что можно брать названия настроек кофига из https://github.com/edenhill/librdkafka/blob/master/CONFIGURATION.md, заменить точки на нижнее подчеркивание и установить в конфиге в секции <kafka></kafka>?librdkafka/CONFIGURATION.md at master · edenhill/librdkafka
The Apache Kafka C/C++ library. Contribute to edenhill/librdkafka development by creating an account on GitHub.
-
верно
-
спасибо большое
-
-
team
-
-
-
-
в мастере вроде уже пофиксили (но это не точно), в релизе еще нет.
-
Joined.
-
Здравствуйте. У меня нубский вопрос по кликхаусу - как там атачить кучу партиций к таблице? Не по одной же их за запрос прикреплять.
-
есть какие то эстимации когда в релиз фиксы попадут?
-
-
-
А если задать юзеру дефолт какой-нибудь пароль?
-
Пробовал, но возникает вопрос как правильно его передеть. При урле http://user:password@localhost:8123 - он ругается также вне зависимости от того, какой юзер, при http://localhost:8123?user:user&password=password - ругается на пароль, даже если он верный, так как итоговый урл получится http://localhost:8123/?user=user&password=password/?query=SELECT%201%20FORMAT%20JSON
-
-
-
Joined.
-
У вас урл неправильный. Откуда там два /?
-
Первый ставлю я, чтобы логин с паролем передать, а второгй - сама графана подставляет
-
это вопрос не ко мне )
-
-
Нужно не в урле логин и пароль передавать, там есть Basic Auth - ткните в галку и вводите логин и пароль
-
Значит вы что-то неправильно настроили в графане, читайте доку по ней
-
-
при Browser он туда тоже не смотрит(
-
-
-
В логе она severity Error 2019.08.08 07:52:50.133744 [ 1 ] {} <Error> Application: DB::Exception: Cannot create table from metadata file /var/lib/clickhouse/metadata/ethereum//transfers_to_storage.sql, error: DB::Exception: Table contains parts with adaptive and non adaptive marks, but setting enable_mixed_granularity_parts is disabled, stack trace:
-
-
https://github.com/yandex/ClickHouse/blob/master/dbms/tests/integration/test_adaptive_granularity/test.py
вот тут есть что-то похожее на ваш кейс.
Попробуйте сделать полный бэкап сервера и потом прописать в метаданные таблицы что-то типа
CREATE TABLE table_with_mixed_granularity(date Date, id UInt32, dummy UInt32)
ENGINE = ReplicatedMergeTree('/clickhouse/tables/test/{g}/table_with_mixed_granularity', '1')
PARTITION BY toYYYYMM(date)
ORDER BY id
SETTINGS index_granularity_bytes = 10485760, enable_mixed_granularity_parts=1 < -
-
Насчет бэкапа это было предложение сохранить оригинальный файл с метаданными
-
Joined.
-
-
Выберите server
-
вот теперь борюсь с ошибкой undefined is not an object (evaluating 'result.data')
-
решилось прописыванием enable_mixed_granularity_parts в конфиге mege_tree
-
-
Разобрался. Есть баг, что при джоине таблицы, получаешь ошибку
Code: 10, e.displayText() = DB::Exception: Not found column $column_name$ in block. There are only columns: ...
Хотя колонка точно есть. В моем случае, баг в том, что отдаеться именно эта ошибка, хотя по факту должна быть:
DB::Exception: Column $column_name$ is not under aggregate function and not in GROUP BY -
Привет всем,
подскажите, а как сказать КХ что реплика убита и нужно о ней забыть? -
Могу предположить, что нужно вычистить из зукипера название данной реплики из всех таблицу которые на ней были.
-
может есть какой то гайд как это сделать?
-
-
неправильно настроен logrotate в системе? Возможно просто период ротации логов ошибок долше?
-
-
у вас эррорлог вырастает за гигабайт и не ротируется?
-
-
-
Доброго времени суток.
Что-то не хочет грузить словари. Может, кто подскажет, что делаю не так.
файл конфига КХ. конфига словаря, вывод select * from system.dictionaries и содержимое /var/log/clickhouse-server/clickhouse-server.log при system reload dictionaries прилагаю -
-
-
-
-
-
system reload dictionary dev_advertisers ?
-
помогло.
-
-
-
-
-
-
-
-
Подскажите . Выдержит ли КХ десятки реплицируемых таблиц ?
-
А сотни выдержит ? Где предел.как понять ?
-
100ни выдержит. Наверное сейчас предел 10ок тысяч.
-
-
Спасибо. А во что упрекатся? Правильно ли понимаю, что для зоокипера это небольшая нагрузка
-
подскажите плз, вот у меня есть ReplicatedMergeTree, в ней есть первичный ключ ORDER BY (_timestamp,_partition,_offset,_idx)
Я хочу посмотреть как много у меня дублей примерно вот таким запросом:
select count()
from (
select concat(toString(_timestamp), toString(_partition), toString(_offset), toString(_idx)) as deduper, count() c
from log_table
group by deduper
)
where c > 1
;
Вижу цифру отличную от 0, запускаю
optimize table log_table final;
Повторяю запрос чекер и результат тот же. Я чтото не так делаю? -
вроде база не обещает что все помержит)
-
так FINAL жи
-
я думал оно с final прям всё помержит Т_Т
-
А optimize инициировал мержи?
set optimize_throw_if_noop = 1
optimize ... final;
Дубли должны быть в одной партиции.
Размеры партов должны быть меньше максимального.
Null-ы в вашем запросе превращаются в пустые строки. -
А кто знает сколько в Яндексе реплицируемых таблиц ? Ну примерно хотя бы )
-
Боюсь, что никто не знает
-
десятки тысяч полагаю. правильнее вопрос конечно ставить про кол-во кластеров наверное.
-
Ага. Интересует именно внутри одного кластера.
-
А ну тут кому как нравится обмазываться
-
-
Подскажите пожалуйста, почему clickhouse-client не может расспарсить? (что-то с кодированием, есть какая-нибудь опция? )
cat rr.csv | clickhouse-client --port=9001 --database=mx_master --date_time_input_format=best_effort --query="INSERT INTO tablo_rr FORMAT TabSeparatedWithNames"
Code: 27. DB::Exception: Cannot parse input: expected \t before: \01\0.\04\06\05\0\t\0n\0e\0w\0\t\0E\0X\0P\0I\0R\0E\0D\0\t\03\00\0/\00\03\0/\02\00\01\07\0 \01\01\0:\00\05\0:\00\09\0\t\06\06\00\0\t\0P\0D\0L\0\t\01\05\00\0\t\01\0\t\02\01\09\0.\07\05\0\t\0\r\0\n\0H\0a\0l\0f\0 \02\0\t\01\0.\04\06\05\0\t\0n\0e\0w\0\t\0E\0X: (at row 1)
Row 1:
Column 0, name: monthHalf, type: String, parsed text: "<ASCII NUL>H<ASCII NUL>a<ASCII NUL>l<ASCII NUL>f<ASCII NUL> <ASCII NUL>2<ASCII NUL>"
Column 1, name: rr, type: Float64, ERROR: text "<ASCII NUL>1<ASCII NUL>.<ASCII NUL>4<ASCII NUL>6<ASCII NUL>5" is not like Float64 -
у вас нулевые байты в CSV
-
как это можно решить, не подскажите?
-
это я не знаю, вы должны сгенерировать правильный файл перед тем как его пихать в КХ.
-
Удалить их не сложно - cat file.csv | tr -d '\000' > file2.csv
но не факт что это поможет если файл кривой -
спасибо, буду пробовать)
-
Подозреваю, что там кодировка не utf-8, а что-то двухбайтовое
-
Кликхаус увидит данные если я просто свалю папки в data и перезапущу сервер или их нужно в обязательном порядке атачить?
-
а откуда папки? если они с разных шардов и там пересекаются номера партов то все сломается
если таблица replicated то тоже все будет плохо -
Нет. Там довольно маленькая бд, которая сейчас крутится на 1 сервере без репликации. Интересен результат - если я просто скопирую данные из не репликейтед таблицы без детача на другой сервер в аналогичную таблицу (другое название бд и таблицы, структура и название полей те же) - оно подхватится автоматически при запуске или нужно в обязательном порядке это дело валить в детач и атачить через запросы.
-
Через фриз-копию-атач все вроде бы работает. Теперь вот потянуло на извращения
-
я когда настраивала бэкапы - решила проверить подобную схему)) в песочнице все завелось.
-
да, так заработает ( есть шанс что вы скопируете недописанный файл живого сервера на горячую, он наверное в broken переместится)
-
Кстати на эту тему документация скромно молчит - а при копировании файла из shadow после freeze - такая ситуация может произойти?
-
нет, не может, КХ никогда не меняет файлы (только создает новые), freeze создает хардлинки для файлов активных - актуальных партов.
-
а хотя, ведь недописанные парты называются типа _tmp и потом каталог переименовывается, т.е. скорее всего у вас проблемы не будет
-
Это меня очень радует. Еще бы из писателей доков в яндексе кто-нибудь сподобился написать что мол "копия в шедоу после фриз гарантировано консистентна и не подвергается изменениям во время операций с таблицей после создания" или хотя бы "для бэкапов сойдет, все восстановится норм, зуб даем", там написано конечно что-то типа этого но несколько расплывчато.
-
Господа, подскажите пожалуйста, в 18й версии клика через ODBC отлично подтягивались словари из Hive'а, но после обновления до версии 19.11.4.24 с теми же параметрами словарь не хочет подтягиваться с ошибкой:
Code: 86, e.displayText() = DB::Exception: Received error from remote server /identifier_quote?connection_string=DSN%3DHWX_SSL. HTTP status code: 500 Internal Server Error, body: Error getting identifier quote style from ODBC 'Poco::Exception. Code: 1000, e.code() = 0, e.displayText() = Connection attempt failed: Connection:Not applicable
Server:HWX_SSL
===========================
ODBC Diagnostic record #1:
===========================
SQLSTATE = HY000
Native Error Code = 11560
[Cloudera][ODBC] (11560) Unable to locate SQLGetPrivateProfileString function.
(version 19.11.4.24 (official build))'
(version 19.11.4.24 (official build)) -
Ну это кто-то из нас может написать, например я, надо просто себя заставить.
в каком-то видео Алексей рассказывал что у комманды КХ есть бюджет, и когда стоит вопрос нанять программиста или маркетолога/qa/тех-писателя, он нанимает программиста, потому что на данном этапе это самое больное место. -
да там добавился вызов odbc чтобы узнать какими кавычками окавычивать литералы " или ` если драйвер Hive такую функцию не реализовал, то все. Либо ищите другой odbc драйвер Hive либо надо feature request в КХ чтобы обработать такой случай и сделать фолбек на какой-то дефаулт.
-
По какой причине CH внутри докера может закрыть коннект в ответ на мой TCP Keep Alive?
-
а в логе КХ что? В log level trace КХ много пишет
-
grep моего ipшника по всем логам КХ ничего не показал криминального, но КХ запущен с настройками из докер-коробки
-
Joined.
-
Кажется, в логах вот такое:
2019.08.07 17:27:58.297579 [ 44 ] {4213a96b-1b2d-4237-95aa-f717b7253a03} <Trace> TCPHandler: Closing idle connection
Эта настройка конфигурируема в КХ? -
--idle_connection_timeout arg "Close idle TCP connections after specified number of seconds."
SELECT *
FROM system.settings
WHERE name = 'idle_connection_timeout'
┌─name────────────────────┬─value─┬─changed─┬─description─────────────────────────────────────────────────────┐
│ idle_connection_timeout │ 3600 │ 0 │ "Close idle TCP connections after specified number of seconds." │
└─────────────────────────┴───────┴─────────┴─────────────────────────────────────────────────────────────────┘ -
-
Благодарю👌
-
все эти 4 вещи возможно никак не связаны.
Партиция не может быть в двух таблицах, это файлы в одном каталоге таблицы.
Сегфолт может быть вызван чем-то другим, что просто запороло память селекта в этот момент.
Сегфолт воспроизводится? Версия КХ? Что было в сегфолте? -
-
90% сегфолтов такие, либо тикет сделайте с полным текстом сегфолта и полным логом сессии [...] которая навернулась, либо выложите это куда-нибудь в gist
-
даже полный сегфолт обычно не очень полезен. если воспроизводится, то лучше взять этот же релиз, но собранный с ASAN и создать тикет с его выводом (он пишет в stdout)
-
ну и вообще рекомендуют 19.11 т.к. 19.10 баганый местами
-
Всем привет, столкнулись с проблемой после обновления.
На 18.14.15 работал join вида
ANY LEFT JOIN microsegments m ON toUInt32(m.id) = microsegmentId
(microsegments - view, join к Distributed таблице, которая в свою очередь над ReplicatedMergeTree)
в 19.7.3.9 это перестало работать, выдает ошибку Unknown identifier: id, джойн работает теперь только так
ANY LEFT JOIN (SELECT *, toUInt32(id) AS microsegmentId FROM microsegments) USING microsegmentId
кто-нибудь сталкивался с подобным? исправлена ли эта проблема в более новых версиях? -
Может кто знает, в changlog есть такая строка https://github.com/yandex/ClickHouse/blob/master/CHANGELOG.md#improvements-1
"Support asterisks and qualified asterisks for multiple joins without subqueries"
Но при использовании multiple join с * - падает:
Code: 48, e.displayText() = DB::Exception: Multiple JOIN do not support asterisks for complex queries yet (version 19.13.1.11 (official build))ClickHouse/ClickHouseClickHouse® is a free analytics DBMS for big data. Contribute to ClickHouse/ClickHouse development by creating an account on GitHub.
-
id еще где-то использовался в запросе? или только в toUInt32(m.id) =
Да, джойны сильно поменялись, возможно вам поможет
allow_experimental_multiple_joins_emulation = 0
allow_experimental_cross_to_join_conversion = 0
Я сомневаюсь что это починено в более свежих версиях, и не факт что будет починено (воспроизводите на тестовых табличках и создавайте тикет в гитхабе). -
id использовался только там, попробовать добавить в запрос? расстраивает конечно, что в более ранней версии запрос работал
-
да, изменений много в джойнах, меняется результат, кол-во полей, названия полей, и т.д.
проблема в том что джойны всегда работали не совсем согласно стандартам sql.
и что делать? оставить как есть и навсегда согласится что тулы типа табло не будут работать? -
покажите запрос. "multiple joins without subqueries" - важно каждое слово
-
была проблема, когда на distributed улетала колонка без префикса таблицы. Если без приведения к toUInt32 тоже не работает, то скорее всего исправлено недавно. Если проблема в приведени - то скорее всего нет - тогда issue
-
Похоже нашел. В запросе написано INNER JOIN (SELECT * ...) - это и етсь without subqueries?
-
-
Спасибо, буду колоться дальше
-
-
-
Не совсем понял. Без приведения выдает Type mismatch of columns to JOIN by: microsegmentId UInt32 at left, id UInt64 at right, с ним - Unknown identifier: id
Какая у нас ситуация? Которая недавно исправлена или нет? -
Подскажите, можно ли переписать вот этот запрос следующим образом:
SELECT
metric,
ts,
avg(value) AS value
FROM
(
SELECT
metric,
ts,
argMax(value, updated) AS value
FROM data
WHERE (metric IN 'servers') AND (ts >= 1563914700) AND (ts < 1564001100) AND (date >= toDate(1563914700)) AND (date <= toDate(1564001100))
GROUP BY
metric,
timestamp AS ts
)
GROUP BY
metric,
intDiv(toUInt32(ts), 60) * 60 AS ts
ORDER BY
metric ASC,
ts ASC
1. желательно избавиться от подзапроса или возвращать из него metric, groupArray(ts), groupArray(value)
2. Сохранить логику, что возвращается только value для максимального updated
3. всё также иметь возможность произвести округление до точек aka intDiv(toUInt32(ts), 60) * 60 AS ts -
Я про случай, когда колонка не требует приведения, встречается только в ON секции и обнаруживается проблема с именем этой колонки, т.к. на удаленный сервер имя улетает обрезанным с m.id до id
-
-
ну кстати когда колонка не требует приведения - работает
ANY LEFT JOIN (SELECT *, toUInt32(id) AS microsegmentId FROM microsegments) m ON m.microsegmentId = microsegmentId
значит это другая проблема? не та, что была у вас? -
да, тогда issue. можно слинковать вот с этим https://github.com/yandex/ClickHouse/issues/4219RIGHT or FULL JOIN with complex ON section is not working · Issue #4219 · yandex/ClickHouse
Last part of story #4108 If there're duplicates in tables & JOIN ON has expression on column it leads to error. select X.*, Y.* from X full join Y on (X.id + 1) = (Y.id + 1) order b...
-
а что если сделать на шардах view с agrmax, возможно предикаты протолкнутся в него и получится вторую агрегацию сделать на шардах?
-
в один запрос конечно переписать это нельзя, разный group by
-
а если id = toUInt64(microsegmentId)
-
materialized? Как это примерно должно выглядеть?
-
не не обычная.
я вижу проблему в том что data это distributed и она внутри () -
так вот я предалагю сделать на шардах
-
-
create view xxxx as select argmax from data_shard ....
и накрыть это вью distributed -
тут вопрос правда нужна-ли доагрегация argmax
-
Missing columns: 'microsegmentId' while processing query: 'toUInt64(microsegmentId)'
-
-
-
ну наверное это не исправлено, воспроизводите и в тикет
что кстати с allow_experimental_multiple_joins_emulation = 0
allow_experimental_cross_to_join_conversion = 0 -
-
-
господа, подскажите плиз
развернул для себя для посмотреть кликхаус
одна шарда две реплики - работает
создал тестовую таблицу и загнал туда данные
хочу создать вторую таблицу вижу ошибку
Existing table metadata in ZooKeeper differs in sample expression. Stored in ZooKeeper: intHash32(UserID), local: intHash32(PlayerID) (version 19.11.3.11 (official build)) -
бан
-
таблиц с таким названием точно не создавал
-
нет не сработает. Надо делать MV на всех нодах (и хотябы на всех где идет вставка в таблицу). И само MV вы тоже видимо хотите сделать Replicated
-
-
Replicated.
(на самом деле можно и Distributed, но тут надо понимать зачем вы это делаете, а т.к. вы задаете этот вопрос значит вам нужна Replicated) -
имя таблицы не имеет значения, важен только zk_путь в описании таблицы
-
тьфу, спасибо
-
невнимательность
-
-
а баг, когда where не передавался в запрос VIEW уже поправлен? кажется, что да
-
а это не баг 🙂 , и это не про вью, в select * from (select x ) where x=1 тоже не просовывалось, enable_optimize_predicate_expression давно включено по умолчанию
-
так, теперь у меня есть
CREATE VIEW graphite.data_view (`metric` String, `value` Float64, `timestamp` UInt32, `date` Date) AS SELECT metric, timestamp, argMax(value, updated) AS value, date FROM graphite.data_lr GROUP BY metric, timestamp, date
И если я попробую повесить Distributed поверх и не использовать GROUP BY внутри, то может сработать фокус по аггрегации "надзапроса" на шардах? -
должен
-
Т.е делать обычные матвьюхи на каждом сервере, верно?
-
да, с движком replicated которые смотрят (from ) replicated
-
Т.е. возможны 4 варианта
1. from Replicated to Replicated
2. from Distributed to Replicated
3. from Distributed to Distributed
4. from Replicated to Distributed
самый используемый 1. -
Спасибо, кажется, фокус удался
-
тут только возможна засада, у вас argMax раньше схлопывал дубликаты с разных серверов / шардов
-
При ключе шардирования по имени метрики всё в порядке
-
а ну так вам тогда можно еще и суперускоритель включить distributed_group_by_no_merge=1
-
-
в конце запроса settings distributed_group_by_no_merge=1
-
а для запросов из MV делать Distributed? (поверх MV)
-
да , конечно
-
Добрый вечер, коллеги, пытаюсь запустить запрос через jdbc-bridge
https://clickhouse.yandex/docs/ru/query_language/table_functions/jdbc/
SELECT *
FROM jdbc('jdbc:postgresql://localhost:5432?user=login&password=password', 'schema', 'table')
Received exception from server (version 19.11.4):
Code: 410. DB::Exception: Received from localhost:9000. DB::Exception: jdbc-bridge is not running. Please, start it manually.
0 rows in set. Elapsed: 0.001 sec.
Бридж запущен на его дефолтном порте 9019, но получаю ошибку, которая написана выше. Подскажите пожалуйста, где указать CH смотреть на бридж?
Спасибо -
SELECT *
FROM url(`http://localhost:9019`, 'CSV', 'id Int32') -
Что такой запрос даёт?
-
@Krashuevina id, name - колонки из постгресовой таблички
-
Joined.
-
-
-
что значит убрали?
-
-
Их там никогда не было. Так задумано
-
потому что типичные кейсы использования не подразумевают надобности построчного обновления и удаления
-
ну вот хочу понять, почему так было задумано )
-
гуглить OLAP и OLTP, пытаться понять почему же
-
в других колоночных вроде есть или я ошибасюь
-
может лучше с реляционных таблиц начать гуглить ?
-
уж точно не человек с доктриной на аватарке будет учить меня реляционным базам.
Вы борец за расовую чистоту SQL? -
-
Давайте ещё раз.
Кликхаус разрабатывался яндексом для себя, а не для SQL-критиков.
Кликхаус разрабатывался под потребности и кейсы яндекса.
У них не было нужды в реализации данных операций.
Что вам тут не понятно? -
причем тут критика ??? Я делаю ресерч и нужно понять, почему вырезали и все!
-
Ладно, вырезали так вырезали. Умываю руки
¯\_(ツ)_/¯ -
В КХ никогда не было update/delete. На самом деле их очень тяжело реализовать и по сути их нету до сих пор.
В других OLAP есть конечно update/delete, но оно такое, якобы есть ( я однажды запустил в вертике update одного миллиарда в широкой таблице, спустя 4 часа плюнул и отменил).
В КХ есть административные мутации которые позволяют админу пофиксить данные
The syntax for updates and deletes is non-standard SQL. ClickHouse team wanted to express the difference from traditional SQL: new updates and deletes are batch operations, performed asynchronously. It is even called 'mutations'. Custom syntax highlights the difference. -
а как же ALTER UPDATE и DELETE
-
на бис: В КХ есть административные мутации которые позволяют админу пофиксить данные
The syntax for updates and deletes is non-standard SQL. ClickHouse team wanted to express the difference from traditional SQL: new updates and deletes are batch operations, performed asynchronously. It is even called 'mutations'. Custom syntax highlights the difference. -
-
а какая версия кликхауса? в последних версиях интеграция с кафкой была поломана и mv иногда переставала получать данные
-
19.13.1.11
-
вроде бы PR с фиксом туда не попал https://github.com/yandex/ClickHouse/pull/6354
-
-
в каком смылсе отказывается? Пусто? Так это дедупликация.
-
как дедупликация может помешать вставке? все консьюмеры читают из одного топика под одной группой, записи уникальны. Пусто во всех таблицах.
-
ну разница между обычной и реплицируемой таблицей только в дедупликации и транзакциях в зукипере.
в логе КХ будут ошибки о транзакциях или сообщения о наличии такого блока и его пропуске. -
-
Joined.
-
- 09 August 2019 (138 messages)
-
-
Joined.
-
-
-
Joined.
-
-
-
Сделаете issue? Там хорошо бы написать структуру таблицы и показать все файлы в этой папке с их размерами.
-
-
DateTime
Дата-с-временем. Хранится в 4 байтах, в виде (беззнакового) unix timestamp. Позволяет хранить значения в том же интервале, что и для типа Date. Минимальное значение выводится как 0000-00-00 00:00:00. Время хранится с точностью до одной секунды (без учёта секунд координации). -
Тогда врядли получится вам помочь.
-
добрый день, товариищи! есть вопрос. может не прямо про тему, заранее извиняюсь. ктото юзал кх в роли бд для источника данных отчетов power bi? есть ли там дайрек кьюри режим?
-
Добрый день, подскажите пожалуйста... Есть таблица вида
| timestamp | ip | error | bytes |
Надо сгрупировать по timestamp и получить для каждого момнта времени количество ip (для которых были ошибки) и просто суммарное количество ошибок в этот момент времени и сумму байт... Как это лучше сделать? -
а момент времени у тебя сколько?
-
всегд строк с пол ярда, а группируются раз в 30 секунд
-
так тебе для момента времени или для диапазона времени?
-
т.е. таймштампы "округлены" до 30 секунд.
-
для диапозона
-
график построить
-
количество ошибок + кол-во уникальных IP c ошибками
-
а в чем именно проблема? просто сгруппировать и посчитать не подходит?
-
Немного не так вопрос написал. Забыл указать что в таблице есть еще поля их надо суммировать не зависимо от того были ошибки или нет.
-
countIf() и uniqIf() вам в помощь
-
спасибо!
-
-
Привет всем!
подскажите как полет v19.13.1.11 в проде? кто уже перешел?
особенно косаемо проблемы с кафкой в предыдущих релизах -
У тебя скорее всего старые рпм не от Я а от Альтинити
-
кафка ещё в процессе фикса
-
есть какие то примерные эстимации?
-
так и есть. удалять старое ?
-
Пул смержен, пока тестируется
-
cпасибо!
-
угу
-
-
@JGooLaaR пробовали, не получилось подключиться по odbc. Правда, не напрямую к pbi, а сначала к analysis services tabular
-
Обязан. Форматы несовместимы
-
-
-
Привет.
Есть таблица на порядка 100к записей, есть запрос вида SELECT * FROM table LIMIT N. Запрос выполняется с параметрами max_execution_time=5&max_execution_speed=100000.
1) При N=10 имеем ошибку Estimated query execution time (58.9676544 seconds) is too long. Maximum: 5. Estimated rows to process: 147456.
2) При N=100 имеем ошибку Estimated query execution time (5.896765439999999 seconds) is too long. Maximum: 5. Estimated rows to process: 147456
3) При больших N ошибка почти никогда не возникает (очень редко).
Случай 1) и 2) на самом деле выполняются за несколько ms, даже us.
Если выкинуть настройку max_execution_speed, то 1) и 2) никогда не возникают.
ВОПРОС - что я не делаю не так, или почему КХ странно оценивает время выполнения? -
При N=1 можно получить даже вот такое Estimated query execution time (589.676544 seconds) is too long. Maximum: 60. Estimated rows to process: 147456
-
Выполняется за ms/us потому что скорее всего лежит в кеше, а CH это не учитывает при расчетах.
-
А в кликхаусе нет этой мускульной фишки про "звездочку" (которая отключает использование всяких индексов и прочих оптимизаций)?
-
А если явно указать набор полей так же будет?
-
Там явно указан набор полей, я для примера его выкинул. Все поля таблицы перечислены, запрос чуть сложнее, но смысл того, что при изменении N на порядок влево-вправо estimeted time также меняется на порядок в обратную сторону.
-
Возможно проблема в гранулярности индекса (index_granularity) у таблице? в доке написано что КХ не очень хорошо работает с запросами где результирующая выборка небольшая.
-
я думаю баг. Какая версия. КХ ? ЕМНИП max_execution_speed недавно правили
-
19.13.1.11 with revision 54425
-
А на таком простом тесте воспроизводится?
create table ES(A Int64, B String) Engine=MergeTree order by A;
insert into ES select number x, toString(x) from numbers(100000);
insert into ES select number x, toString(x) from numbers(100000);
set max_execution_time=1, max_execution_speed=100000
SELECT * FROM ES LIMIT 5 format Null;
5 rows in set. Elapsed: 0.001 sec.
SELECT * FROM ES LIMIT 500000 format Null;
Received exception from server (version 19.13.1):
Code: 159. DB::Exception: Received from localhost:9000. DB::Exception: Timeout exceeded: elapsed 1.003987463 seconds, maximum: 1.
19.13.1.1010 -
Проверю и сразу отпишусь
-
да похоже исправили, 9 дней назад https://github.com/yandex/ClickHouse/pull/6232
в 19.9.5.36 например еще был
LIMIT 5
DB::Exception: Estimated query execution time (170.35100160000002 seconds) is too long.
LIMIT 500
500 rows in set. Elapsed: 0.005 sec. -
В таблие есть нексколько полей, они или Null или 1, как можно посчитать кол-во строк?
-
При группировке GROUP BY расчет по пустым полям не идет
-
count() должен считать
-
select count(), a from (select Null as x, Null as a) group by a
┌─count()─┬─a────┐
│ 1 │ ᴺᵁᴸᴸ │
└─────────┴──────┘ -
Да я тоже проверил, странно тогда
-
если нужно посчитать количество единиц, то sum(), если всего строк, то count()
-
???????????
-
Буду разбираться с таблицей тогда дальше
-
У меня образ уже с этой правкой, там другое было (я заводил этот issue).
Попробую на игрушечной таблице воспроизвести. -
Joined.
-
ну в смысле если нужно посчитать только количество полей, в которых была единица, то сум по полю с 1
-
SELECT uniqExact(test)
FROM (
SELECT null as test
UNION ALL
SELECT 1 as test
UNION ALL
SELECT 0 as test)
F Какой аналог фции uniqExact которое учитывает и null поля? -
ну можно null заменить на значение которого нет count(ifNull(-1))
uniqExact делает все правильно, например pg
select count(test) from (SELECT null as test UNION ALL SELECT 1 as test UNION ALL SELECT 0 as test) as X;
count
-------
2 -
@den_crane
131cf9a99e77 :) select A, B from ES limit 5000 format Null;
SELECT
A,
B
FROM ES
LIMIT 5000
FORMAT Null
5000 rows in set. Elapsed: 0.007 sec. Processed 5.00 thousand rows, 102.78 KB (727.64 thousand rows/s., 14.96 MB/s.)
131cf9a99e77 :) select A, B from ES limit 5000 format Null;
SELECT
A,
B
FROM ES
LIMIT 5000
FORMAT Null
5000 rows in set. Elapsed: 0.053 sec. Processed 5.00 thousand rows, 102.78 KB (93.50 thousand rows/s., 1.92 MB/s.)
131cf9a99e77 :) select A, B from ES limit 5 format Null;
SELECT
A,
B
FROM ES
LIMIT 5
FORMAT Null
↑ Progress: 0.00 rows, 0.00 B (0.00 rows/s., 0.00 B/s.) Received exception from server (version 19.13.1):
Code: 160. DB::Exception: Received from 172.25.0.100:9000. DB::Exception: Estimated query execution time (163.84 seconds) is too long. Maximum: 1. Estimated rows to process: 204800. -
странно что в 19.13.1.1010 работает.
-
А вы пробовали раз 10 пощелкать, да?
У меня тоже не с первого раза вылезло -
раз 100 попробовал, возможно это сервер такой удачно незагруженный, попробую сделать более широкую таблицу
-
я тестил на докере на ноуте с 16Г ненагруженном вообще
-
с 3го раза вылезло
-
воспроизвелось с
create table ES(A Int64, B String, S String, D Float64, X Date) Engine=MergeTree order by A;
insert into ES select number x, toString(x), toString(x%103), x/1232, today()+x%1000 from numbers(1000000)
SET max_execution_time = 1, max_execution_speed = 100000
SELECT * FROM ES LIMIT 5 format Null;
DB::Exception: Estimated query execution time (1611.7825536 seconds) is too long.
LIMIT 50
50 rows in set. Elapsed: 0.003 sec.
LIMIT 1
DB::Exception: Estimated query execution time (8058.912768 seconds) is too long -
ишью заведете?
-
да заведу через пару часов, я еще помучаю чтобы 100% воспроизводилось, пока флапает
-
-
-
Коллеги, добрый вечер!
Хотим хранить в кликхаусе данные с переменным набором полей на каждую запись. Если делать на каждое поле свой столбец, их получится миллион, из которых будет заполнен 1%. Неэффективно.
Вместо этого рассматриваем вариант хранения словарей в столбцах (говорят, так можно?). Но со словарями возникает проблема множественного дублирования заголовков. Т.е. тоже не суперэффективно получается.
Другой вариант - хранить массивы без заголовков, а в отдельной таблице держать наименования столбцов. Но даже от типа события поля могут варьироваться.
В общем, мы в раздумьях. Подскажите, пожалуйста, какой вариант для хранения таких данных вы бы посоветовали? Может, вообще какой-то другой? -
Словари, а Заголовки хранить enumом?
-
-
-
Да. Но тут важно просто понимать как оно работает под капотом. У нас например есть несколько мелких view которые заботают примерно для такого сценария и норм.
-
Enum это вроде как словарь. Смотря про какой Вы вариант говорите.
Если про хранение в отдельной таблице, то не вижу там смысла хранить Enum - просто массив. -
Или я не понимаю, как хранить заголовки enum-ом
-
ну это относительное понятие. Т.е. конечно в кх можно сделать index_granularity = 1 max_threads=1 и будет доступ по ключу за микросекунды, другое дело что в mysql будет за доли микросекунд.
https://www.altinity.com/blog/clickhouse-in-the-storm-part-1
https://www.altinity.com/blog/clickhouse-in-the-storm-part-2 -
max_block_size еще можно уменьшать например до 1024, max_read ..., чтобы не обрабатывать мегабайты
-
А насколько популярное тогда решение, как вынос таких представлений в обычные бд?
Или как обычно решают подобную задачу?
(Предоставление агрегированных данных пользователям) -
я бы начал задаватся этим вопросом после 10000 веб. серверов и 10 млн. пользователей в час.
-
Мг, понял, спасибо
-
речь про nested ? про массивы? Что в массивах (keys Array(String) , values Array(String)) повторяются keys ? LowCardinality решает эту проблему. (keys Array(LowCardinality(String)) , values Array(String))
и понятно что хранить key числом эффективнее и расшифровывать через external dictionary. enam не очень удобен, когда надо его расширять постоянно из-за появления новых key. -
нет
-
можно view сделать в отдельной базе как workaround
-
Вот вопрос, как лучше хранить. Nested, наверное, нам не подойдет, так как для каждого типа события события свой набор полей.
В массивах строки. Для прояснения, мы будем хранить логи.
Вот про LowCardinality я не знаю, можете пояснить в двух словах? -
Про LowCardinality: https://www.altinity.com/blog/2019/3/27/low-cardinality
И про хранение в массивах: https://www.altinity.com/blog/2019/5/23/handling-variable-time-series-efficiently-in-clickhouse раздел про key value optimizationsA Magical Mystery Tour of the LowCardinality Data TypeMar 27, 2019Many ClickHouse features like LowCardinality data type seem mysterious to new users. ClickHouse often deviates from standard SQL and many data types and operations do not even exist in other data warehouses. The key to understanding is that the ClickHouse engineering team values speed more than almost any other property. Mysterious SQL expressions often turn out to be 'secret weapons' to achieve unmatched speed.In fact, the LowCardinality data type is an example of just such a feature. It has been available since Q4 2018 and was marked as production ready in Feb 2019, but still is not documented, magically appearing in some documentation examples. In this article we will fill the gap by explaining how LowCardinality works, and when it should be used.
-
Спасибо!
-
Nested вам подойдёт. Будет структура из массива ключей и значений. У каждого типа события набор ключей будет свой
-
ясно, видимо я вообще неправильно все понял.
Я хотел сказать что можно хранить в массивах
create table X (id UIint64, ........, key Array, Value Array) -
О, круто! Не знала, что так можно делать в Clickhouse
-
Мы используем гибридный вариант, всё храним в массивах, для частых отчётов создаём материализованные столбцы, куда пишем конкретные значения из массива. По моей второй ссылке вроде бы это тоже описывается
-
так вот повторяющиеся key можно сделать типом Array(LowCardinality(String))
лучше конечно закодировать color = 1, brand =2 , тогда столбик будет меньше, но все зависит от ваших объемов, я бы сделал тупо Array(LowCardinality(String)), я в общем так и делаю до 100млрд. -
Интересно, спасибо, я читаю!
Насчет nested я не до конца поняла все-таки. Например, у меня есть события id = 1 и id = 2. У id = 1 поля srcIP и dstIP, у id = 2 поля username и hostname. Как тогда мне формировать Nested? Все четыре поля туда писать? Это эффективно? -
Спасибо, пока читаю по LowCardinality. Буду разбираться!
-
Нестед - это грубо говоря альас для двух массивов с одинаковой длиной
-
невозможно ответить про эффективность. Если полей будет меньше 1000, возможно эффективнее хранить в отдельных полях, зависит от объемов и запросов. Т.е. например у id3 может быть 6 username сразу ?
-
Ключи внутри одного id не повторяются
-
почему id1 и id2 лежат в одной таблице а не в двух разных?
-
Мы хотим делать одну таблицу на один источник логов. В рамках одного источника есть набор разных типов событий. У каждого свой набор полей. Ключи пересекаются между разными типами событий, но не повторяются в рамках одного события
-
Интересное решение.
-
Мы городили подобный огород, вышло ооооочень медленно в итоге. Лучше грейлог поставить для этого дела с визуализацией в графане
-
Только у нас была одна таблица и туда разные эвенты сыпались, фильтровали в основном по колонкам, но нужные данные драли из nested колонки. Вот селекты этих нестедов были крайне медленные
-
-
Здравствуйте. Подскажите, пожалуйста, а как clickhouse выполняет сжатие? Он сжимает каждый отдельный вставленный блок или всю партицию?
-
То есть при вставке данных он пережимает всю партицию с учётом новых данных или нет?
-
Понятно, что при использовании zstandard можно словарь формировать, а что ch делает в случае lz4?
-
вставка данных создает новый кусок, который сжимается. в неопределенный момент времени кликхаус мержит куски внутри партиции, создавая более большой кусок
-
-
-
Да, это логично. Спасибо)
-
А как в cliickhouse работает гранулирование индекса? Предположим, что у меня index по 3 колонкам, он гранулирует каждую из 3х колонок или только tuple из 3х значений?
-
Поясню, у меня одна из колонок индекса (последняя) имеет только уникальные значения. Имеет ли это какие либо последствия для performance?
-
А зачем тогда она в индексе? Это инт?
-
Да, это int. В основном по этой колонке и выполняются запросы
-
А как выглядят запросы?
-
-
Это колонка просто время в микросекундах.
-
А что ты с ними делаешь? Фильтруешь по ним?
-
да
-
-
-
Ну, то есть получается, что ничего криминального в этом нет?
-
Небольшой оверхед по чтению и только.
-
Понял. Спасибо)
-
Спасибо, что поделились! Учту ваш опыт
-
там есть одна засада, не нужно использовать arrayEnumerate
медленно
select arrayMap(i -> values[i], arrayFilter( i -> keys[i] = 'a', arrayEnumerate(keys))) from
(select ['a','a','b','a'] keys, [1,2,3,4] values)
быстро
select arrayFilter((v, k) -> k = 'a', values, keys) from
(select ['a','a','b','a'] keys, [1,2,3,4] values) -
min_compress_block_size max_compress_block_size
одинаково для любой компрессии жмемся блок 64 кб - 1 МБ. Сам КХ ничего не знает про устройство внутри компрессора ( про словари ZSTD)
словари на уровне блока КХ делает супер-тип LowCardinality, и сверху опять же жмется LZ4/ZSTD. -
А существует у Кликхауса очное обучение?
-
Пока курс будет идти https://clickhouse.yandex/docs/en/changelog/ обгонит?
-
даже заочного-то нет
-
Альтинити и я видел курс в udemy
-
Спасибо, коллеги
-
Altinity делает и очные и удалённые тренинги
- 10 August 2019 (24 messages)
-
Если выгрузить данные вида
any(field), -1*any(field) group by ... format native
И залить их обратно - данные бьются, даже если указывать имена полей в правильном порядке при загрузке.
В формате tsv такого не происходит.
Баг/фича? Ставить тикет?
Бьются as if in: пропадают, обнуляются, превращаются в мусор -
-
как вариант симлинками
-
а ок спасибо!
-
Есть PR https://github.com/yandex/ClickHouse/pull/4918. Планируем его мержить.Feature multiple disks by ObjatieGroba · Pull Request #4918 · yandex/ClickHouse
I hereby agree to the terms of the CLA available at: https://yandex.ru/legal/cla/?lang=en For changelog. Remove if this is non-significant change. Category (leave one): New Feature Short descript...
-
/stat@combot
-
-
Joined.
-
Joined.
-
-
Для этого надо шардить и использовать дистрибутед движок, насколько я знаю.
-
-
Отдельные инстансы поднимать на одной машине? - не очень удобно.
-
Нет естественно, на разных. В этом и фишка - каждый шард - это своя отдельная пара - диск-рама-процессор
-
отсюда и прирост в производительности
-
Минус подхода - даныые будут раскиданы на разных машинах, и соответственно собирать их придется "по кускам" в случае чего.
-
Не понимаю. В том плане что я говорю о том, что иногда много параллельных дисков на одной машине. И о том как это утилизировать. Обычно это делается разделением на партиции по разным дискам.
-
Процессор то один и тот же
-
Ну, грубо говоря он не один, а много ядер + чтение довольно значительная часть операции.
-
И контроллеров чтения с диска тоже много?
-
Ну вообще в ddn это так. Думаю не только в ddn.
-
Ну тодгда наверное стоит и на одной машине попробовать.
-
-
ClickHouse читает из одной партиции параллельно, даже из одного куска. При использовании RAID, чтения будут распараллелены по дискам.
- 11 August 2019 (17 messages)
-
Joined.
-
столкулся с проблемой - при использовании ATTACH получаю ошибку DB::Exception: Received from localhost:9000, ::1. DB::ErrnoException. DB::ErrnoException: Cannot open file /var/lib/clickhouse/data/plz/metrika_events/format_version.txt, errno: 13, strerror: Permission denied.
-
Права поменяй на директории или owner смени на clickhouse.
-
а кликхаус разве создает своего пользака?
-
Если ставил из пакета, то обычно пакеты создают своего пользователя
-
DEB пакеты точно так делают
-
Всем привет. в кликхаусе есть WHERE IN ?
-
по типу where code in (12345, 23456, 34567)
-
есть
-
Спасибо) Как оказалось это в доктрине довольно странно работает)
-
Joined.
-
-
Никак.
Вручную затранкейтить и вставить инсертом.
Естественно при остановленной заливке. -
-
-
В доке читайте про волшебное слово populate
-
- 12 August 2019 (204 messages)
-
Joined.
-
-
Зачем кликхаус оставляет неактивные партиции после мержа? От них есть какой-нибудь практический толк? Атачем они в новую таблицу не атачатся, в старой не используются, данные из них уже схлопнулись. В чем трюк?
-
на случай, если смерженные партиции не успели синкнуться на диск
-
-
Как может идти активный запрос по неактивной партиции?
-
Когда запрос начал исполнение, то она попадала под список активных. Затем началось "долгое" исполнение, в течении которого надо работать со списком партиций.
-
А, вон оно что.
-
Используемые парты фиксируются перед выполнением запроса, у каждого увеличивается счётчик. Нельзя убить парт, пока счётчик ненулевой
-
-
-
А если сервер тормознуть это вызовет завершение всех мержей или он поставит в таблице где-нибудь метку что "нужно промержить"?
-
Имеется в виду штатное завершение работы ноды
-
Ну, если убить сервер, то просто заново мёржить будет
-
-
А вот тут не уверен
-
-
Просто интересно они идут "тупо по расписанию" или будут еще раз проведены при "нормальном завершении работы приложения"
-
По идее же когда программа завершает работу все ее ресурсы должны быть на уровне ОС "штатно" освобождены, а это, насколько мне не изменяет склероз - означает что будут завершены все процессы записи и прочего
-
При нормальном завершении новые парты будут записаны на диск
-
а старые удалятся потом
-
А есть какая-нибудь команда для того чтобы заставить кликхаус "перечитать конфиг"? Допустим, я добавил нового пользователя, он только после перезапуска сервера "появится" или кликхаус сам смотрит на дату конфига и перечитывает его? А если я накосячу в конфиге?
-
В документации написано что он следит за своим конфигом, но не написано что он будет делать если конфига будет кривая.
-
наверное подразумевается, что никто не вносит в прод что-то вручную и обкатывают конфиги на стейдж-инстансах, а там типа пофиг на ошибки
-
Ну, скорее всего, просто грязно выругается в логи и не будет применять конфиг...
-
Всем привет! Насколько стабильная версия 19.11.5.28, кто-нибудь уже использует в проде?
-
в логах будут ошибки
-
До ClickHouse митапа в Москве ещё почти месяц, а больше половины зала уже забронировано. Чтобы попасть на мероприятие нужно успеть зарегистрироваться до того, как он станет битком: https://yandex.ru/promo/clickhouse/moscow-2019Link
Приглашаем технических специалистов на митап по ClickHouse. Разработчики системы расскажут о новых функциях и планах, а пользователи — о собственном опыте.
-
None
-
-
-
предыдущее обсуждение этой темы должно легко найтись поиском по чатику
-
электропочта (email подписка) для ретроградов самое оно.
-
лучше rss тогда
-
-
with в сабквери можно как-то передать?
-
Поискал по истории. Вижу, что ситуация бесит не меня одного, но единственное решение которое предлагается - выйти из чатика.
-
-
-
например, можно попробовать найти клиент, где это отключается https://github.com/telegramdesktop/tdesktop/commit/af85aec33b86f138346f28ba70303a0e590f3db7
-
Пины без уведомления не должны звучать.
-
у меня ни клиент на андроиде, ни на десктопе линуксовый не доставляет такой боли при пинах, чтобы я об этом обязательно писал в чат
-
В настоящий момент, переиспользование выражения из секции WITH внутри подзапроса возможно только через дублирование. Только так:
WITH ['hello'] AS hello
SELECT hello, * FROM
(
WITH ['hello'] AS hello
SELECT hello
) -
-
десктопная телега это отлично, но проблема касается андроида
-
-
коллеги, добрый день!
мне нужно хранить информацию с гео+кан-трекеров, ну то есть, controller_id, timestamp, lon, lat, .....
кажется, мне нужен replacing merge tree, паритционированный по месяцам
первичный ключ, понятное дело, должен включать id трекера и таймстемп.
основные кейсы работы - сложить пачку наблюдений в кх, вытащить пачку наблюдений по конкретному контроллеру за временной интервал, и гораздо реже - вытащить все наблюдения за интервал.
вопрос, собственно, следующий:
порядок полей ПК: (controller, timestamp) или (timestamp, controller) ? -
у меня андроид не шлёт уведомлений на замьюченный чат при пинах
-
order by (metric, time) VS order by (time, metric)
order by (metric, time) VS order by (time, metric) - metrics_metrics1
-
Всем привет.
Подскажите, возможно ли при запросах к таблицам на движке aggregatingMergeTree использовать условия на поля из ключа?
Сейчас если я использую maxMerge то получаю ошибку о том что это аггрегатная функция:
Aggregate function maxMerge(last_event_date) is found in WHERE or PREWHERE in query
а если просто поле, то несовпадение типов:
Illegal types of arguments (AggregateFunction(max, Date), Date) of function greater -
-
Добрый день! А ошибки компиляции 19.13.1.11 надо куда-то развешивать ?
In file included from /usr/src/RPM/BUILD/clickhouse-19.13.1.11/dbms/src/Common/new_delete.cpp:4:
/usr/src/RPM/BUILD/clickhouse-19.13.1.11/libs/libcommon/include/common/memory.h: In function 'void* Memory::newImpl(std::size_t)':
/usr/src/RPM/BUILD/clickhouse-19.13.1.11/libs/libcommon/include/common/memory.h:28:18: error: 'malloc' was not declared in this scope
auto * ptr = malloc(size);
^~~~~~
/usr/src/RPM/BUILD/clickhouse-19.13.1.11/libs/libcommon/include/common/memory.h:28:18: note: 'malloc' is defined in header '<cstdlib>'; did you forget to '#include <cstdlib>'?
/usr/src/RPM/BUILD/clickhouse-19.13.1.11/libs/libcommon/include/common/memory.h:5:1:
+#include <cstdlib>
/usr/src/RPM/BUILD/clickhouse-19.13.1.11/libs/libcommon/include/common/memory.h:28:18:
auto * ptr = malloc(size);
^~~~~~
/usr/src/RPM/BUILD/clickhouse-19.13.1.11/libs/libcommon/include/common/memory.h: In function 'void* Memory::newNoExept(std::size_t)':
/usr/src/RPM/BUILD/clickhouse-19.13.1.11/libs/libcommon/include/common/memory.h:38:12: error: 'malloc' was not declared in this scope
return malloc(size); -
спасибо, понял.
-
Как быстро вставить значения из массива ,например, со ста элементами, в таблицу соответственно со ста столбцами типа string, спасибо
-
-
А чем обычный инсерт не устраивает?
-
А что за массив . Он где вообще ?
-
перечислять
arr[1] f0, arr[2] f1, .... , arr[n] fn -
никак. Обычно это не проблема, alter ждет завершения бегущих select и выполняется.
-
вы что-то странное делаете, скорее всего условие вам надо накладывать в having
т.е.
select f0, max(....), sum(...)
from x
where max(....)=.... --- так делать нельзя в sql
group by f0
либо
select f0, max(....), sum(...)
from x
group by f0
having max(....)=....
либо
select * from (
select f0, max(....) mx, sum(...)
from x
group by f0
)
where mx=.... -
Вьюха смотрит на таблицу эвентов и собирает latest картину.
т.е. там основные поля это max() по дате и argMax() по значению.
Вот теперь встала задача выбирать все значения, дата прихода данных по которым больше определенной. Хотел отсекать их на этапе чтения, но не вышло по описанной выше причине) -
-
ну если в having слишком медленно, то наверное можно добавить date еще раз без агрегирующей функции. И тогда там будет какое-то any значение и это уже позволит отсечь.
-
skip_unavailable_shards может
-
На момент перезаливки данных таблицы на одной ноде (при восстановлении) на select к вышестоящей distributed ттаблице, запросы проваливаются на проблемную ноду. Хотелось бы на момент восстановления данных - исключить запросы к ней.
Чтобы при select обращении к distributed таблице не было обращений на не рабочую ноду КХ, нужно в config.xml выпилить эту реплику тогда ? -
это даст неполный-неверный результат
-
не должно такого быть, это очень странно
дистрибьютид не посылает запросы на лежащюю ноду
может упасть только уже бегущий запрос, т.е. надо смотреть лог, че там за фигня -
>нужно в config.xml выпилить эту реплику тогда
да -
-
DEFAULT и MATERIALIZED это практически одно и тоже, отличаются только списком полей в select * и в insert into table .....
MATERIALIZED поля не показываются в * и в insert без списка полей не будет.
т.е. идея что можно добавить MATERIALIZED поле в таблицу и при этом существуюещее приложение этого не заметит,
insert into X values (.....)
и
select * from X
не изменятся -
да.
Replicated engine не использует описание кластера из config.xml (ему и не надо) -- только зукипер.
Distributed engine не использует зукипер -- использует только описание кластера из config.xml -
-
Коллеги, подскажите какую функцию нужно выбрать для ключа семплирования по стобцу url - любой 64 битный хеш?
-
не криптографическую функцию, они значительно легче по cpu, например intHash32
-
спасибо!
-
Joined.
-
Коллеги, прошу совет 😊 На одном сервере есть MergeTree таблица с ключем timestamp вида:
timestamp | bandwidth | errors | errors403 | errers 404| errers 500 | ip | и т.д...
в таблиц у пачками сгружаются данные. На общем объеме в 800+ млн строк запрос группирующий данные с подсчетом суммы бедвиза, количества ошибок и уников по ошибкам отрабатывает 20-30 секунд выбрав при этом 6к+ строк... Как это дело можно оптимизировать? AggregatingMergeTree не подходит так как в таблице есть еще поля по которым надо будет фильтрация. Хочется получать выборку в 5-6 раз быстрее... Поможет ли Distributed и добавление еще серверов с образованием кластера? В теории, тогда GROUP BY отработает на каждой ноде? Но насколько линейна зависимость кол-ва серверов кластера к скорости выполнения запроса?
Запрос вида:
SELECT timestamp,uniqIf(ip, errors>0), uniqIf(ip, errors403>0), uniqIf(ip, errors404>0),uniqIf(ip, errors500>0), SUM(errors), SUM(errors403), SUM(errors404), SUM(errors500),SUM(bandwidth) FROM sessions GROUP BY timestamp ORDER BY timestamp -
А таблица order by что?
-
-
order by timestamp
-
-
а как в Matview реализовать фильтрацию по полям из таблицы (до группировки)?
-
И как я понял из документации- если Matview делать поверх выборки в которой есть GROUP BY, то данные могут быть недоагрегированы в случае инсертов пачками...
-
А откуда может быть ошибка что подвисают запросы у человека с мака сидящего на сервере кх через ssh
show tables;
SHOW TABLES
��name��������� -
хотя с линукса или винды все нормально проходит и в логе видно что запрос отрабатывает быстро и все отдает
-
терминал не настроен как UTF8
iterm2 поставьте страдальцу
https://github.com/yandex/ClickHouse/issues/2153 -
надо сильно стараться чтобы с Distributed не упереться в доагрегацию на ноде инициаторе.
почему 20 сек. это проблема?
Пробуйте aggregating -- она схлопывает строки при мержах. Т.е. абсолютно не важно что строки приехали из разных инсертов -
- почему 20 сек. это проблема?
20 случается в моем случае крайне редко (в зависимости от фильтров) - чаще это 30+, и заказчика это не устраивает.
- пробуйте aggregating
всплывает вопрос фильтрации данных перед агрегацией...
-надо сильно стараться чтобы с Distributed не упереться в доагрегацию на ноде инициаторе.
Вы имеете в виду, правильно "шардировать" данные? -
>20 случается в моем случае крайне редко (в зависимости от фильтров) - чаще это 30+, и заказчика это не устраивает.
точный подсчет uniq за периоды это офигенно тяжелая задача, чаще всего не нужная, если нужная то пусть ждет.
AggregatingMergeTree ее может ускорить https://gist.github.com/den-crane/048ce66bc59f5577d56e42d76934682e
>всплывает вопрос фильтрации данных перед агрегацией...
вы неправильно делаете AggregatingMergeTree. Там нужна дата, и пусть данные хранятся сгруппированные за какой-то период (день/час или неделя)
>Вы имеете в виду, правильно "шардировать" данные?
да. И писать select с учетом distributed_group_by_no_merge -
Спасибо за советы. Буду теперь разбираться 😊
-
Добрый день! Подскажите какая последняя версия CH со стабильно работающей кафкой, куда откатываться?
-
в issue желательно.
а каике параметры cmake ? -
18.16.1
-
да у него и так iterm2 выставил utf-8 все равно
-
А еще один вопрос , новый синтаксис создания таблиц совместим со старым ? то есть я могу со старого на новый переписать а в самом кх все по прежнему же останется?
-
Без jemalloc
-
только -DENABLE_JEMALLOC=0 и всё ?
-
я когда из iterm2 подключаюсь по ssh
на сервере
set|grep -i term
LC_TERMINAL=iTerm2
LC_TERMINAL_VERSION=3.3.1
TERM=xterm-256color -
-
Я задаю в алхимии свой логин пароль "clickhouse://user:pass@192.168.0.1:port/database
-
Но он почему-то конектится как default
-
ЧЯДНТ?
-
уже исправлено - https://github.com/yandex/ClickHouse/commit/f63f763c3ea7cd853fdebe8f89d5f5bff9cc757ebuild fix · yandex/ClickHouse@f63f763
ClickHouse is a free analytic DBMS for big data. Contribute to yandex/ClickHouse development by creating an account on GitHub.
-
привет, а подскажите как то можно посмотреть сколько табличка дистрибьютед занимает на кластере?
-
дистрибьютед хранит только данные insert которые не успели/ не смогли улететь в шарды
du -sh /var/lib/clickhouse/data/база/таблица -
Коллеги, подскажите, пожалуйста. Есть таблица, в ней может быть, а может не быть (в зависимости от базы) одно из полей. Хотелось бы использовать единый запрос для всех вариантов базы, который бы в случае отсутствия поля, возвращал константное значение.
Вариант select a, b, if(hasColumnInTable(currentDatabase(), 'table', 'c'), c, 0) from table where... приводит к ошибке. Есть ли путь решения кроме как на стороне собственного приложения? -
мне интересно в низлежащие таблицы посмотреть (что бы не обходить 100 шардов)
-
Я строил distributed поверх system таблиц, из неё можно аггрегированную инфу по всему кластеру вытаскивать
-
или >distributed поверх system таблиц
или from remote( -
добавить поле в таблицу как alias
-
-
А есть/планируется движок, который бы позволил указывать свои функции мержа дубликатов? Иногда хочется что то более сложное, чем просто суммирование как в SummingMergeTree.
-
Из документации:
ReplacingMergeTree Parameters
ver — column with version. Type UInt*, Date or DateTime. Optional parameter.
When merging, ReplacingMergeTree from all the rows with the same primary key leaves only one: - Last in the selection, if ver not set. - With the maximum version, if ver specified.
Last in the selection == последняя вставка? -
Да. Из последнего insert
-
Спасибо
-
-
Подскажите, пожалуйста, что я делаю не так: пытаюсь настроить odbc driver для кх на mac os
делаю как написанно тут: https://github.com/yandex/clickhouse-odbc/blob/master/MACOS.md
и в ~/.odbc.ini прописываю креды для ремоут кх на серваке, но в iODBC Administrator ничего не вижу. Пытался и через него тоже подключить драйвер, но он не подключает и пишет, что драйвер не может быть загружен
на сервере кх версии 19.8, локально кх нету (может надо установить?)
Конечная целью является подключить кх к экселю, кто сталкивался, подскажите пожалуйста, работает ли он и есть ли какие проблемы? -
еще сам драйвер нужно прописать в ~/.odbcinst.ini или может быть даже /Library/ODBC/odbcinst.ini
-
в ~/.odbcinst.ini прописывал
в /Library/ODBC/odbcinst.ini сейчас добавлю -
-
там кстати ещё нет строчки сверху
ClickHouse = Installed
когда добавил, то в iODBC Administration появился, но когда делаю тест пишет попрежнему:
[iODBC][Driver Manager]Specified driver could not be loaded -
путь до либы в Driver= правильный?
-
да
-
добавление в /Library/ODBC/odbcinst.ini так же не помогло
-
а в ~/Library/ODBC/odbc.ini или в /Library/ODBC/odbc.ini что-то есть про Clickhouse (собственно запись про DSN)? если в первом есть — то ее видно в User DSN, если во втором — в System DSN, Если нигде записи нет — ее нигде не видно (и в экселе тоже).
-
-
в /Library/ODBC/odbc.ini нету
в ~/Library/ODBC/odbc.ini есть, но туда не прокинулись настройки соединений url=...
[ODBC Data Sources]
ClickHouse = ClickHouse
[ClickHouse]
Driver = /usr/local/opt/clickhouse-odbc/lib/libclickhouseodbcw.dylib -
попробую добавить сейчас вручную
-
не помогло(
-
-
а iODBC Administrator64 как сейчас видит этот DSN (в User DSN)?
-
оО круто, там successfully написало
-
я не через 64 заходил
-
может теперь и Эксель увидит
-
увидело, но пишет Request Failed
-
successfully в Test connection ничего особенного не значит, кроме того, что пакеты туда/сюда прошли.
-
теперь осталось только с параметрами самого DSN connection разобраться. можно как контроль вместо url попробовать поля отдельно (по старинке) — server / port / database / uid и что там еще конфигурите
-
ок, сейчас попробую, может действитьно для mac os не работает, тк в гайде на мак url не упоминают
-
а есть куда смотреть, логи какие-нибудь?
-
-
-
я писал также только http://username:pass@host_name_or_ip:8123/query
-
url должен работать везде
-
должен (и работает)
-
Спасибо. Забрал. А по какому принципу выходят stable релизы ? когда ждать следующий, в котором проблемы сборки уже будут исправлены ?
-
в логи пишет :
20345527293 [0x1114fc5c0] ../driver/environment.cpp:122 === Driver started === VERSION=1.0.0.20190611 ODBC_IODBC UNICODE=1 ODBC_WCHAR=1 sizeof(SQLTCHAR)=4 sizeof(wchar_t)=4 ODBCVER=351 ODBC_LIBRARIES=/usr/local/lib/libiodbc.a;/usr/local/lib/libiodbcinst.a;/usr/local/lib/libltdl.a;/usr/local/lib/libiodbcinst.a;/usr/local/lib/libltdl.a ODBC_INCLUDE_DIRECTORIES=/usr/local/include
20345527317 [0x1114fc5c0] ../driver/attr.cpp:13 impl_SQLSetEnvAttr
20345527334 [0x1114fc5c0] ../driver/attr.cpp:16 SetEnvAttr: 200
20345527350 [0x1114fc5c0] ../driver/attr.cpp:34 Set ODBC version to 3
20345527366 [0x1114fc5c0] ../driver/handles.cpp:58 SQLAllocHandle handle_type=2 input_handle=0x60000197fc80
20345527383 [0x1114fc5c0] ../driver/handles.cpp:21 allocConnect environment=0x60000197fc80 out_connection=0x6000030ff228
20345527407 [0x1114fc5c0] ../driver/odbc.cpp:62 SQLDriverConnectW connection_str_in=0x7ffee7579ff0 : -3 4096
20345527430 [0x1114fc5c0] ../driver/connection.cpp:142 Parse DSN: key=dsn value=ClickHouse
20345527446 [0x1114fc5c0] ../driver/connection.cpp:142 Parse DSN: key=uid value=
20345527461 [0x1114fc5c0] ../driver/connection.cpp:142 Parse DSN: key=pwd value=
20345533894 [0x1114fc5c0] ../driver/connection.cpp:86 Creating session with http://мой ип:8123
20345533963 [0x1114fc5c0] ../driver/info.cpp:30 SQLGetInfoW
20345533985 [0x1114fc5c0] ../driver/info.cpp:31 GetInfo with info_type: 23, out_value_max_length: 2
20345534005 [0x1114fc5c0] ../driver/info.cpp:129 GetInfo SQL_CURSOR_COMMIT_BEHAVIOR, type: SQLUSMALLINT, value: SQL_CB_PRESERVE = 2
20345534022 [0x1114fc5c0] ../driver/info.cpp:30 SQLGetInfoW
20345534037 [0x1114fc5c0] ../driver/info.cpp:31 GetInfo with info_type: 24, out_value_max_length: 2
20345534073 [0x1114fc5c0] ../driver/info.cpp:129 GetInfo SQL_CURSOR_ROLLBACK_BEHAVIOR, type: SQLUSMALLINT, value: SQL_CB_PRESERVE = 2
но в экселе^ когдай кидает ошибку Request Failed ничего в лог не пишет..
это значит, что скорее всего проблема в нем? (Excel for Mac версия 15.13.3) -
Joined.
-
Конекшнов или запросов? Много параллельных запросов плохо.
Можно например кешировать если запросы повторяющиеся. -
Например, если развернуть какое-нибудб самописное апи, к которому будут обращаться пользователи, каждый запрос к АПИ - это селект (сложный или простой к БД), чтобы получить инфу от Клик Хауза.
-
При тех же условиях, ClickHouse может обработать несколько сотен (до нескольких тысяч в лучшем случае) запросов в секунду на одном сервере. Так как такой сценарий работы не является типичным для аналитических СУБД, рекомендуется рассчитывать не более чем на 100 запросов в секунду.
Я бы вот это посоветовал прочитать целиком:
https://clickhouse.yandex/docs/ru/introduction/performance/ -
Спасибо! Да, видел. Но кое-что не понял сразу. Тут дело такое, что я буду брать минимальные партии данных - самописная пагинация...
-
-
Ну вот тут в детали надо влезать. Если все запросы по ключу, много повторяющихся и тп. То можно рассчитывать что все будет ок. Данные попадут в кеш ОС и все будет летать. Но если у вас планируется что-то вроде яндекс метрики со свободным построителем отчетов, тут я бы конечно на большое количество параллельных запросов не рассчитывал.
-
https://www.altinity.com/blog/clickhouse-in-the-storm-part-1
https://www.altinity.com/blog/clickhouse-in-the-storm-part-2ClickHouse In the Storm. Part 1: Maximum QPS estimationMay 2, 2019ClickHouse is an OLAP database for analytics, so the typical use scenario is processing a relatively small number of requests -- from several per hour to many dozens or even low hundreds per second --affecting huge ranges of data (gigabytes/millions of rows).But how it will behave in other scenarios? Let's try to use a steam-hammer to crack nuts, and check how ClickHouse will deal with thousands of small requests per second. This will help us to understand the range of possible use cases and limitations better.This post has two parts. The first part covers connectivity benchmarks and test setup. The next part covers maximum QPS in scenarios involving actual data.
-
Довольно интересный (как мне кажется) юзкейс у ClickHouse в качестве условного key-value заключается в том, что он умеет группировать записи по первичному ключу, так что если вы упираетесь в I/O (т.е. много данных и относительно мало памяти), и вы посылаете запросы с max_threads=1, то ClickHouse может показывать вполне хорошую производительность на жёстких дисках (т.е. сотни QPS :))
-
В некоторых случаях этого достаточно, и вы можете хранить на одном сервере очень много данных благодаря сжатию, например.
-
Да CH уже такой комбайн, чего только не придумают)
-
LSM разве не лучше подходит под эту задачу?
-
Так ClickHouse это и есть LSM, только без L :)
-
Да, но в lsm писать лучше из-за мемтейбла
-
Да, поэтому в ClickHouse рекомендуют вставлять раз в несколько секунд большими пачками.
-
По сути вы эту часть реализуете сами :)
-
Хотя, не понял где в кх лсм
-
что такое самописная пагинация?
КХ ксати научился order by по индексу -
LSM — Log-Structured Merge Tree. В ClickHouse просто Merge Tree :)
-
Если я не ошибаюсь, lsm это мемтейбл + сстейбл на диске. Не очень знаком с кх, если честно.
-
Насколько я знаю, LSM это скорее про подход, нежели про конкретную реализацию с memtable+sstable, хотя конечно это стандартный паттерн.
-
ClickHouse состоит просто из сортированных кусков на диске, в памяти он ничего не держит (кроме буферных таблиц, но там тоже не совсем memtable получается)
-
Да, вы правы, я по Кассандре сужу. Поэтому и смутился, что имплементация LSM в его распространенном понимании в Кассандре, и кх, отличаются.
-
Это я в АПИ буду реализовывать ,чтобы на фронт удобно отдавать порции , которые забрал из КХ. Например, пользователь хочет найти что-то и АПИ сервис нашел ему например 2000 строк, я же их буду порциями по 10-20 штук выдавать на фронт. Буду юзать LIMIT 0, 10 и тд
-
-
ниче не понял.
типа из КХ вы заберете сразу миллион строк, а ваш API сэмулирует limit 0, 10 ? -
-
-
А КХ тут зачем? mysql возьмите.
КХ плохо умеет по 10 строк.
У КХ хорошо миллиард сразу -
-
-
-
Т.е. вы делаете агрегацию миллиона строк, складываете результат агрегации -- 10 тыс. строк во временную таблицу, по временной таблице пагинируетесь?
-
Да, думал так. Но что будет, если этих временных таблиц будет тысяци??
-
-
да память закончится у сервера скорее всего.
-
-
-
а что мешает результаты агрегации скласть в тот же mysql?
-
хотя я б, если честно, в постгрес с его json-field запихал.
что то типа user_id, query, params, result -
1. Еще одно звено в цепочке - плохо
2. Я спокойно вместо mysql использую Materialized View с агрегацией - летает очень славно
В принципее, если столкунсь с большими проблемами, то можно написать сервис агрегаций и пулять все в MySQL, но у меня все равно примерно млн строк и какой-то поиск, а там MySQL уже какой-то вялый -
Постгрес - круто, но что-то сразу центральную базу выбрал mYsql, сейчас мигрироваться четсно нет времени((
-
-
это которая с результатами агрегации?
-
Да
-
lru-based invalidation
-
Не понял((
-
-
ну, условно, так. пользователь не ходил за этими данными уже неделю. почему б не прибить?
-
впрочем, всё это - лютый оффтоп.
-
-
ничем не плох. вот вообще ничем. просто использовать его как кэш - странно.
-
вы же планируете по таблице на запрос создавать
-
-
-
Нет, создал один раз и радуюсь))
-
Возьмите mat view и предаггрегируйте (по часам, дням, юзерам или что там у вас).
-
- 13 August 2019 (187 messages)
-
А ошибку сборки на aarch64 уже чинили ? Ошибка в cmake с детектом cpuinfo на aarch64.
/src/Common/getNumberOfPhysicalCPUCores.cpp.o -c /usr/src/RPM/BUILD/clickhouse-19.13.1.11/dbms/src/Common/getNumberOfPhysicalCPUCores.cpp
/usr/src/RPM/BUILD/clickhouse-19.13.1.11/dbms/src/Common/getNumberOfPhysicalCPUCores.cpp:10:13: fatal error: cpuinfo.h: No such file or directory
# include <cpuinfo.h>
^~~~~~~~~~~
compilation terminated.
make[2]: *** [dbms/CMakeFiles/clickhouse_common_io.dir/build.make:518: dbms/CMakeFiles/clickhouse_common_io.dir/src/Common/getNumberOfPhysicalCPUCores.cpp.o] Error 1
make[2]: Leaving directory '/usr/src/RPM/BUILD/clickhouse-19.13.1.11/BUILD'
make[2]: *** Waiting for unfinished jobs....
make[2]: Entering directory '/usr/src/RPM/BUILD/clickhouse-19.13.1.11/BUILD'
Полный лог здесь:
http://git.altlinux.org/tasks/235944/build/100/aarch64/log -
Доброе утро!
В какой-то момент после начала параллельной обильной вставки рост график inserted rows превратился на почти всех нодах из ровной линии в вот такой частокол. Неужели многовато потоков?
(кластер ~20 шадов*2реплики, вставка в 10 потоков из террабайтных tsv) -
https://clickhouse.yandex/docs/ru/changelog/
Язык перепутали? -
https://clickhouse.yandex/docs/fa/changelog/ а тут вообще стороны перепутали
-
Тут так и надо наверно
-
-
Joined.
-
-
-
-
присоединяюсь к вопросу. есть таблица 14 млрд записей. есть поле1 (400 тыс уник.значений), есть поле2 (5млрд уникальных значений)
делаю просто uniq по полю2 - отрабатывает за минуту;
делаю group by поле1 + where поле1 = 'одно значение' + uniq (поле2) - не дождался.... (более 5 мин запрос пытался)
select поле1, uniq(поле2)
from table
where поле1 = 'значение'
group by поле1 -
Всем привет!
Может кто то наступал на грабли такие: javaHash в КХ от русских букв не совпадает с джавовским. Для английских - все норм.
пример:
SELECT javaHash('тест') -1909008361 System.out.println("тест".hashCode()); 33542036 -
Для count() выбирается самый маленький столбец из таблицы и по нему считается. В отличие от mysql в count() нет параметра именно по этому.
Уник же читает тот столбец что вы задали, плюс операция немного другая - - равносильна select count() from (select distinct value from t)
кстати - uniq() считает приблизительно, точно считает uniqExact - но он еще медленнее -
-
@vbuttermaan javaHash only supports ascii code, because in java, string stores as unicode, it means each char in java has 2 bytes, but for ascii code, it equals its unicode because the high byte is 0 in unicode. Maybe we can do some enhancement to javaHash
-
select timezone()
-
А смещение в часах можно?
-
Спасибо! Пришлось написать свой велосипед в java, чтобы совпадал с КХ, может пригодится кому-то:
static public int hashCode(String value) {
int h = 0;
if (value!= null && value.length() > 0) {
byte val[] = value.getBytes(StandardCharsets.UTF_8);
for (int i = 0; i < val.length; i++) {
h = 31 * h + (int) val[i];
}
}
return h;
} -
Есть ли какое-нибдуь принципиальное отличие между SummingMergeTree и AggregatingMergeTree при использовании в MATERIALIZED VIEW, если мне нужно просто иметь сумму всех полей?
-
Понятное дело, что в AggregatingMergeTree нужно хрнаить State, но для суммы это просто число?
-
Кстати, sumState имеет тип поля или бОльший, чтобы, если что не было переполнения?
-
Joined.
-
@vbuttermaan cool!
-
Выставил в конфиге
<max_partitions_per_insert_block>1000</max_partitions_per_insert_block>
SELECT * FROM system.settings WHERE name = 'max_partitions_per_insert_block'
по прежнему выдает значение по умолчанию 100
рестарт сервера не помог
clickhouse-server -V
ClickHouse server version 19.11.3.11 (official build). -
Прописал
<max_partitions_per_insert_block>1000</max_partitions_per_insert_block>
в profiles/default
Настройка применилась.
Вопрос снимается. -
А как переводить таблицы со старого способа создания на новый синтаксис создания таблиц ? а то в доке написано Не используйте этот способ в новых проектах и по возможности переведите старые проекты на способ, описанный выше.
-
Подскажите , что КХ хранит в файле для нулабл колонки. Вот если у меня нулабл int32, то что он запишет в файл для null?
-
Для хранения значения типа NullableClickHouse использует:
Отдельный файл с масками NULL (далее маска).
Непосредственно файл со значениями.
Маска определяет, что лежит в ячейке данных: NULL или значение.
В случае, когда маска указывает, что в ячейке хранится NULL, в файле значений хранится значение по умолчанию для типа данных. Т.е. если, например, поле имеет тип Nullable(Int8), то ячейка будет хранить значение по умолчанию для Int -
Спасибо большое. Стало понятно.
-
-
нода уже существует , значит вы ее уже создавали и удалили не корректно а просто может снесли сервер с ней, придется руками чистить вероятно пути в зукипере
-
-
Скажите пожалуйста, можно ли красиво преобразовать к последнему дню месяца?
так как-то не нравится(
select toStartOfMonth(toDate('2019-01-20')) + toIntervalMonth(1) - toIntervalDay(1); -
Последний toIntervalDay вроде можно выкинуть.
-
не тогда будет 2019-02-01, а надо 2019-01-31
-
-
Не правильно. Старые данные никак не участвуют
-
Добрый день.
У меня вопрос по конфигурациям из переменных окружения. Пробую так:
<uncompressed_cache_size from_env="UNCOMPRESSED_CACHE_SIZE" />
в логах получаю это
clickhouse_1 | 2019.08.13 11:48:32.852739 [ 1 ] {} <Information> Application: Shutting down storages.
clickhouse_1 | 2019.08.13 11:48:32.854707 [ 1 ] {} <Error> Application: Syntax error: Not a valid unsigned integer
clickhouse_1 | 2019.08.13 11:48:32.854795 [ 1 ] {} <Information> Application: shutting down
clickhouse_1 | 2019.08.13 11:48:32.855000 [ 2 ] {} <Information> BaseDaemon: Stop SignalListener thread
clickhouse_1 | ClickHouse init process failed. -
Рассматривайте MV как просто как триггер на Insert
-
не view, а column
-
А, извиняюсь
-
Joined.
-
c view я уже понял что это просто триггер. но мне больше подходит column. В существующую таблицу добавил колонку, значение которой - hash от строки. работа по ней идёт медленно.
сделал ещё одну такую же таблицу (пустую, но уже с materialized column) и скопировал данные в неё из первой - скорость работы увеличилась раза в три. -
нет различий, более того SummingMergeTree уже умеет statе-ы поэтому можно не использовать AggregatingMergeTree вообще никогда.
>но для суммы это просто число
вроде нет таких оптимизаций, там хранится не просто число -
официально insert into new select from old
а вообще есть утилита в исходниках, которую надо собрать самому, но она переводит все таблицы сразу, и вроде все равно не умеет replicated -
а долго будет поддерживаться старый вариант таблиц ?
-
правильно, для страрых рассчитывает на лету в select и при мержах старых данных будет уже записано на диск.
записать всю колонку можно alter table ... update column = column where=1
на самом деле materialized это тоже самое что и default. Кроме видимости в select * и insert без списка полей -
Отлично! Спасибо огромное. сейчас сделаю update
-
¯\_(ツ)_/¯
-
в смысле вставка в distributed ?
что показывает select value from system.asynchronous_metrics where metric = 'MaxPartCountForPartition' -
@milovidov_an а подскажите по срокам поддержки? стоит ли уже заморачиваться или пока можно оставить все как есть , так как инсерт селект не самое простое решение в данном случае ну и как минимум потребует удвоение места.
-
Спасибо.
А есть ли какая нибудь информация о скорости выполнения запросов sum(...) и sumMerge(...), где в одном случае просто поля, в другом sumState? -
есть и не в пользу state
https://t.me/clickhouse_ru/78507 -
неожиданно, спасибо
-
еще раз, можно не пользоваться aggregating вообще никогда. Summing умеет все что надо argMaxState/uniqState и т.д.
-
а как вы сервису задали переменные окружения? Речь вообще о чем? Или это докер?
-
-
Support environment variables in config.xml · Issue #1616 · yandex/ClickHouse
Running under kubernetes it's much easier to configure some details via environment variables. (deleted example related to interserver_http_host because that turned out to be me misundersta...
-
-
-
в смысле -e UNCOMPRESSED_CACHE_SIZE=2534545564565 ?
-
-
-
-
Joined.
-
-
-
-
-
-
нет ни списка всех пользователей, ни текущего пользователя
-
-
-
Неистово круто
-
Подскажите, пожалуйста, как правильно удалить ошметки в zookeeper? После отказа в нём осталось далеко за 100к записей в replicas/*/parts о несуществующих уже партах.
-
да конечно должно работать, заводите тикет.
В 19.7 проапдейтилили lz4 и стало несовместимо у тех кто использует lz4.
19.8 просто сломана и несовместима ни с 19.7 ни с 19.9 -
Почитал в истории чата "страшные" истории про решардирование.
1) Создаем новую distributed таблицу (если меняется ключ шардирования, то с новым ключом)
2) Копируем данные из старой distributed таблицы
3) Переименовываем таблицы
Кажется, что в худшем случае это 2хпамять, можно как то лучше? -
Пока бессрочно (то есть - вечно).
-
ну вот каким образом все преставляют решардирование?
у меня в сервере 80ТБ, шардов 10, итого надо переложить 800ТБ, это какбы займет время, и убьет сеть и диски, а система работает, тыщи запросов бегут. -
во, четко ) спс
-
Тоже страшно, но что делать если охват растет, данных все больше, а диски не увеличиваются...
-
ну в доке предлагается: добавить шарды, и у новых шардов делать вес больше например на +30%, со временем объем выровняется
-
Наверное стоит уточнить, что хочется иметь идеальный ключ шардирования, чтобы почти все агрегации проводились на шардах
-
всмысле без финального агрегирования
-
просто взять и отдать
-
тогда clickhouse-copier и перекладывать из одного кластера с 5 серверами в новый кластер с 20 серверами
-
А теперь есть и более простой вариант - репозиторий testing:
https://repo.yandex.ru/clickhouse/deb/testing/main/
Он присутствует и для deb и для rpm. -
да ОК, у меня уже давно
# cat /etc/apt/sources.list.d/clickhouse.list
#deb http://repo.yandex.ru/clickhouse/deb/stable/ main/
deb http://repo.yandex.ru/clickhouse/deb/testing/ main/
#deb http://repo.yandex.ru/clickhouse/deb/prestable/ main/ -
Добрый день!
Подскажите, пожалуйста, самый простой способ перенести базу данных из одного сервера на другой... -
-
спасибо
-
-
нет (я вообще-то не работаю в Я и не имею отношения к разработке КХ, у меня и своя работа есть если что)
похоже есть проблема именно с <uncompressed_cache_size>, я eventually посмотрю на это и проверю без докера и возможно сделаю тикет
задайте без переменной, через макросы или конфиг подсуньте -
-
Joined.
-
Всем привет. Подскажите, как правильно считать частоту событий. У меня есть лог с секундной точностью в нем скажем 10 kkk записей за 2 недели и 50 типов событий
Я хочу по каждому типу знать максимальную частоту. В лоб это не решить -- придётся группировать по 86400 * 50 * 14 ключам и искать максимум для каждого из 50 событий. Может есть способ лучше ? -
на самом деле у меня с 19.13 еще связана непонятная потеря производительности, именно на тех таблицах что потом сломались. Сейчас откатил все назад на 19.9 искорость восстановилась. Мистика какая то. И тикет такой не заведешь
-
Можно создать таблицу с движком SummingMergeTree и считать там агрегированные значения, например количество каждого типа события за час.
-
а какие параметры cmake и его вывод?
-
откуда взялся cpuinfo ?
-
тут есть полный лог: http://git.altlinux.org/tasks/235944/build/100/aarch64/log
-
у вас ошибка в cmake, там cpuinfo по дефолту устанавливается если ничего не найдено.
-
http://git.altlinux.org/gears/c/clickhouse.git?p=clickhouse.git;a=commitdiff;h=a464c76b8cf32763f4f6a58bcbd9cac30f4ab711;hp=cbaf97a671537cdf5407467c4269261e9d4fc8d8 - тут примерный патч, который это исправляет.
-
>И тикет такой не заведешь
на самом деле любая информация помогает понять где проблема.
потеря в инсертах? в селектах? distributed таблица? null -ы ? Codec-и ? и т.д. -
-
А какие еще принципиальные отличия у них? По докам будто бы aggregating с функциями sum это полная замена summingmetgetree
-
Ну дока устарела и все наоборот. Summing полная замена.
-
Никаких отличий. Используйте summing везде.
-
-
да вроде где-то в 18.14.9, у меня в 18.14.18 все ОК на проде.
-
Joined.
-
Всем привет! Неделю назад установил сlickhouse на убунту, потестировал, все было ок, после этого не трогал систему. Сейчас пришло время приступить к разработке, зашел в убунту, пытаюсь запустить сервер и выходит ошибка:
-
-
Помогите исправить, пожалуйста
-
Что в логах?
-
-
-
первое было /var/log/clickhouse-server/clickhouse-server.err.log
-
убунту запустил под виндой с помощью Windows Subsystem for Linux
-
тестил на разных - 16 и 18 версиях
-
результат один и тот же
-
sudo service clickhouse-server status?
-
-
в en чате вчера писали, 19.11 работает в WSL, а 19.13 падает точно также
-
поставьте 19.11
-
сейчас
-
Подскажите как делается left join. Обычно же КХ делает hashjoin и при этом начинает с правой таблицы. Т.е по правой строит структуру подобную HashMap помещая ее в память. В случае left join все также или он с левой начинает?
-
не подскажете как ее установить?
-
-
а параметр ver? довольно важное отличие AggregatingMergeTree, или что-то уже поменялось?
-
apt-get install clickhouse-server=19.11.2.7 clickhouse-client=19.11.2.7 clickhouse-common-static=19.11.2.7
-
что? вы путаете с replacing
-
-
hash таблица строится по правой (она обычно маленькая) и влезает в память.
потом КХ идет по огромной левой таблице и блок за блоком по 65к записей ее обрабатывает, и для записей внутри блока левой ищет в хеш таблице запись используя лукап по хешу
левая остается cлева
select from left_table join right_table
select from left_table left join right_table
пока не использован right join
select from right_table right join left_table -
-
on cluster вообще никак не связан с репликацией (почти. он умеет догадываться что не нужно alter делать на реплике)
-
on cluster необязателен, можно делать все и без него. И точно также можно пользоваться on cluster для любых таблиц.
create table xx on cluster segmented (A Int64) Engine=Null;
alter table xx on cluster segmented add column v Int64;
drop table xx on cluster segmented; -
Теперь работает, спасибо!
-
Я правильно понимаю, что по сравнению с тем как было +год назад, сейчас все on cluster поддерживаются. => Можно накатывать схему с одной реплики (для реплик конечно).
-
Там нет такой возможности. Надо дорабатывать.
-
да. По сравнению с ручной автоматизацией иногда не очень ясен результат, если что-то не сработало, и приходится копаться, поэтому я не использую для alter-в которые могут затянуться на часы.
-
А если left join? То ведь тогда нужно вывести даже записи,для которой нет соответствия в правой . Т.е нужно ещё оставить записи, если лукап по хэшу не прошел .
-
А что-то для раскатки схемы используешь? Migrate?
-
ну и в чем проблема-то?
не нашли -> осталяем левую -> заполняем null-ми/ нулями поля из правой
на самом деле тут вообще ничего нового, все тоже самое в oracle/mysql/pg/.... просто там таблица для inner join по которой будет hash-таблица построена -- выбирается оптимизатором -
баш
-
Dobrii vecher rebiata,, ia nastraivau clickhouse s kafka,,toest ia xochu chtobi dannie kotorie ia zapisivau v kafku chtobi zapisalos v clickhouse ... bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test eto nastroika kafka produser-a,
a eto tablica CH
CREATE TABLE queue (
timestamp UInt64,
level String,
message String
) ENGINE = Kafka('localhost:9092', 'test', 'group1', 'JSONEachRow');
ia zapisivau v kafku
{"timestamp":1554138000,"level":"first","message":"abc"} takie dannie no v clickhouse nichego ne zapisivaetsia i on ostaiotsia pustim,,u kogo vstrechalas takogo roda problema i kak mojno ego reshit,,mojet ia nepravilno nastraivau,,spasibo zaranee -
Я как бы представляю , что вот есть HashMap по правой таблице. Ключ в этом мэпе - это такой тюпл из полей , по которым джойним, а значение в это мэпе - это строки , которые с этим ключем. Получается, что в случае left join ключи в эту мжпу могут просто вставлены быть из левой таблицы
-
все вообще не так. Вам зачем это?
-
а как?
-
интересно узнать
-
я тоже не знаю.
тюпл из полей -- это хеш / число / адрес / тупо индекс
зачем из левой что вставлять в эту мапу?
select A,B from leftT left outer join rightT on (Z)
hash-table in Memory
hash B Z
----------------
1 xxxx 'true'
2 yyyy 'false'
идем по левой таблице находим там Z='unknown' считаем hash, получаем 48
48 в hash-table нету -> B = null -
А результат где накапливается ? В правой мэпе или отдельная структура ?
-
результат стримается дальше по пайплауну следущим стадиям
-
левая таблица никуда не читается, грубо/упрощенно говоря это стрим, и обрабатыатся строка за строкой
-
конечно блоками по 65к и многопоточно
-
Вот мы взяли строку из левой. Посчитали хэш . Проверили , есть ли хэш в правой . Наверное если хэш есть , то нужно ещё и поля сравнить т.к хэш не уникальный. Значит в правой хэш мепе хранятся и сами значения . И ещё там должны хранится и значения других колонок для этой строки
-
А после совпадения нам нужно сформировать строку , где уже будут значения колонок в общем случае из 2 х таблиц. Вот эта строка она в какой структуре ?
-
я не знаю насчет уникальный или нет. Тут в КХ все такие затейники. Конечно хештаблице все колонки которые нужны запросу.
-
Спасибо
-
какая разница? это ведь все структуры в памяти, кучка указателей на блоки с колонками, насколько я понимаю если блок колонки из левой таблицы не меняется (не умножается all и не обрезается inner) то можно указатель на блок передать дальше в пайплайн.
-
я не уверен про хеш-таблицу для правой, как она устроена. Потому что в словарях это множество хеш таблиц, по таблице на колонку
-
Но если добавили колонки из правой , то уже нельзя ведь.
-
можно, вы не понимаете, указатель на блок содержащий колонку A
т.е. select L.A, L.B, R.X from L any left outer join R
можно указателИ на блоки с кучками строк L.A, L.B передавать -- они не меняются -- any left outer -
А блок он значение одной колонки содержит ?
-
кажется, да. Я бы так сделал 🙂
-
По какой причине могут не работать MV? Туда не поступают новые данные хотя в связаную таблицу инсерты идут и данные которые были на момент создания MV в связаной таблице - в MV есть
MV создаю вот так:
CREATE MATERIALIZED VIEW IF NOT EXISTS currency_rate_latest
ENGINE = ReplacingMergeTree(time) PARTITION BY group ORDER BY (group, from, to) POPULATE
AS SELECT
group, from, to,
argMax(value, datetime) as value,
max(datetime) as time
FROM currency_rate
GROUP BY group, from, to;
Версия КХ 19.11.3.11 -
на самом деле MV это триггер на insert и если вставляется одна строка, то ваш запрос выполнится над одной строкой
-
скорее всего тут нужен argMaxState и aggregatingMergeT, хотя зависит от задачи конечн
-
-
а хотя кстати возможно все у вас правильно и строк нет по другой причине. currency_rate -- replicated? вы в нее вставляете или в реплику?
create table currency_rate (group Int64, from Int64, to Int64, value Int64, datetime DateTime) Engine=MergeTree order by tuple();
insert into currency_rate values(1,1,1,6,now());
insert into currency_rate values(1,1,1,8,now()+5);
select * from currency_rate_latest final
1 rows in set. -
try to add a parameter kafka_row_delimiter = '\n';
https://clickhouse.yandex/docs/en/operations/table_engines/kafka/ -
-
MV не каскадируются пока.
надо вам в currency_rate_latest указть FROM кафка таблица -
-
вообще с каскадированием все странно, для кафки каскадирование не работает, но вроде уже почти запилили судя по pull request.
-
надо
kafka -> mv -> table
\ -> mv -> table2 -
все вместе сейчас выглядит так:
CREATE TABLE IF NOT EXISTS finance.currency_rate (
group String,
from String,
to String,
value Float64,
datetime DateTime,
date Date
) ENGINE = MergeTree PARTITION BY toYYYYMM(date) ORDER BY (group, from, to, date) SETTINGS index_granularity = 8192;
CREATE TABLE IF NOT EXISTS finance.currency_rate_kafka (
DATETIME String,
EVENT String,
INTEGRATION String,
RATE_FROM String,
RATE_TO String,
RATE_VALUE Float64
) ENGINE = Kafka SETTINGS kafka_broker_list = 'kafka:9092',
kafka_topic_list = 'statistic',
kafka_group_name = 'finance_currency_rate',
kafka_row_delimiter = '\n',
kafka_format = 'JSONEachRow',
kafka_skip_broken_messages = 1,
kafka_num_consumers = 5;
CREATE MATERIALIZED VIEW IF NOT EXISTS finance.currency_rate_consumer TO finance.currency_rate
AS SELECT
INTEGRATION as group,
RATE_FROM as from,
RATE_TO as to,
RATE_VALUE as value,
parseDateTimeBestEffort(DATETIME) as datetime,
toDate(parseDateTimeBestEffort(DATETIME)) as date
FROM finance.currency_rate_kafka
WHERE EVENT = 'currency_feed' AND RATE_FROM != '' AND RATE_TO != '' AND RATE_VALUE != 0;
CREATE MATERIALIZED VIEW IF NOT EXISTS currency_rate_latest
ENGINE = ReplacingMergeTree(time) PARTITION BY group ORDER BY (group, from, to) POPULATE
AS SELECT
group, from, to,
argMax(value, datetime) as value,
max(datetime) as time
FROM currency_rate
GROUP BY group, from, to; -
it did not help,,but thank you anyway.. i ran clickhouse using docker could it affect on this
-
да, это все понятно
CREATE MATERIALIZED VIEW IF NOT EXISTS currency_rate_latest
....
....
работает только FROM currency_rate_kafka -
check CH logs. Of course kafka host should be acessible from docker.
try to enter into the container with bash and check kafka host/port with telnet / curl -
okay,,i will try,,thank you very much,,
-
точно, 👍
-
-
если есть кафка и словари то 100%
-
Нет кафки и словарей, есть только репликация мерджтри и буфер таблицьі
-
тестировать надо на стейдже полный lifecycle
-
- 14 August 2019 (118 messages)
-
-
-
-
А данные для таблицы откуда? CSV база более скудная, чем бинарная
-
я для своих задач делал словарь, обращающийся в бинарную базу
-
Good day, Denny Crane,, when i connect to kafka using CH in CH logs i get this message
%3|1565765569.784|FAIL|ClickHouse 19.8.3.8#consumer-7| [thrd:localhost:9092/bootstrap]: localhost:9092/bootstrap: Connect to ipv4#127.0.0.1:9092 failed: Connection refused (after 0ms in state CONNECT)
%3|1565765569.784|ERROR|ClickHouse 19.8.3.8#consumer-7| [thrd:localhost:9092/bootstrap]: localhost:9092/bootstrap: Connect to ipv4#127.0.0.1:9092 failed: Connection refused (after 0ms in state CONNECT)
%3|1565765569.784|ERROR|ClickHouse 19.8.3.8#consumer-7| [thrd:localhost:9092/bootstrap]: 1/1 brokers are down -
can you suggest me what to do,,and how to deal with it?
-
-
-
А где я смогу прочитать как интегрировать бинарники, я так понимаю это mmdb
-
я писал свою обертку на Go
-
А что значит "более скудная"? Разве это не одна и та же база, но в разных форматах?
-
Тоже интересно
-
не знаю как сейчас, но раньше на сайте maxmind было заявлено, что csv база покрывает что-то порядка ~80% данных.
Может сейчас что-то изменилось, не знаю, не следил -
Там вроде лайт база была и не лайт. По крайней мере бинарная. Не лайт платная конечно.
-
я имел в виду платную версию. По-моему, были отличия по точности csv и mmdb.
Возможно, я ошибаюсь -
Joined.
-
Ребят, привет!!!
Нам нужно события мобильной игры как-то классно складывать в кликхаус, до этого был postgres. Подскажите, пожалуйста, может быть, есть инструкции как правильно это делать?) Советы, идеи, молитвы?) Буду рада любым рекомендациям!!!
Пока смотрю в сторону Game Analytics как у них сделано. -
копать надо со стороны "какие данные и в каком виде мы их хотим видеть"
-
оттуда будут примерно ясны модели данных и их структура хранения и нормализации/денормализации
-
Они у нас в реляционке так и лежат, нам очень нравится! А нам надо чтобы в колоночной хорошо работало)) Соответсвенно все надо как-то в одну-две таблицы уместить...
-
ещё раз, вопрос же не в смене хранилища, вопрос "что вы сможете получить, заменив postgres на CH"
-
очевидно есть запросы которые не устраивают - по скорости выполнения или количеству получаемых данных/разрезов
-
поэтому я и написал - что копать надо сдругой стороны - что вы хотите получить на выходе
-
просто заменить хранилище - не принесёт ничего кроме боли
-
если очень нравица как лежат данные в реляционной БД - то зачем CH ?
-
Думаю, что как и у всех))) Объем не позволяет эффективно работать!
Мы уже перегоняем данные в CH, чтобы на выходе получать быстрые классные дашборды. Но хотим вот переделать структуру, чтобы она более подходила под особенности кликхауса и мы сразу туда писали)
Мне интересны кейсы, статьи на тему разработки хранилища CH под мобильное приложение. Интересно узнать как это делают, чтобы не наступать на грабли) Пока за референс беру game analytics -
лучше посетите доклад " Как перестать бояться и начать разрабатывать специализированные структуры данных" в субботу
-
О а трансляция есть? Я в Перми
-
скорее всего будет запись
-
Да кейс один все что можно разложить на колонки, сделать нужный индекс, во всех запросах использовать ограничение на временной промежуток
-
всем привет
надо ли стараться избегать Nested-структур в кх?
доки читал
Работоспособность запроса ALTER для элементов вложенных структур данных, является сильно ограниченной.
т.е. я не смогу добавить поля в такую структуру? -
ну ил может есть другой способ хранить структуру вида
Record
(
OneID UInt64
TwoId UInt64
Three Int8
) -
ну всегда можно хранить просто как строку с разделителем
-
вопрос к знатокам движков *GraphiteMergeTree :
одинаковые данные пишутся в 2 раблички с подневным партиционированием, разница тольк в том , что у первой нет правил прореживания(она реверсная), а у второй есть(однако все правила начинаются для данных старше 86400с), почему-то отличается длительность мерджей:
SELECT *
FROM system.part_log
WHERE (event_date = '2019-08-14') AND (event_type = 'MERGE_PARTS') AND (table = 'graphite_reverse')
LIMIT 2
┌─event_type──┬─event_date─┬──────────event_time─┬─duration_ms─┬─database─┬─table────────────┬─part_name──────────────┬─partition_id─┬────rows─┬─size_in_bytes─┬─merged_from──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┬─bytes_uncompressed─┬─read_rows─┬─read_bytes─┬─error─┬─exception─┐
│ MERGE_PARTS │ 2019-08-14 │ 2019-08-14 12:39:59 │ 266 │ default │ graphite_reverse │ 20190814_33822_33828_1 │ 20190814 │ 5278478 │ 72539384 │ ['20190814_33822_33822_0','20190814_33823_33823_0','20190814_33824_33824_0','20190814_33825_33825_0','20190814_33826_33826_0','20190814_33827_33827_0','20190814_33828_33828_0'] │ 738695288 │ 5598096 │ 773392881 │ 0 │ │
└─────────────┴────────────┴─────────────────────┴─────────────┴──────────┴──────────────────┴────────────────────────┴──────────────┴─────────┴───────────────┴──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┴────────────────────┴───────────┴────────────┴───────┴───────────┘
┌─event_type──┬─event_date─┬──────────event_time─┬─duration_ms─┬─database─┬─table────────────┬─part_name──────────────┬─partition_id─┬────rows─┬─size_in_bytes─┬─merged_from──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┬─bytes_uncompressed─┬─read_rows─┬─read_bytes─┬─error─┬─exception─┐
│ MERGE_PARTS │ 2019-08-14 │ 2019-08-14 12:39:52 │ 331 │ default │ graphite_reverse │ 20190814_33809_33815_1 │ 20190814 │ 5146174 │ 76391759 │ ['20190814_33809_33809_0','20190814_33810_33810_0','20190814_33811_33811_0','20190814_33812_33812_0','20190814_33813_33813_0','20190814_33814_33814_0','20190814_33815_33815_0'] │ 698014502 │ 5563696 │ 742912971 │ 0 │ │
└─────────────┴────────────┴─────────────────────┴─────────────┴──────────┴──────────────────┴────────────────────────┴──────────────┴─────────┴───────────────┴──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┴────────────────────┴───────────┴────────────┴───────┴───────────┘
2 rows in set. Elapsed: 0.023 sec.
SELECT *
FROM system.part_log
WHERE (event_date = '2019-08-14') AND (event_type = 'MERGE_PARTS') AND (table = 'graphite_day')
LIMIT 2
┌─event_type──┬─event_date─┬──────────event_time─┬─duration_ms─┬─database─┬─table────────┬─part_name──────────────┬─partition_id─┬────rows─┬─size_in_bytes─┬─merged_from─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┬─bytes_uncompressed─┬─read_rows─┬─read_bytes─┬─error─┬─exception─┐
│ MERGE_PARTS │ 2019-08-14 │ 2019-08-14 12:39:54 │ 3505 │ default │ graphite_day │ 20190814_33786_33791_1 │ 20190814 │ 5513342 │ 64783397 │ ['20190814_33786_33786_0','20190814_33787_33787_0','20190814_33788_33788_0','20190814_33789_33789_0','20190814_33790_33790_0','20190814_33791_33791_0'] │ 716894564 │ 6163611 │ 790141864 │ 0 │ │
│ MERGE_PARTS │ 2019-08-14 │ 2019-08-14 12:39:56 │ 3090 │ default │ graphite_day │ 20190814_33792_33797_1 │ 20190814 │ 5242510 │ 63088863 │ ['20190814_33792_33792_0','20190814_33793_33793_0','20190814_33794_33794_0','20190814_33795_33795_0','20190814_33796_33796_0' -
,'20190814_33797_33797_0'] │ 727016565 │ 5649303 │ 772574156 │ 0 │ │
└─────────────┴────────────┴─────────────────────┴─────────────┴──────────┴──────────────┴────────────────────────┴──────────────┴─────────┴───────────────┴─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┴────────────────────┴───────────┴────────────┴───────┴───────────┘ -
в 10+ раз при сходном числе строк
неужели регулярки парсятся даже если всегодняшней пратиции этого делать не надо ? -
Joined.
-
Привет всем!
Как создать виртуальную колонку во вью? -
Joined.
-
У меня тожде 18.14.18 и плевать он хотел на лимиты. При выставленном лимите на 30гб, при тяжелых запросах ест все 60 и его убивает OOM
-
Добрый день. И снова вопрос про mv и кафку. Имеем следующую схему:
Kafka -> mv A -> table A -> mv B -> table B
При явной вставке в table A (inser into table A), mv B реагирует и заполняет table B и все работает вроде как корректно, но когда данные в table A поступают из кафки, то в этом случае Table B не заполняется.
Table A - MergeTree - данные истории
Table B - ReplacingMergeTree - последние данные из Table A по определенным критериям
CH 19.11.3.11
Есть идеи? -
Кафка по-моему сломана все еще
-
-
кажется где то писали уже, матвью реагирует на INSERT, при этом материализация данных из матвью не считается INSERTом для других матвью
-
-
-
-
Backward Incompatible Change¶
Kafka still broken -
-
-
Вроде как сейчас работают над этой проблемой
-
-
на сколько я знаю нет, так как месяц назад тоже искал подобный функционал
-
Спасибо
-
Joined.
-
Joined.
-
Есть вроде только такое https://clickhouse.yandex/docs/ru/query_language/select/#sektsiia-with
-
Спасибо! Да я видел и использую WITH, но покак не могу придумать как получить именно то что я хочу. Получается получить только по одной строчки таблицы которую хотелось бы получить для следущей строчки нужно менять параметр в секции WITH
-
такое только через скрипт наверно реализуемо
-
Никто не использует графит движки на больших данных?
-
-
странно, у меня получилось то что вы хотите.
-
воспроизводите и в тикет, непонятно даже какой это мерж вертикальный или горизонтальный
-
все горизонтальные , памяьт больше половины свободно
-
agile. Строите дом, вышла херня, ломаете до фундамента, строите дом, вышла херня, ломаете
-
ладно ладно)))
-
постарайтесь сделать одну таблицу. Если нужны справочники -- делайте словари. Строк постарайтесь сделать как можно меньше, пихайте в массивы то что можно, что бы сдеалать pivot и сократить кол-во строк. Nested -- это сахар для массивов, все там alter-рится на раз два.
-
-
127.0.0.1:9092 -- localhost (accessible from kafka host only).
Where is your kafka installed? Is it a container too? On the same docker host? -
насколько эксперементальныая фича - "Дополнительные индексы"?
можно на неё расчитавать в проде? -
спасибо, мне тоже помогло
-
можно рассчитывать. У этой фичи довольно узкий круг применения. Я не смог использовать например.
Это не инверсные индексы совсем. Поэтому стоит поиграть и на спичках и понять нужна она вам вообще или нет. -
kafka installed on mac without docker but clickhouse installed using docker
-
try to use host.docker.internal instead of localhost
https://docs.docker.com/docker-for-mac/networking/#i-want-to-connect-from-a-container-to-a-service-on-the-host -
i will,,thank you
-
just tested with my mac. It's working.
I run at macos [ nc -l 2389 ]
and was able to connect from CH container and talk with the first nc using [ nc host.docker.internal 2389 ] -
CREATE TABLE queue (
timestamp UInt64,
level String,
message String
) ENGINE = Kafka('127.0.0.1:9092', 'test', 'group1', 'JSONEachRow');
but what did you write instead of 127.0.0.1:9092? -
just use host.docker.internal instead of 127.0.0.1
-
CREATE TABLE queue (
timestamp UInt64,
level String,
message String
) ENGINE = Kafka('host.docker.internal:9092', 'test', 'group1', 'JSONEachRow'); -
host.docker.internal -- is a special DNS record in docker mac that expose a special IP to make sort of bridge to the macOS
-
your have run kafka using docker or without??
-
[thrd:GroupCoordinator]: GroupCoordinator: Connect to ipv4#127.0.0.1:9092 failed: Connection refused (after 0ms in state CONNECT) the same error appear but i used ENGINE = Kafka('host.docker.internal:9092', 'test', 'group1', 'JSONEachRow');
-
check
docker -v
Docker version 18.09.2, build 6247962 -
docker version the same ,, but i have run kafka without docker ,,i have run CH using docker