- 01 May 2019 (82 messages)
-
-
Добрый день, насколько странная затея делать MV поверх distributed table, я так понял что MV срабатывает строго на insert, данных из таблицы не читает, тоесть если на нескольких машинах будет такая MV + distributed table, то на каждой из них в MV попадет только то что пытались записать в distributed table на этой ноде
-
Для упрощения представим что под distributed table - tables with null engine
-
Я выполняю на определённой ноде запрос insert from select который пишет в распределенную таблицу
-
Данные попадут только в MV на этой ноде ?
-
а ктонибудь графану с clickhouse дружил? уменя затык на создании графика в панели, чот не могу понять как обозначить значение на оси
-
У меня на одном из проектов дружили, могу спросить подробности. Но графики каждый раз перестраиваются очень долго. На мой взгляд дешевле отчёты генерировать по крону в бд типа постгри/мускуля/... а их уже в графану цеплять.
-
Дружится на раз рисуется быстро примеры есть. Стоит один раз разобраться
-
ну вот например https://i.tk-chel.ru/denisio/sharex/20190501_132949.png
-
не могу понять как объяснить графане что t это ось X всё таки
-
тоесть запрос выполняется, возвращает там несколько пару тыщ записей, с корректным значением unix time (как на play.grafana.org) но чот график не строица, хотя я добавил уже series одну, указал прямо как в примере
-
если переключить в histogram -оно показывает гистограмму https://i.tk-chel.ru/denisio/sharex/20190501_133120.png
-
но если вернуть обратно ось в time то пустой график
-
Включите отображение точек. Либо null as zero.
-
я уже всё что можно включил
-
если мышкой водить по графику то оно показывает неверную дату-время https://i.tk-chel.ru/denisio/sharex/20190501_133743.png
-
И, кстати, более-менее прилично в графане рисуется только то, что сделано на основе их шаблона с их же шагом.
-
Остальное - требует сильного допиливания
-
что наводит меня на мысль что гдето неверно парсица или интерпретируется дата-время точек
-
причем по всей площади графика эта дата-время и это значение...
-
и это последнее значение в наборе данных
-
1823
-
а если подсунуть сгенерёный графаной запрос в кх - там какие значения таймштампов будут?
-
Подозреваю, что, точно не в районе 1556700178
-
Можно каким нибудь запросом узнать тип partitionBy expression таблицы? Нужен workaround для https://github.com/yandex/ClickHouse/issues/4735system.parts inconsistant quoting · Issue #4735 · yandex/ClickHouse
18.16 address quoting problems in system.parts. See #3109 and #3652. After that change all the single values partition names are unquoted always (also for Strings / DateTimes etc), and it is incons...
-
В настройках панели прямо над текстом запроса есть же выбор «что считать временным рядом», не помогает?
-
я уже там выбрал
-
последняя версия?
-
да
-
именно такие
-
а диапазон дат в графане какой установлен?
-
-
я в запрос воткнул захардкоженый диапазон
-
А графана в курсе?
-
графане я поставил ваще 5 последних лет
-
тоесть заведомо больший
-
DT - точно таймштамп секунд от 1970 года, а не какой-нибудь счётчик?
-
уже ищу
-
Да просто SELECT DT с тем же условием и LIMIT 10
-
ща
-
графана генерит что-то типа:
SELECT (intDiv(toUInt32(datetime), 300) * 300) * 1000 as t, -
здесь 300 - это шаг в секундах
-
Подозреваю, что ей надо миллисекунды, судя по умножению на 1000
-
datetime тут - именно datetime кх
-
-
блядь и правда.
-
?
-
*1000
-
Ну... Вот!
-
видимо мало было кофе.
-
как я так затупил
-
Я, как человек ленивый, обычно просто правлю то, что подсовывает графана
-
Подскажите пожалуйста, можно удалить партицию, не делая предварительно detach?
-
alter table ... drop partition 'partname'
-
вроде работает
-
А из примеров выше используется плагин кх для графаны?
-
С датасорсом. Там же все просто делается через встроенные переменные и не надо мудрить с расчётом datetime
-
Я больше думал про rm ;) можно им удалять?
-
это выглядит как ожидаемое поведение в любой друго SQL DBMS, но мы же с вами знаем что КХ особенный. Это точно работает в КХ ?
-
Ну так и удаляет партицию с указанным именем. Место освобождается.
-
Да
-
Да. Проверить это занимает минуты 3. В чем затруднение?
В кх есть тестовый кластер из локалхоста можно на одной ноде тестить https://github.com/yandex/ClickHouse/issues/5142 -
Joined.
-
-
-
Просто пишу в две таблицы каждые 30с, в одну по ~8к записей, в другую по ~500 записей.
— Записи в query_log для большой таблицы показывают дикие тайминги (по 20сек), нулевые read_* и НЕнулевые result_*
— Записи в query_log для малой таблицы показывают до 10мс, НЕнулевые read_* и нулевые result_*
Куда можно покопать? -
Я не полностью уверен, но могу предположить, что это - информация о прочитанных строках и байтах данных, переданных клиентом для INSERT.
-
-
Причём это повторяется каждый insert
-
таблицы одинаковые distributed / replicated ?
-
Подскажите, плиз, а на 19.5.3.8 можно обновляться? там большой список известных проблем?
обновляться планируем с 18.14.15 -
советую протестить весь лайфсайкл долго и упорно
-
Без репликации
-
-
А есть воркэраунд для?
select arrayFilter( x -> x = 'a' , arL) from (select cast (['a','b'] as Array(LowCardinality(String))) arL)
Expression for function arrayFilter must return UInt8, found LowCardinality(UInt8).
18.14.18 (мне тупо идею протестить (я понимаю что пофикшено уже). -
Зря обновились… :(
2019.05.01 21:05:07.159247 [ 76 ] {cb6d722a-9140-4d1a-a875-2a34a1411af0} <Error> executeQuery: Code: 44, e.displayText() = DB::Exception: Cannot insert column samplingKey, because it is MATERIALIZED column. -
Кастить в массив обычных типов перед лямбдой
-
идея как раз в том что бы массив обычных строк конвертнуть в LC чтобы памяти меньше жрать,
я решил проверить идею а что будет если положить на диск LC и обломался.
Интересно можно ли сделать в памяти словарь LC на миллион элементов (у меня 2 млрд. String, а уникальных 1млн.).
Если сделать вручную на cityHash64, то памяти уходит в 3 раза меньше, чем с LC
create table memh (v String, h UInt64) Engine = Memory;
insert into memh
select v, cityHash64(v) h -
Можно класть на диск LC, но для лямбд надо кастить обратно в 18.14
-
-
-
привет
как можно выводить нормально графики в графану?
пытаюсь простенький график построить по запросу
SELECT
used_time,
$timeSeries as t
FROM $table
WHERE $timeFilter
group by t
order by t
вылезает ошибка
ERROR:Code: 215, e.displayText() = DB::Exception: Column used_time is not under aggregate functi
единственное что нагуглил - надо used_time запихнуть в group by, но из-за этого перестает работать отображение, показывает будто нет поинтов
что можно сделать? - 02 May 2019 (67 messages)
-
used_time это метрика? тогда должно быть sum(used_time) или avg(used_time) или max/min ...
-
спасибо большое, все заработало
-
А если у меня работают джойны в матвьюхах?
-
Ну как повезет. https://github.com/yandex/ClickHouse/issues/5142
Но тут вопрос еще осмысленности join в mv, если правая таблица маленькая то лучше сделать словарь ( словари работают в тысячи раз быстрее ) если таблица большая то join вообще нереально медленно и есть шанс сломать заливку при вылете по памяти. -
матвью на локальные таблицы (в ишью на distributed) . Вставка вроде идёт, но селект из матвью действительно помедленнее, чем на тот же набор данных в той же структуре, индексах и гранулированности, но на локальной таблице.
-
Есть способ узнать, на что именно тратится время в запросе? В логах executeQuery, потом через 10с Done processing query
-
Joined.
-
/report
-
!report
-
@valyala а есть какой-то способ в chproxy не кешировать на per-request-основе? в основном ведь запросы отправляются с уже установленных соединений, а соединения сами инициализируются с user/password, то есть несколько пользователей в одном приложении держать накладно, а иногда есть запросы, которые, например, делают выборку не count, а просто колонок, и такие кеширвоать уже не хотелось бы
-
привет
-
упс, no_cache
-
Только что узнал про chproxy, день прожит не зря
-
Переодически КН требуется огромное количество оперативкинство времени. При этом в него идут только вставки и больше никаких запросов. Если ему не дать достаточно памяти, то он не может смержить кусочки таблицы и копит их на диске.
Подскажите, пожалуйста, какой настройкой можно ограничить размер памяти, который требуется для мержа, чтобы КХ начал при больших мержах использовать диск? -
Привет 😁
-
По поводу гошного драйвера ещё актуально, или это что то старое ?
-
посмотрел документацию и https://github.com/yandex/ClickHouse/blob/master/dbms/src/Core/Settings.h , но не нашёл ничего подходящего по смыслу.ClickHouse/ClickHouse
ClickHouse is a free analytic DBMS for big data. Contribute to ClickHouse/ClickHouse development by creating an account on GitHub.
-
Joined.
-
длинные строки? Наверное max_block_size может влиять. Т.е. кх решает помержить 25 кусков в один, берет и читает из 25 кусков 25*65к
-
Ну само mv никак на селекты не влияет. Запросы выполняются к обычной таблице в которую mv запихнуло данные.
-
Нет ли, случайно, в данных, длинных строк?
-
длинные строки есть. в одной таблице 2кб, в другой ещё больше.
-
а максимальное количество кусков как ограничить?
-
Ну это небольшие, в 5 гб должен мерж помещаться.
-
А что в system.merges когда мерж идет?
-
у меня на машине, где было не очень много памяти и большие строки, тоже было такое
пришлось поменять схему данных и избавиться от строк -
-
странно то, что есть у меня одна "неправильная" таблица с очень большими строками и index_granularity=128 . Так там нет проблем с мержами почему-то.
У меня просто виртуалка с 2 гигами памяти. А настройки CХ дефолтные, и я пока не разобрался, как его настроить, чтобы он влезал в свободные полтора гига. Пока своп-файл добавил огромный, но мне это не нравится. Надо СХ настроить конечно. -
оно так быстро проходит, что ничего.
-
в логе ошибок вот такое было, пока своп не добавил:
0. /usr/bin/clickhouse-server(StackTrace::StackTrace()+0x16) [0x73fd046]
1. /usr/bin/clickhouse-server(DB::Exception::Exception(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int)+0x22) [0x377e942]
2. /usr/bin/clickhouse-server(DB::throwFromErrno(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int, int)+0x171) [0x73e4811]
3. /usr/bin/clickhouse-server(Allocator<false>::realloc(void*, unsigned long, unsigned long, unsigned long)+0x2bb) [0x73e129b]
4. /usr/bin/clickhouse-server() [0x6a27917]
5. /usr/bin/clickhouse-server(DB::ColumnVector<unsigned char>::insertRangeFrom(DB::IColumn const&, unsigned long, unsigned long)+0xbc) [0x6a3efcc]
6. /usr/bin/clickhouse-server(DB::ColumnArray::insertFrom(DB::IColumn const&, unsigned long)+0x36) [0x69e37b6]
7. /usr/bin/clickhouse-server(DB::ReplacingSortedBlockInputStream::insertRow(std::vector<COWPtr<DB::IColumn>::mutable_ptr<DB::IColumn>, std::allocator<COWPtr<DB::IColumn>::mutable_ptr<DB::IColumn> > >&, unsigned long&)+0x1b9) [0x6d539a9]
8. /usr/bin/clickhouse-server(DB::ReplacingSortedBlockInputStream::merge(std::vector<COWPtr<DB::IColumn>::mutable_ptr<DB::IColumn>, std::allocator<COWPtr<DB::IColumn>::mutable_ptr<DB::IColumn> > >&, std::priority_queue<DB::SortCursor, std::vector<DB::SortCursor, std::allocator<DB::SortCursor> >, std::less<DB::SortCursor> >&)+0x743) [0x6d54283]
9. /usr/bin/clickhouse-server(DB::ReplacingSortedBlockInputStream::readImpl()+0xeb) [0x6d551eb]
10. /usr/bin/clickhouse-server(DB::IBlockInputStream::read()+0x178) [0x677baf8]
11. /usr/bin/clickhouse-server(DB::MergeTreeDataMergerMutator::mergePartsToTemporaryPart(DB::FutureMergedMutatedPart const&, DB::MergeListEntry&, long, DB::DiskSpaceMonitor::Reservation*, bool)+0x1f16) [0x6b6c0b6]
12. /usr/bin/clickhouse-server(DB::StorageMergeTree::merge(bool, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool, bool, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*)+0x3c5) [0x6ab67d5]
13. /usr/bin/clickhouse-server(DB::StorageMergeTree::backgroundTask()+0x19f) [0x6ab8b8f]
14. /usr/bin/clickhouse-server(DB::BackgroundProcessingPool::threadFunction()+0x44e) [0x6b1d7fe]
15. /usr/bin/clickhouse-server() [0x6b1e279]
16. /usr/bin/clickhouse-server(ThreadPoolImpl<std::thread>::worker(std::_List_iterator<std::thread>)+0x1ab) [0x7402fdb]
17. /usr/bin/clickhouse-server() [0xb27522f]
18. /lib/x86_64-linux-gnu/libpthread.so.0(+0x76db) [0x7fea58e836db]
19. /lib/x86_64-linux-gnu/libc.so.6(clone+0x3f) [0x7fea5840288f]
(version 19.5.3.8 (official build)) -
Ну два гига это ни о чем. Там кеш марков по дефолту 5 гб кушает, надо все резать. Сколько клолонок в таблицах? Вертикальные мержи активируются если 11 колонок.
-
-
ну тогда можно попробовать vertical_merge_algorithm_min_columns_to_activate=5
-
-
-
-
Всем привет!
-
У нас КХ после неверной конфигурации репликации переименовал все парты в ignored_bla_bla
-
как их правильно обратно приаттачить к таблицам?
-
а они с реплики уже не скачались? А то потом дубликаты будут
-
все ноды были неверно сконфигурированы
-
все реплики ушли в детач
-
-
ОК, пасиб!
-
спасибо.
-
через ALTER TABLE это никак не поменять?
-
при чем тут table вообще? У вас что за проблема?
-
-
в чем проблема с прописать в конфиге кх этот параметр?
-
-
-
<?xml version="1.0"?>
<yandex>
<merge_tree>
<vertical_merge_algorithm_min_columns_to_activate>5</vertical_merge_algorithm_min_columns_to_activate>
</merge_tree>
</yandex>
+рестарт -
-
-
Joined.
-
большинство применяются без рестарта, но не merge_tree
-
-
-
ничего не надо делать, сразу и само применяется.
-
-
-
Где-то между Сан-Франциско и Сан-Хосе. Мы пока выбираем место.
-
-
Ну там все близко. В ближайшие пару недель определимся с местом. Месяц впереди
-
-
Скорее всего в южной части, ближе к Сан-Хосе
-
- 03 May 2019 (60 messages)
-
-
Привет. Может быть кто-то может подсказать про нюансы работы планировщика
Делаю запрос
SELECT
country,
count()
FROM clicks
GROUP BY country
Получаю
Code: 158. DB::Exception: Received from localhost:9000, 127.0.0.1. DB::Exception: Limit for rows to read exceeded: 540719824896 rows read (or to read), maximum: 30000000000.
- это ок, очевидно, что запрос таблицу лопатит, данных там много
SELECT
country,
count()
FROM clicks
WHERE 1 = 0
GROUP BY country
Ok.
0 rows in set. Elapsed: 0.523 sec.
- результат тоже ок. Я ожидал, что планировщик такой запрос вообще не будет отдавать на выполнение но куда тогда делись 523мс? -
Добрый день!
Подскажите, пожалуйста, какой драйвер Вы используете для работы с Clickhouse на python3? Или все используют http ? -
-
если воспроизводится и можете сделать семпл не зависящий от данных (например, берущий данные из system.numbers), прицепите сюда https://github.com/yandex/ClickHouse/issues/4242Weird query optimization · Issue #4242 · yandex/ClickHouse
Table example: DROP TABLE IF EXISTS constCondOptimization; CREATE TABLE constCondOptimization ( d Date DEFAULT today(), time DateTime DEFAULT now(), n Int64 ) ENGINE = MergeTree(d, (time, n), 1); I...
-
1. Оптимизации order by нет. Будут отсортированы все строки.
2. Clicks это distributed таблица? -
компресии сетевого трафмка? Она есть.
Pooling? Chproxy -
-
и датацентры разбросаны по планете?
-
-
set send_logs_level='trace'
будет видно что происходит -
и версия кх?
-
например, чтобы снимать тонны логов с балансира, влияя меньше на сеть при экспорте в кликхаус
-
18.14.19
-
Ничего не понял. Компресия трафика есть. Какой протокол/api используется?
-
GitHub - ClickHouse/clickhouse-go: Golang driver for ClickHouse
Golang driver for ClickHouse. Contribute to ClickHouse/clickhouse-go development by creating an account on GitHub.
-
-
Там косяк был, сжатие не по умолчанию, а вообще включенно было из за захардкоженого значения. Зато потестили что работает )
-
-
-
-
можете по UDP их гнать, напишите воркер который их будет принимать и в КХ пачками укладывать
-
-
`2019.05.03 12:16:41.717247 [ 24 ] {cfcefc07-82b5-418b-8f5e-e8e51719f702} <Error> executeQuery: Code: 241, e.displayText() = DB::Exception: Memory limit (for query) exceeded: would use 128.00 TiB (attemp
t to allocate chunk of 140737488355328 bytes), maximum: 9.31 GiB (version 19.5.3.1) (from 127.0.0.1:58126) (in query: show tables), Stack trace:` - интересно, а что это такое? -
Здраствуйте. Хотел уточнить по внешнему словарю Mysql. Реально ли сделать так чтобы он запрашивал из многомиллионой таблицы, только те которые изменились, а не все сразу? Я читал про invalidate_query, но выглядит так что он просто не будет обновлять записи в словаре, но запрос будет как всегда
-
Вроде бы была возможность проверки по updated полю
-
И выкачивания только изменившихся, соответственно
-
-
update_field нужно указать в конфиге
-
Чёт доку щас порыл, не нашёл, кстати
-
-
-
-
А он и так на диске их выполняет)))
-
Это превышено потребление памяти по умолчанию. Смотрите настройку max_memory_usage
-
У меня запрос, который не помещается в памяти. Хочу сделать в external, но max_bytes_before_external_group_by не очень помогает =/
-
В запросе делается groupArray… и там в массиве для многих ключей группировки очень много значений 10000+. А потом я разворачиваю это в пары
arrayJoin(arrayMap(i -> [stages[i], stages[(i + 1)]], arrayEnumerate(arraySlice(stages, 1, -1)))) AS pairs
Всё это на 1.2 Млрдах строк.. Так что ClickHouse вываливается в OOM, но посчитать всё же хочется.
Если принудительно ограничить цепочки stages определённой длиной, например, 1000, то более менее отрабатывает -
ага, для show tables - никак без 128Tb памяти такой запрос, конечно, не выполнить
-
о, спасибо, попробую
-
in query: show tables. Не заметил, сорри
-
SELECT count() FROM system.tables
-
-
max_bytes_before_external_sort max_bytes_before_external_group_by
https://clickhouse.yandex/docs/en/query_language/select/#order-by-clause -
Спасибо. max_bytes_before_external_sort покручу
-
ну баг скорее всего в вычислялке
-
https://github.com/yandex/ClickHouse/issues/5105#issuecomment-486470614
это из-за arrayEnumerate и скорее всего можно без него переписать -
create table X(stages Array(String)) engine = Memory;
insert into X select arrayMap(x->toString (x) , range(1000)) from numbers(1000);
select arrayJoin(arrayMap(i -> [stages[i], stages[(i + 1)]], arrayEnumerate(arraySlice(stages, 1, -1)))) AS pairs
from X limit 3 Format Null
Peak memory usage (for query): 20.06 GiB.
select arrayJoin(arrayMap( x, y -> [x,y], arrayPopBack(stages), arrayPopFront(stages))) as pairs
from X limit 3 Format Null
Peak memory usage (for query): 57.02 MiB. -
Благодарю
-
а да, еще
Elapsed: 4.752 sec.
vs
Elapsed: 0.021 sec. -
Joined.
-
-
Joined.
-
-
любая
-
-
Joined.
-
-
Подскажите, а chproxy нужен только когда несколько серверов, для балансировки нагрузки? А когда 1 сервер он ни к чему
-
вроде как для https
-
Joined.
- 04 May 2019 (16 messages)
-
-
Что значит изменить партиции? Изменить данные или схему таблицы?
-
Нет партиций нет данных
-
-
-
-
Ну сделайте по месяцам и перелейте данные
-
Зачем было изначально менять дефолт то
-
Joined.
-
Joined.
-
Всем привет!
Кто-то работал с https://github.com/the-tinderbox/ClickhouseBuilder ?
никак не могу понять как сделать join без использования using, обычными условиями через ON
Поделитесь опытом кто знает?GitHub - the-tinderbox/ClickhouseBuilder: Fluent queries builder for Clickhouse. Also has integration with Laravel / Lumen.Fluent queries builder for Clickhouse. Also has integration with Laravel / Lumen. - GitHub - the-tinderbox/ClickhouseBuilder: Fluent queries builder for Clickhouse. Also has integration with Larave...
-
Привет. Никак) Пока ещё не реализовали
-
-
Понял, спасибо
-
-
Joined.
- 05 May 2019 (18 messages)
-
Через R из КХ доступно почти все. Только ставьте серверный вариант чтоб рядом с КХ стоял. Работает отлично.
-
Joined.
-
@den_crane тут спамец
-
спасибо. Попробую
-
немного поэкспериментировали с моделями catboost в ch.
-
кликхаус может вернуть сразу несколько значений?
например, я хочу получить сколько всего метрик было отправлено в какой то день и сколько метрик определенного типа было отправлено в этот день
пытаюсь решить через вложенный запрос, но кх ругается на то что вложенный запрос вернул больше 1 строки -
Дай пример
-
ну вот например
синее - всего
первый тип - черный
второй тип - зеленый
вот такую штуку я могу в 1 запрос получить? -
Да, group by + with totals
-
вот такая ошибка вылезает, если я пытаюсь впихнуть еще один запрос с группировкой по дням
-
Через countIf ещё можно, если group by не подходит
-
Неплохо бы запрос увидеть
-
спасибо, подошло
-
От чего может быть такая ошибка? https://pastebin.com/zv1NySzT
-
2019.05.05 18:16:25.127737 [ 36 ] {} <Error> BaseDaemon: (version 19.6.1.251) (from thread 30) Received signal Segmentation fault (11).
2019.05.05 18:16:25.127755 [ 36 ] {} <Error> BaseDaemon: Address: 0x10
2019.05.05 18:16:25.127761 [ 36 ] {} <Error> BaseDaemon: Access: read.
2019.05.05 18:16:25.127767 [ 36 ] {} <Error> BaseDaemon: Address not mapped to object.
...... -
Joined.
-
баньте сразу, бот рекламный
-
> from thread 30
в логе надо найти что делал тред [ 30 ] - 06 May 2019 (176 messages)
-
Joined.
-
-
Joined.
-
-
Нельзя. Можно лишь хранить даты либо год отдельно, либо в виде числа timestamp-а
-
-
Добрый день!
Я хочу держать в Clickhouse события одним из атрибутов которых является tags множество String значений. Для этих целей пытаюсь использовать тип Array(String). Необходимо уметь делать запросы вида where has(tags, '<tag>'). Но в этом случае время выполнения запроса увеличивается в сотни раз. В другой DB подобные вещи делаются с помощь multivalue dimensions, и время запроса наоборот уменьшается.
Подскажите, пожалуйста, можно ли средставими Clickhouse улучшить производительность запросов такого типа? -
arrayJoin() используй, мне помогало
-
Храните теги отдельно, а к событиям пишите хэш от них, сделайте ключ (хэш, время), сначала выбирайте хэш по тегам, а потом уже этот хэш в запрос докидывать
-
Дело в том что есть и другие атрибуты по которым нужно уметь фильтровать. И не во всех запросах нужно фильтровать по tags.
-
Тогда надо смтреть что и как у вас лежит и какое, обычно, распределение по данным
-
Покажите сколько в среднем значений в массиве строк. Может у вас там милионые массивы. И в логе КХ есть что-то типа плана выполнения - тоже полезно
-
максимум 60 значений, в среднем 30
-
Тогда странно. Попробуйте ещё array Count - может в оптимизации has что-то сломано
-
спасибо, попробую
-
Joined.
-
событие выглядит так дата, id пользователя, домен, tags. Первичный ключ id пользователя. Tags содержит в среднем 30 строковых значений. Таких событий несколько милиардов. У каждого события есть несколько метрик, которые нужно складывать при группировке
-
может теги по колонкам разбить? если их максимальное кол-во ограничено
-
различных значений тэгов может быть до 2000.
-
Запрос тормозит по тому, что ваш первичный ключ по id, и индекс тоже. А запрос - по полю не из индекса. Потому и тормозит
-
У вас, скорее всего, получется что колонка весит достаточно много и поднимать ее с диска накладно
select name, formatReadableSize(data) as size from (select name, sum(data_compressed_bytes) as data from system.columns where table = 'YOUR_TABLE_NAME' group by name order by data desc ) -
ну, можно еще их сделать enum-ами, переведя в int
но если различных значений 2000, а тегов максимум 60, то у вас максимум 60 колонок, в которые можно теги всегда все записать
tag_1, tag_2 ... tag_60 ? -
максимум 60 это не из-за ограничений, а только по статистике
-
Да, я понимаю. Будет ли эффективен ключ для запросов с where has, если в него добавить поле Array?
-
Кардинальность у них какая, какое количество уникальных значений к общему количеству строк?
-
В свежих версиях добавили вторичные индексы, попробуйте добавить для поля tags
-
Не уверен что правильно понял вопрос
В таблице несколько милиардов событий
У каждого события несколько десятков тегов. Различных тегов по всей таблице пара тысяч. -
спасибо, попробую
-
-
кажется что количество таких комбинаций очень большое
-
строка длиной 2000 из 0 и 1 ?
-
как в этом случае делать эффективно фильтрацию содержит событие определенные тэги или нет?
-
-
ну, вообще, если вы пишете У каждого события несколько десятков тегов. то сделайте с запасом 150 колонок...
или есть вероятность что у вас могут прийти все 2000 тегов? -
Для начала, сколько комбинаций тегов вы найдете по определенному условию?
-
да, кстати, если именно проверка на определенные теги, то функции для строк есть, в тч по regexp
-
Такое крайне маловероятно. Наверное, можно было бы жестко ограничить, что у каждого события может быть не больше пары сотен тегов. Но с течением времени одни теги могут уходить из системы, и появляться новые
-
Не совсем понял, я же ищу не комбинации тегов, а события содержащие определенные теги.
(кажется это был коммент к предложению если бы нужно было искать не вхождению определенных тегов, а по полному соотвествию) -
ОК. У вас есть 1кк событий, у каждого есть теги. Допустим уникальных комбинаций ([A, B], [A, C]...) ~ 1000. Вы ищите все события с тегом A, сколько из этой 100 комбинаций вы найдете? Например 20, значит вам нужно вытащить события в котоорых есть полное соответствие этих комбинаций. Теги (Array(String)) штука тяжелая и уникальные комбинации можно хранить в виде хэша, это может сильно помочь, но, нужно будет делать 2-а запроса, один для поиска комбинаций, второй для выборки событий и вот тут уже нужно смотреть насколько будет эффективен первый и, возможно, искать это даже не в КХ, а в КХ только фильтровать по хэшам
-
спасибо, я понял вашу идею, попробую испытать на своих данных.
-
всем спасибо за идеи, вынужден отойти от компа
-
-
Joined.
-
-
create table user_likes (
user_id UInt32,
item_id UInt32,
liked UInt8,
year UInt16,
likeDate Date
)
engine MergeTree(likeDate, (year, likeDate), 8192)
INSERT INTO user_likes (user_id,item_id,liked) VALUES
(1,1,1),(1,2,1),(1,3,1),(1,4,0),(1,5,0),
(2,1,1),(2,2,1),(2,3,1),(2,4,1),(2,5,1),
(3,1,1),(3,2,0),(3,3,0),(3,4,0),(3,5,0),
(4,1,1),(4,2,1),(4,3,1),(4,4,0),(4,5,0),
(5,1,0),(5,2,0),(5,3,0),(5,4,1),(5,5,1),
(6,1,1),(6,2,1),(6,3,1),(6,5,0);
помогите составить запрос, чтобы получить как в таблице, это что-то типа коллаборативной фильтрации user-based -
Joined.
-
Коллеги, добрый день!
Подскажите, как именно работает параметр max_rows_to_group_by.
Пытаюсь с его помощью + group_by_overflow_mode='any' ограничить количество данных в выдаче.
В доке про max_rows_to_group_by написано: "Максимальное количество уникальных ключей, получаемых в процессе агрегации. Позволяет ограничить потребление оперативки при агрегации." и выглядит так, что указав значение 100, то и в результате я буду получать примерно столько записей, но их приходит несколько тысяч. -
Joined.
-
SELECT last_access
FROM ****
WHERE ****
ORDER BY last_access ASC
┌─────────last_access─┐
│ 2018-01-18 14:46:16 │
│ 2018-12-12 02:03:46 │
│ 2019-04-10 13:37:40 │
│ 2019-04-21 15:42:16 │
│ 1970-01-01 06:28:16 │
└─────────────────────┘ -
что с сортировкой такое?
-
Доброго дня, коллеги.
Подскажите, кто сталкивался с финальной версией оптимизации таблицы, как можно этот процесс разделить на несколько потоков или как-то иным способом увеличить скорость полной оптимизации. -
Можно делать OPTIMIZE FINAL по партициям. Суммарно это дольше. но позволяет "размазать" нагрузку
-
Отличная идея, спасибо. Я сам до этого как-то не додумался 😉
-
Надо смотреть что там в toInt32 скорее всего так 2106 год показывается.
-
Увеличивается в сотни раз по сравнению с чем? Возможно where и prewhere надо вручную выбрать.
-
По сравнению с запросом без has
-
А что в клиенте Elapsed: xxx. Processed xxx в первом и во втором случае, можно всю строчку целиком
-
а если вручную все предикаты кроме has в prewhere а has в where?
-
Про prewhere не знал. Спасибо. Попробую
-
Посмотрю. Сейчас не помню
-
Joined.
-
┌─────────last_access─┬─toInt64(last_access)─┐
│ 2018-01-18 14:46:16 │ 1516275976 │
│ 2018-12-12 02:03:46 │ 1544569426 │
│ 2019-04-10 13:37:40 │ 1554892660 │
│ 2019-04-21 15:42:16 │ 1555850536 │
│ 1970-01-01 06:28:16 │ 4294956496 │
└─────────────────────┴──────────────────────┘ -
бабка переполнилась
-
бабка?)
-
т.е. это реально 10799 секунд, где-то с отрицательными числами что-то не так
-
toDateTime(1): 1970-01-01 03:00:01
toDateTime(0): 0000-00-00 00:00:00
toDateTime(-1): 1970-01-01 09:28:15
toDateTime(-10799): 1970-01-01 06:28:17
toDateTime(-10800): 1970-01-01 06:28:16
toDateTime(-100000): 2106-02-06 05:41:36 -
магия таймзон🤔
-
-
в непоследовательности
-
-
спасибо)
-
я лицензированный телепат 8-го уровня, но не осилил
>что-то типа коллаборативной фильтрации user-based -
видимо берется первый юзер, от него берется вектор [1,1,1,0,0], дальше берутся такие же вектора от других юзеров, и считается три свертки.
-
к сожалению prewhere никак не повлиял
-
20 rows in set. Elapsed: 0.514 sec. Processed 31.65 million rows, 2.34 GB (61.61 million rows/s., 4.56 GB/s.)
20 rows in set. Elapsed: 248.682 sec. Processed 31.65 million rows, 82.15 GB (127.25 thousand rows/s., 330.34 MB/s.) -
Программисты на GO, подскажите пжл, если получать данные из КХ уже в json (select .... format JSON)
то как обойтись без row.scan и сразу получить json в виде одной строки из запроса, что бы его дальше отправить на клиент? -
http.Client.Get и пайпнуть response.Body через io,Copy, но с таким же успехом можно в КХ сходить
-
У вас колонка с тегами весит неприлично много, с этим придется что-то делать
-
20 rows in set. Elapsed: 0.514 sec. Processed 31.65 million rows, 2.34 GB (61.61 million rows/s., 4.56 GB/s.)
20 rows in set. Elapsed: 248.682 sec. Processed 31.65 million rows, 82.15 GB (127.25 thousand rows/s., 330.34 MB/s.)
странно, надо смотреть план.
А если where tag вынести во внешний запрос что тогда?
select * from(
select tag ..... from ..... prewhere ....
) where tag has
т.е. есть такая штука порядок вычисления предикатов, и это моя постоянная боль с ораклом и mysql, как добится сдвигания тяжелых предикатов в конец. -
Можете попробовать интовый массив UInt16, будет побыстрее. Ну и сделать словарь, например, чтобы по инту вытягивать название tags.
-
Коллеги, очень нужен ваш совет по этому вопросу.
-
-
set max_rows_to_group_by = 10000
select number from numbers(1000000) group by number format Null;
65536 rows in set.
вы по-моему пытаетесь лечить головную боль шуруповертом.
set max_rows_to_group_by = 100000
select number from numbers(1000000) group by number format Null;
131072 rows in set. -
и где тут связь между 10000 и 65536?
-
вам точно это надо?
set max_rows_to_group_by = 100
set max_block_size=100
200 rows in set. -
Есть жирный запрос с множественными группировками, который съедает пару десятков ГБ оперативы. Чтобы избежать сильной нагрузки на КХ выбор пал на солюшен с max_rows_to_group_by + group_by_overflow_mode='any', однако количество возвращаемых строк никак не коррелирует со значением max_rows_to_group_by, хотя хотелось бы
Если есть другие способы решить эту задачи, то велкам -
результат неверный при group_by_overflow_mode='any', какая разница сколько там строк возвращается.
https://clickhouse.yandex/docs/ru/query_language/select/#select-group-by-in-external-memory -
т.е. бага на стороне КХ, раз результат неверный?
-
при чем тут бага, у вас в результате запроса должно вернуться один набор, а вы стреляете в ногу c group_by_overflow_mode и говорите верни что-нибудь, любые 100, ну возвращается вам любых 65тыс, потому что проверка делается на другом уровне пайплайна, какая разница-то, 100 и 65536.
-
Тогда вопрос, почему оба эти параметра в доке стоят рядом и логично их использовать вместе. А тут про разные уровни выясняется🤔
-
мммм. КХ обрабатывает запрос блоками, max_block_size задает размер блока, ну проверяется max_rows_to_group_by где-то наверху ну какая разница-то? Может вы семплинг хотите из говна и палок сделать? Так он есть уже встроенный.
-
Спасибо что попробовали)
-
Попробую на stackoverflow
-
Разницы бы не было, если бы все работало как заявлено в доке :)
-
ок исправлю, напишу что max_rows_to_group_by это target
-
Всем привет. ClickHouse умеет преобразовывать такой формат даты: 2019-05-06T10:17:45.749Z
в обычный DateTime? -
если нет, то как сделать чтобы смог?)
-
при вставке или при селекте? date_time_input_format=best_effort / parseDateTimeBestEffort
-
это в материализед вью, когда данные селектятся из таблицы кафки
-
parseDateTimeBestEffort
-
спасибо
-
Господа, доброго дня. Подскажите, пожалуйста, ответ возможно на очевидный или уже ни раз разжеванный вопрос. Только изучаю CH и поглядываю на Kafka. Может ли случиться так, что при чтении напрямую в CH из Kafka средствами materialized view, первый будет не успевать разгребать очередь из второго. И если да, то как это решается не выходя за пределы этой связки?
-
взять 2,3,8 сервера КХ и натравить на один топик кафки.
-
Joined.
-
А несколько materialized view создать на одну и ту же очередь в одну и ту же таблицу нельзя или это абсурдно?
-
узкое место это не materialized view , узким местом станет вставка в таблицу (мержи (дисковый i/o)). Т.е. берите топовые NVME, делайте из них raid0 и кафка станет узким местом.
-
Вас понял, спасибо большое!
-
Привет сообщество, все же немного не хватает мне документации и окружения, что бы понять одну ситуацию.
1) Использую API метрики для получения хитов (Logs API), хранятся в табличке hits_all
2) Есть табличка page_all и в ней урлы и собственно нужные мне колонки
Вопрос
Как правильней организовать логику получения кол-ва хитов в hits_all (за месяц/неделю) по урлу из page_all (используя like(URL, concat(URL, %)) при условии что в page_all на запрос может быть ~2к урлов и каждый нужно проверить в hits_all
Как можно оптимизировать эту ситуацию?
Что есть сейчас
Вполне рабочее решение, но выполняется ~20-30минут на доастаточно мощной ВМ. Как и описал в в поросе. Фильтруется по параметрам page_all, берется каждый урл и считается кол-во совпадений в hits_all. -
сделать нормальный числовой(хеш) ключ от урла, положить его в hits_all, page_all сделать словарем, и посчитать одним запросом по hits_all, беря нужные мне колонки из словаря.
-
Мне ключ добавлять при заполнении таблицы из metrics api?
-
если возможно, тут как бы непонятно для чего еще используется hits_all, поэтому трудно сказать. Может вообще все возможно посчитать априори на этапе ETL и положить готовые результы в ексель.
-
-
Вообще из hits_all строится несколько отчетов. Количество просмотров (включая частичные совпадения), источники,
-
Ведь в числовом хэше строка example.com/path и example.com/path/?ref и sub.example.com/path/ - будут сильно разными, а еще бывают варианты yandex.ru/turbo/url=example.com/path и это ведь жесть. в цифрах будет хаос.
-
ну естественно нужна очистка
-
А очистка лишит возможность разделить эти источники
-
источник очистить в отдельное поле, и возможно тоже хешем, тоже в отдельный словарь
-
А как думаешь, если я буду с помощью либы https://github.com/yndx-metrika/logs_api_integration получать логи метрики (посуточно) и после получения перебирать лог, разбирать/считать урлы и складывать в одельную табличку (Merge) паралельно очищая лог метрикиGitHub - yndx-metrika/logs_api_integration: Script for integration with Logs API
Script for integration with Logs API. Contribute to yndx-metrika/logs_api_integration development by creating an account on GitHub.
-
Тем самым я получу максимум 365 строк с урлами в год и по ней уже словарем буду проходить, суммировать - здесь есть профит?
-
28 275 981 - до группировки
1 382 108 - после группировки (это 5% от сырых данных)
а если это делать еще и ежедневно, то объем сократится с ~1 000 000 до ~50 000 строк -
Правильно мыслю?
-
вам здесь наверно стоит начать с разбивки урла на разные части, домен в один столбец, путь в другой, параметры в десятый, потом смотреть гранулярность, и что-то загонять в словари.
@den_crane наверно, это вам предложил
Алексей в одном из докладов тоже об этом говорил, что урл стоит разбивать -
Понял, спасибо. Пойду разбивать урл и переписывать все с Log в Merge
-
-
Доклад будет? )
-
-
блин надо было ехать на кипр на эту конфу
-
Расскажите в 2 словах зачем использовать материализованную вьюху и в чем ее преимущество перед таблицей
-
Чтобы данные перекидывать из одной таблицы в другую, если у тебя есть кафка, то без вьюхи не Обойдешься
И сама вьюха данные не хранит, а лишь перекидывает -
чтобы предвычислить данные (уменьшив кол-во строк) и положить их в другом порядке
https://gist.github.com/den-crane/6eff375752a236a456e1b3dc2ca7db62 -
все вышеперечисленное, а еще как insert trigger для аггрегации
-
Так я же могу и в таблицу предагрегировать?
-
с mat view оно "само" будет аггрегироваться при вставке в src таблицу
-
можете, а теперь представьте что вам предагрегировать в 8 разных агрегатов, сгруппировав по разным дименшинам и еще и факты оставить в изначльном виде.
-
Так вьюха занимает место как таблица? Изменяет агрегированные данные при вставке в таблицу?
-
ну у меня аргегаты занимают примерно в тысячу раз / 10 тыс. меньше места чем оригинальная таблица, а источнике типа миллиард строк в день, 400 полей, в агрегате 10 полей, миллион строк, естественно что запросы к агрегатам работают в сотни раз быстрее.
-
Так если таблица большая и много строк вставляется, то сколько ж ресурсов должно тратить для агрегации на лету?
-
миллиард в день..
это что за проект такой обслуживается? -
Яндекс.Метрика поди :)
-
это копейки для кликстримов, начальный уровень
-
ну это понятно
но что за проект?
яндекс метрика? -
не знаю что такое метрика, обычная контора с оптимизацией трафика в кали (если очень хочется найти название, то есть ссылка из моего гитхаба)
-
У вьюхи получается можно поменять индексированный столбец?
-
и партиционирование и сортировку, впрочем сортировка задается исходя из агрегации (обычно)
-
И все же чем будет отличаться создание таблицы в AggregatingMergeTree от view? кроме того что необходимо хранить изначальную таблицу фактов?
-
3 rows in set. Elapsed: 3.265 sec. Processed 300.00 million rows
VS
3 rows in set. Elapsed: 0.024 sec.
https://gist.github.com/den-crane/32cac4f069f4227b35ab86553bbc649b -
Вы там сравниваете с MergeTree, а я вопрос задал про AggregatingMergeTree . Или на этой схеме нельзя создавать таблицы?
-
вы явно что-то не то понимаете, MV хранит данные в обычной MergeTree(AggregatingMergeTree) таблице (ее можно создать явно/вручную). Просто MV это хреновина(триггер на инсерт), которая немного уменьшает кол-во кода который надо написать.
-
т.е. я могу взять и написать в дополнение к тому гисту
CREATE MATERIALIZED VIEW mvz1 ENGINE = AggregatingMergeTree order by (d) settings index_granularity = 8
as select d, uniqState(u) as us from z group by d;
и получу данные в новом агрегате (по дням) -
Вы сейчас описали обычную вьюху например SQL Server. А как я понимаю в ch она реально существует, как и таблица, только обновляется при вставке в таблицу.
-
MV это такой триггер на инсерт (с неудачным названием), который чем-то издалека похож на materialed view из другх субд (оракл).
-
Почти во всех СУБД этого класса существуют и вьюхи, и матвьюхи. Первая — это шорткат для селекта, вторая — это физическая таблица, которая обновляется по триггеру или по расписанию
-
Спасибо за пояснения!
-
Просто я использую sql server и там нет такого понятия
-
гугль говорит что они в msql называются indexed-views
-
-
Ну скорее всего, они больше всего на это похожи
-
Кажется вам должен помочь фичер под названием roaring bitmap, появившийся в 19.4. Нужно перемаповать эти строки в числа, а потом на них сделать roaring bitmap. После чего всякие вхождения элемента или пересечения /объединения должны сделаться очень дешёвыми операциями.
-
Added bitmap function feature with roaring bitmap by andyyzh · Pull Request #4207 · yandex/ClickHouse
I hereby agree to the terms of the CLA available at: https://yandex.ru/legal/cla/?lang=en Category (leave one): New Feature Short description: Added some Bitmap functions with Roaring bitmaps. R...
-
Сначала маппинг строк в числа (лучше autoincrement с 1). Потом из таблицы числовых тэгов делаете bitmapBuild. Потом можно сделать битмап с искомыми элементами и считать размер пересечения. Довольно замысловато, и фичер пока сильно экспериментальный. Но по идее как раз ваш кейс хорошо в него должен укладываться.
-
Подскажите тогда. У меня есть таблица в которой есть несколько столбцов. Поиск происходит по различным столбцам, и для повышения производительности мне приходится делать несколько одинаковых таблиц с разными индексами. Что не очень удобно. Может есть смысл не заливать данные в несколько таблиц, а сделать одну таблицу и к ней создать несколько materialized view? Какой подход будет правильнее?
-
Матвью в такую же таблицу с другим индексом - нормальное решение. Так делают, все должно работать.
-
в принципе особой разницы нет (я пользуюсь и тем и этим подходом одновременно), но MV позволит сделать один insert.
-
А то когда матвью заносит в себя данные (временные интервалы) где-то настраиваются или оно само работает как триггер в момент появления новых данных?
-
То есть нельзя будет дропнуть секцию?
-
таблица получает буфер с новыми строками в момент инсерта, и пушит этот буфер во все свои MV.
Таблица может вообще не хранить данные (engine=Null). Все независимо, можете дропать, удалять, апдейтить по отдельности, таблица и таблицы хранящие данные MV никак не связаны. MV никогда не читает из таблицы (только в момент populate) -
OK. Спасибо, думаю так должна как минимум снизиться нагрузка на сеть, ведь не придется передавать дубликаты данных
-
создавайте таблицу явно (более того можете взять уже существующую) и создавайте MV to...
https://gist.github.com/den-crane/f7382cd4f1f859ff6ac46afe7dc9925a
так проще изменять вью (через drop /create) -
Если честно не уловил идею. Чем этот пример отличается от простого создание матвьюхи над таблицей? Зачем таблица temp и store?
-
это пример более широкий, идея вот в чем
create table mv_z_store(a date, max_b AggregateFunction(MAX,Int64)) ENGINE = AggregatingMergeTree Partition by toYYYYMM(a) order by a;
create MATERIALIZED VIEW mv_z to mv_z_store AS SELECT a, maxState(b) AS max_b FROM some_fact_table GROUP BY a; -
это позволяет обращаться к таблице которая хранит данные по нормальному имени mv_z_store, вместо .inner.mv_z
-
плюс это позволяет проще делать alter
-
например добавлять поля
-
делаем drop mv_z, alter mv_z_store , create mv_z с новым запросом
-
Видно я еще не столкнулся с ограничениями матвьюх, чтобы уловить преимущества
-
Create матвью to таблица создает вьюху и заполняет такими же данными эту таблицу, я правильно понимаю?
- 07 May 2019 (125 messages)
-
Доброе утро. Как кликхаус работает в докере и можно ли его использовать в продакшине? У нас девопсы предпочитают разворачивать новый сервер с докером и запускать там что угодно. Данные монтируются или на внешний раздел или в системе. Подходит официальный образ для прода и как часто он обновляется?
-
Joined.
-
Порядка двух лет в докере. Только что обновлялся, базы с реплицируемыми таблицами, простоя не было.
-
Официальный образ? Спасибо за ответ :) Внушает надежду.
-
У нас есть такой сервер. Смысла в докере нет никакого, больше неудобств, но оно работает.
-
У нас работает на проде в докере. Образ официальный. С нового года где-то. Полёт нормальный.
-
Подскажите. Можно ли сделать хэш партиции? Например, чтобы было 32 партиции
-
В оракле есть такая штука. Может и в КХ есть
-
Спасибо всем. Буду пробовать.
-
Смысл такой , что призодят запросы со стоковыми айди пользователя в условии where. Таблица большая. Надо партиции сделать , но что бы в одну партиции было много пользователей
-
Можно, в PARTITION BY пишите условие
пример
CREATE TABLE test_part_hash
(
`date` Date,
`user_id` Int32
)
ENGINE = MergeTree
PARTITION BY (user_id % 32, date) -
Спасибо. А как проверить , что он подхватывает нужную партиции в запросе ? В оракле я бы план запроса построил , а в КХ как ?
-
insert into test_part_hash select today(), number from numbers(2000);
SET send_logs_level = 'trace'
SELECT count() FROM test_part_hash WHERE user_id = 8
Будет видно в Selected parts -
Спасибо
-
Пример не точный, нужно не user_id в PARTITION BY, a hash_id от user_id и его же в запрос SELECT * FROM t WHERE user_id = 42 AND hash_id = user_id %32
-
-
Он и так походе, что читает только когда одну .
-
В твоём первом варианте. У меня старый Кх. В нем нет этой настройки с логом, но в логе видно, что при условии where = нету union
-
А если сделать , например +0 = значение , то union по всем партам есть. Колонка +0 = значение.
-
Круть ! Спасибо
-
Вот так правильно
CREATE TABLE test_part_hash
(
date Date
, user_id Int32
, hash_id Int32 MATERIALIZED (user_id % 32)
)
ENGINE = MergeTree
PARTITION BY (hash_id, date)
ORDER BY (hash_id)
insert into test_part_hash select today(), number from numbers(1000000);
SELECT count() FROM test_part_hash WHERE user_id = 8 AND hash_id = 8 % 32 -
У меня первый вариант тоже работает !
-
Добрый день, после некорректного выключения базы получил такую ошибку:
2019.05.07 11:30:37.660141 [ 1 ] {} <Error> Application: DB::Exception: Cannot create table from metadata file /var/lib/clickhouse/metadata/ххх/table_yyy.sql, error: Coordination::Exception: All connection tries failed while connecting to ZooKeeper. Addresses: xxx.xxx.xxx.xxx:2181, xxx.xxx.xxx.xxx:2181, xxx.xxx.xxx.xxx:2181
- sudo -u flags/force_restore_data
- zk_client: create /clickhouse/tables/table_yyy/replicas/my_host/flags/force_restore_data test
- rm metadata/ххх/table_yyy.sql + rmr /clickhouse/tables/table_yyy/replicas/my_host
не помогло. Первые два совсем не помогли, последний пропустил table_yyy и перешел к следующей таблице по списку и выдал такую же ошибку (и так для всех таблиц) -
-
Зукипер поднят и доступен для кх?
-
-
А зачем вы это делаете если у вас в логе н написано что не доступен ни один зукипер
-
̶о̶н̶ ̶д̶о̶с̶т̶у̶п̶е̶н̶,̶ ̶с̶е̶й̶ч̶а̶с̶ ̶п̶о̶п̶р̶о̶б̶о̶в̶а̶л̶ ̶с̶ ̶с̶е̶р̶в̶е̶р̶а̶ ̶п̶о̶с̶т̶у̶ч̶а̶т̶ь̶с̶я̶ ̶к̶ ̶н̶е̶м̶у̶
ping до сервера с zookeper - ок
telnet на порт - fail
telnet на порт c другого хоста- ok -
А раньше?
-
Ну вот и ответ
-
Доброе утро всем любителям шарад и загадок 🙂
Памагите с запросом, ибо не хватает познаний во встроенных агрегирующих функциях 🙁
дано: 3 таблицы:
1) traffic - траффик с фаервола с разобранными по типам пакетами и количеством отправленных/полученных Bytes + ip-адреса
2) dns - сопоставление ip-адреса и dns-имени
3) windows_security - логи windows с логинами пользователей и dns-именами компьютеров
само-собой в каждой таблице имеется EventTime
нужно: отобразить таблицу с логинами пользователей, что запускали torrent-ы в выбранный промежуток времени ( конечная цель - grafana )
предполагаемый порядок действий следующий:
1) выбрать логины пользователей за указаный промежуток времени ( поля Login + ComputerName )
2) добавление в выборку к ComputerName информации о ip-адресе компьютера поле IP ( из таблицы dns )
3) добавление к выборке по полю IP из таблицы traffic информации о наличии трафика по протоколу torrent
но, данный порядок затрагивает лишь доменные windows компьютеры , а по факту может оказаться, что torrent запускались на условно серверах, что не прописаны в dns.
поэтому, есть второй порядок действий, который частично уже работает:
1) выбрать информацию о наличии torrent траффика c полями ip-адрес MegaBytesSent MegaBytesReceived MegaBytes
2) добавление в выборку к ip-адресу информации ComputerName ( из таблицы dns )
3) выбрать логины пользователей за указаный промежуток времени что пользовали torrent
Тот запрос, что имеется к настоящему моменту. частично работает, но, не предполагает того, что в обозначеный промежуток времени terrent-траффик суммируется и не предполагает что за обозначенный промежуток времени за компьютером могли работать несколько пользователей.
SELECT
IP,
ComputerName,
MegaBytesSent,
MegaBytesReceived,
MegaBytes,
TargetUserName
FROM
(
SELECT
IP,
ComputerName,
MegaBytesSent,
MegaBytesReceived,
MegaBytes
FROM
(
SELECT
IP,
(sum(Bytes) / 1000000) AS MegaBytes,
(sum(BytesSent) / 1000000) AS MegaBytesSent,
(sum(BytesReceived) / 1000000) AS MegaBytesReceived,
FROM
traffic
WHERE
EventDate BETWEEN today() - 2 AND today()
AND Application = 'torrent'
AND IP LIKE '192.%'
GROUP BY
IP
HAVING
MegaBytes > 10
) ANY
LEFT JOIN (
SELECT
IP,
ComputerName
FROM
dns
) USING (IP)
) ANY
INNER JOIN (
SELECT
EventTime,
ComputerName,
TargetUserName
FROM
windows_security
WHERE
EventDate BETWEEN today() - 2 AND today()
AND EventID = 4624
AND (
LogonType = '7'
OR LogonType = '2'
)
) USING ComputerName
Какими еще функциями следует воспользоваться, чтобы сделать такую хитрую сортировку?
Если кто-то сталкивался с аналогичными задачами, то, можете просто накидать полезных для меня функций. -
черт, искал не то и не там. Просто так совпало и искал ошибку в своих действиях. Благодарю!
-
Joined.
-
Всем привет. Можно ли в таблице сделать поле с именем @timestamp?
-
и как потом с ним работать?
-
А что за логика с materialuzed view? Я создал materialized view as select count() из таблицы . И там строки добавляются, а я бы ожидал ,что при каждой вставке в мастер таблицу идёт сначала truncate materialized view, а потом инскрт
-
CREATE TABLE reserved_word_table (index UInt8) ENGINE = MergeTree ORDER BY index;
-
-
yandex/ClickHouse
ClickHouse is a free analytic DBMS for big data. Contribute to yandex/ClickHouse development by creating an account on GitHub.
-
спасибо
-
Привет, подскажите как быть с now()
1. Добавил в табличку колонку с текущим временем:
ALTER TABLE table_name
ADD COLUMN update_time DateTime DEFAULT now();
2. Сделал инсерт нескольких строк
3. Селекчу - для крайней записи всегда отрабатывает now() и возвращает текущее время вместо времени инсерта
Это ожидаемое поведение? Можно как-то сделать, чтобы now() отрабатывал только при инсерте и сохранял это значение? -
У MV правильная логика, у вас нет
-
Может быть. Но эта логика не как в оракле. В оракле или рефреш по времени ( с выполнением dekete or truncate ) или при вставке, но тогда уже есть ограничения на текст mv
-
Вы сделали MV с обычным движком, он и будет на каждую вставку в таблицу - добавлять записи.
Вам нужно было посмотреть в сторону https://clickhouse.yandex/docs/ru/operations/table_engines/aggregatingmergetree/, а не просто MergeTree.
Кликхаус это вообще не оракл, никто и не обещал, что он будет на него похож.
[тут место для цитаты о том, что КХ вообще делался не для вас, а для яндекс-метрики, но я что-то найти не могу] -
Joined.
-
текущее для записей которые уже были в таблице до alter . Нужен optimize чтобы перемржить старое и записать на диск колонку.
-
https://gist.github.com/den-crane/6eff375752a236a456e1b3dc2ca7db62
Вам нужен aggregating и countstate
Или summingmergetree и sum(1) -
-
Спасибо. Понял
-
В документации написано:
Полученные сообщения из кафки группируются в блоки размера max_insert_block_size. Если блок не удалось сформировать за stream_flush_interval_ms миллисекунд, то данные будут сброшены в таблицу независимо от полноты блока.
Но я вижу что данные вбрасываются блоками по 65536 штук и собираются явно больше 7.5 секунд. То есть она использует какие то другие пораметры? -
max_insert_block_size Значение по умолчанию: 1,048,576
-
stream_flush_interval_ms по умолчанию 7500
-
никто не знает про это?
-
Зависит от версии кх и в кафке многое сломано после 19.6.
кафка движок читает по 65536 (kafka_max_block_size) и ждет пока все не прочитает, а затем уже пишет по 1млн или 7.5с.
Это все уже переделано и в след. релизе будет.
https://github.com/yandex/ClickHouse/issues/4890
А потом опять будет переделано https://github.com/yandex/ClickHouse/issues/5100 -
Спасибо
-
А то уже думал что опять все сломал)
-
По хорошему надо все это собрать в одну таблицу еще до КХ (на этапе ETL).
А так, надо сначало сджойнить, а потом уже считать sum (группировать). Для джойна по несовпадающим промежуткам времени можно округлять (например до часа) или использовать ASOF JOIN. -
-
Всем привет. Подскажите пожалуйста, или дайте ссылку где почитать (в официальной документации не нашла). http://joxi.ru/bmobVZ4c3QdJer интересует, что за параметры, обведенные красными рамками 1 и 2? Заранее благодарю
-
Это старый синтаксис создания таблиц
Вот тут https://clickhouse.yandex/docs/en/operations/table_engines/replication/#creating-replicated-tables есть пример (Example in deprecated syntax) -
Соответственно, в новом стиле ваш пример соответствует
PARTITION BY toYYYYMM(date)
ORDER BY (asc, date) -
-
Joined.
-
Привет. Подскажите , что делать если висит drop table уже 6 дней и не убивается kill query. Можно ли пофиксить не рестартуя КХ?
-
-
а есть другие запросы которые тоже к этой таблице висят, select/alter ? таблица distributed?
-
select groupArray(a.k), groupArray(a.v) from (
select a.k, a.v from (select ['a','b','c'] `a.k`, [1,2,3] `a.v`) Array Join a) -
Нету. Это engine = Kafka
-
Joined.
-
это баг, какая версия КХ? Скорее всего придется выключить КХ и удалить .sql файл вручную
-
Спс
-
Добрый день. после обновления с 18.16 на 19.5 Кликхаус просто сам завершает работу при выполнение запросов. oom киллер не приходил, в dmesg сообщения о core-dump не вижу. выглядит это примерно так
↗️ Progress: 86.03 million rows, 682.50 MB (36.59 million rows/s., 290.32 MB/s.) ████████████████████████████████████▎ 32%[chbi1] 2019.05.07 13:56:23.638435 [ 203 ] <Debug> MemoryTracker: Current memory usage: 1.00 GiB.
↗️ Progress: 99.25 million rows, 1.20 GB (25.09 million rows/s., 302.91 MB/s.) ███████████████████████████████▋ 27%Cannot load data for command line suggestions: Code: 32, e.displayText() = DB::Exception: Attempt to read after eof: while receiving packet from localhost:9000, 127.0.0.1 (version 19.5.3.1)
Exception on client:
Code: 32. DB::Exception: Attempt to read after eof: while receiving packet from localhost:9000, 127.0.0.1
Connecting to database etl_city_import at localhost:9000 as user default.
Code: 210. DB::NetException: Connection refused (localhost:9000, 127.0.0.1)
в perf top смотрел, ну кроме AGregate еще
6.16% clickhouse [.] 0x0000000005cbb1a3
5.04% clickhouse [.] 0x0000000005ccdfcb
откатывать на 18.16 уже не хочется, что можно предпринять ? -
DB::Exception: Attempt to read after eof:
Очень часто встречается ошибка у нас, кстати, до сих пор не можем понять её причины, иногда кластер тупо перестаёт принимать любые запросы от клиентов (и на чтение и на вставку) с клиентскими ошибками в логах (eof, client closed connection и так далее), даже коннекты не принимает, пока все клиенты не перезапустишь. Одна особенность - это происходит после одновременно большого кол-ва запросов 10-20 со стороны chproxy (в конфиге ограничение на 30 concurrent queries). Да и в истории чата частенько эта ошибка проскакивает. Такие дела. -
да. все верною. используется chproxy, и да, это возникает когда много запрос паралельно. Все верно. при этом с этой же базой и с этими же запросами на 18.16 проблем не было )
-
запускать клиент как clickhouse-client -A
https://github.com/yandex/ClickHouse/issues/5066 -
смотреть в лог, если там клеточки - #####
-
Листаю issues на гитхабе, но их дофига, и некоторые читаю не по своему вопросу, для кругозора. Может, здесь кто подскажет быстрее. Это нормально, что условие из запроса на view, на столбец, который является ключом для исходной таблицы, не оптимизируется?
Table metrics_raw
(
itemid Int64,
clock DateTime,
value Decimal64(4)
)
ENGINE = ReplicatedMergeTree( ... )
PARTITION BY toYYYYMMDD(clock)
ORDER BY (itemid, clock);
Table metrics_hour_state
(
itemid Int64,
clock DateTime,
value AggregateFunction(avg, Decimal64(4))
)
ENGINE = ReplicatedAggregatingMergeTree( ... )
PARTITION BY toYYYYMMDD(clock)
ORDER BY (itemid, clock);
MV aggregator_hour
TO metrics_hour_state AS
SELECT
itemid,
toStartOfHour(clock) clock,
avgState(value) value
FROM metrics_raw
GROUP BY itemid, clock;
View metrics_hour
AS
SELECT itemid, clock, avgMerge(value) value
FROM metrics_hour_state
GROUP BY itemid, clock;
Запрос
select itemid, clock, value from metrics_hour where itemid = 54321
Приводит к полному сканированию metrics_hour_state. -
у нас это на 18.12.17, проскакивает 1-2 раза в месяц, никакой логики найти не можем, количество запросов при нормальной работе может и 30 быть одновременно
-
-
уточню вопрос:
а) ожидается ли появление оптимизации
б) есть ли более изящное решение здесь и сейчас, чем переписывать запрос без обращения к view, как
SELECT itemid, clock, avgMerge(value) value
FROM metrics_hour_state
WHERE itemid = 54321
GROUP BY itemid, clock
разница по потреблению памяти между ними огромная, 1536 МБ против 32 МБ (примерно) -
-
А что это значит?
-
Joined.
-
если сервер упал - в логе будет
<Error> BaseDaemon: ########################################
<Error> BaseDaemon: (from thread 1) Received signal Segmentation fault (11).
и полезный трейс -
-
-
-
Подскажите, если я создаю матвью с агрегатом countState(), то почему при запросе из нее, чтобы получить значение count необходимо использовать countMerge и снова группировать по остальным полям. Как то это не логично
-
Видео записывается. Будет ли доступно скажу чуть позже.
-
Спасибо! Было бы хорошо, если бы было
-
если вам нужен count без группировки вы можете не группировать и в матвью не группировать
countMerge необходим потому что в таблице лежат состояния, их надо финализировать.
Представьте вы бы использовали summingmergetree и считали бы sum(1), каждый инстерт бы вставлял строку с числом = кол-ву строк которое вставилось с этим инсертом, затем summingmergetree постепенно бы мержил и суммировал, до в любой момент времени оно еще не смерженно в одну запись, поэтому вам бы приходилось считать sum() -- финализировать.
Если вам нужен select count where =1, можно взять эту цифру из system.parts -
Мне нужен count c группировкой, но я его уже указал при создании матвьюхи, и мне не понятно зачем делать его еще раз, получается же масло масленное.
-
вот например я сделал матвью group by user, date, site
это дает мне возможность выбрать например group by date
ну и вообще так больше похоже на стандартный sql -
-
Вот я и не понимая, если я уже сделал group by user, date, site, то зачем мне делать эту же группировку чтобы получить типа уже сгруппированные данные
-
так бог велел.
-
Давно бы так, а то все со своими объяснениями 👌🏻
-
вы осознаете как только напишете больше одного вью и больше 3х запросов. Ваш вопрос из серии почему вода мокрая, он слишком сложен.
-
То есть я все правильно делаю? Просто я думал, вдруг где-то косячу.
-
Будет
-
да, все правильно
-
Да. действительно. не было в syslog sigfault. в лог даже не полез грепать
2019.05.07 15:23:28.384770 [ 214 ] {} <Error> BaseDaemon: (version 19.5.3.1) (from thread 205) Received signal Segmentation fault (11).
2019.05.07 15:23:28.384783 [ 214 ] {} <Error> BaseDaemon: Address: NULL pointer.
2019.05.07 15:23:28.384790 [ 214 ] {} <Error> BaseDaemon: Access: read.
2019.05.07 15:23:28.384796 [ 214 ] {} <Error> BaseDaemon: Address not mapped to object.
включать коры и присылать ? -
что делал from thread 205, обратным поиском [ 205 ]
-
там после этих строк тред [ 214 ] написал свой стектрейс, для начала его посмотреть бы
-
./clickhouse-server.log:2019.05.07 15:17:47.741120 [ 205 ] {} <Trace> Aggregator: Merging aggregated data
./clickhouse-server.log:2019.05.07 15:19:47.574810 [ 205 ] {} <Trace> Aggregator: Aggregating
./clickhouse-server.log:2019.05.07 15:19:47.574948 [ 205 ] {} <Trace> Aggregator: Aggregation method: without_key
./clickhouse-server.log:2019.05.07 15:19:47.574968 [ 205 ] {} <Trace> Aggregator: Aggregated. 0 to 1 rows (from 0.000 MiB) in 0.000 sec. (0.000 rows/sec., 0.000 MiB/sec.)
./clickhouse-server.log:2019.05.07 15:19:47.574974 [ 205 ] {} <Trace> Aggregator: Merging aggregated data
./clickhouse-server.log:2019.05.07 15:21:38.747664 [ 205 ] {} <Trace> Aggregator: Aggregation method: key16 -
./clickhouse-server.log:2019.05.07 15:23:28.384728 [ 214 ] {} <Error> BaseDaemon: ########################################
./clickhouse-server.log:2019.05.07 15:23:28.384770 [ 214 ] {} <Error> BaseDaemon: (version 19.5.3.1) (from thread 205) Received signal Segmentation fault (11).
./clickhouse-server.log:2019.05.07 15:23:28.384783 [ 214 ] {} <Error> BaseDaemon: Address: NULL pointer.
./clickhouse-server.log:2019.05.07 15:23:28.384790 [ 214 ] {} <Error> BaseDaemon: Access: read.
./clickhouse-server.log:2019.05.07 15:23:28.384796 [ 214 ] {} <Error> BaseDaemon: Address not mapped to object.
./clickhouse-server.log:2019.05.07 15:23:28.453060 [ 214 ] {} <Error> BaseDaemon: 0. /usr/bin/clickhouse-server(tcache_bin_flush_small+0x26a) [0x6c4d39a]
./clickhouse-server.log:2019.05.07 15:23:28.453087 [ 214 ] {} <Error> BaseDaemon: 1. /usr/bin/clickhouse-server(tcache_event_hard+0x5a) [0x6c4df6a]
./clickhouse-server.log:2019.05.07 15:23:28.453098 [ 214 ] {} <Error> BaseDaemon: 2. /usr/bin/clickhouse-server(__libc_free+0x25b) [0x6c2bf8b]
./clickhouse-server.log:2019.05.07 15:23:28.453111 [ 214 ] {} <Error> BaseDaemon: 3. /usr/bin/clickhouse-server(DB::ColumnsBlockInputStream::readImpl()+0xb83) [0x5ec5273]
./clickhouse-server.log:2019.05.07 15:23:28.453119 [ 214 ] {} <Error> BaseDaemon: 4. /usr/bin/clickhouse-server(DB::IBlockInputStream::read()+0x258) [0x5f66b08]
./clickhouse-server.log:2019.05.07 15:23:28.453126 [ 214 ] {} <Error> BaseDaemon: 5. /usr/bin/clickhouse-server(DB::ExpressionBlockInputStream::readImpl()+0x2d) [0x65b6b5d]
./clickhouse-server.log:2019.05.07 15:23:28.453133 [ 214 ] {} <Error> BaseDaemon: 6. /usr/bin/clickhouse-server(DB::IBlockInputStream::read()+0x258) [0x5f66b08]
./clickhouse-server.log:2019.05.07 15:23:28.453140 [ 214 ] {} <Error> BaseDaemon: 7. /usr/bin/clickhouse-server(DB::DistinctBlockInputStream::readImpl()+0x91) [0x65df041]
./clickhouse-server.log:2019.05.07 15:23:28.453155 [ 214 ] {} <Error> BaseDaemon: 8. /usr/bin/clickhouse-server(DB::IBlockInputStream::read()+0x258) [0x5f66b08]
./clickhouse-server.log:2019.05.07 15:23:28.453162 [ 214 ] {} <Error> BaseDaemon: 9. /usr/bin/clickhouse-server(DB::ExpressionBlockInputStream::readImpl()+0x2d) [0x65b6b5d]
./clickhouse-server.log:2019.05.07 15:23:28.453169 [ 214 ] {} <Error> BaseDaemon: 10. /usr/bin/clickhouse-server(DB::IBlockInputStream::read()+0x258) [0x5f66b08]
./clickhouse-server.log:2019.05.07 15:23:28.453176 [ 214 ] {} <Error> BaseDaemon: 11. /usr/bin/clickhouse-server(DB::LimitBlockInputStream::readImpl()+0x384) [0x5f68f84]
./clickhouse-server.log:2019.05.07 15:23:28.453183 [ 214 ] {} <Error> BaseDaemon: 12. /usr/bin/clickhouse-server(DB::IBlockInputStream::read()+0x258) [0x5f66b08]
./clickhouse-server.log:2019.05.07 15:23:28.453190 [ 214 ] {} <Error> BaseDaemon: 13. /usr/bin/clickhouse-server(DB::ConvertingBlockInputStream::readImpl()+0x3d) [0x65ad0dd]
./clickhouse-server.log:2019.05.07 15:23:28.453197 [ 214 ] {} <Error> BaseDaemon: 14. /usr/bin/clickhouse-server(DB::IBlockInputStream::read()+0x258) [0x5f66b08]
./clickhouse-server.log:2019.05.07 15:23:28.453204 [ 214 ] {} <Error> BaseDaemon: 15. /usr/bin/clickhouse-server(DB::FilterBlockInputStream::readImpl()+0xaa) [0x65c25aa]
./clickhouse-server.log:2019.05.07 15:23:28.453210 [ 214 ] {} <Error> BaseDaemon: 16. /usr/bin/clickhouse-server(DB::IBlockInputStream::read()+0x258) [0x5f66b08]
./clickhouse-server.log:2019.05.07 15:23:28.453217 [ 214 ] {} <Error> BaseDaemon: 17. /usr/bin/clickhouse-server(DB::ExpressionBlockInputStream::readImpl()+0x2d) [0x65b6b5d]
./clickhouse-server.log:2019.05.07 15:23:28.453224 [ 214 ] {} <Error> BaseDaemon: 18. /usr/bin/clickhouse-server(DB::IBlockInputStream::read()+0x258) [0x5f66b08]
./clickhouse-server.log:2019.05.07 15:23:28.453235 [ 214 ] {} <Error> BaseDaemon: 19. /usr/bin/clickhouse-server(DB::DistinctBlockInputStream::readImpl()+0x91) [0x65df041]
./clickhouse-server.log:2019.05.07 15:23:28.453243 [ 214 ] {} <Error> BaseDaemon: 20. /usr/bin/clickhouse-server(DB::IBlockInputStream::read()+0x258) [0x5f66b08] -
./clickhouse-server.log:2019.05.07 15:23:28.453266 [ 214 ] {} <Error> BaseDaemon: 21. /usr/bin/clickhouse-server(DB::ParallelInputsProcessor<DB::UnionBlockInputStream::Handler>::loop(unsigned long)+0xfb) [0x604bc5b]
./clickhouse-server.log:2019.05.07 15:23:28.453278 [ 214 ] {} <Error> BaseDaemon: 22. /usr/bin/clickhouse-server(DB::ParallelInputsProcessor<DB::UnionBlockInputStream::Handler>::thread(std::shared_ptr<DB::ThreadGroupStatus>, unsigned long)+0x1f4) [0x604c2f4]
./clickhouse-server.log:2019.05.07 15:23:28.453302 [ 214 ] {} <Error> BaseDaemon: 23. /usr/bin/clickhouse-server(ThreadFromGlobalPool::ThreadFromGlobalPool<DB::ParallelInputsProcessor<DB::UnionBlockInputStream::Handler>::process()::{lambda()#1}>(DB::ParallelInputsProcessor<DB::UnionBlockInputStream::Handler>::process()::{lambda()#1}&&)::{lambda()#1}::operator()() const+0x67) [0x604cbc7]
./clickhouse-server.log:2019.05.07 15:23:28.453312 [ 214 ] {} <Error> BaseDaemon: 24. /usr/bin/clickhouse-server(ThreadPoolImpl<std::thread>::worker(std::_List_iterator<std::thread>)+0x1cc) [0x6b8b2ac]
./clickhouse-server.log:2019.05.07 15:23:28.453319 [ 214 ] {} <Error> BaseDaemon: 25. /usr/lib/x86_64-linux-gnu/libstdc++.so.6(+0xbd57f) [0x7f2fcda0557f]
./clickhouse-server.log:2019.05.07 15:23:28.453325 [ 214 ] {} <Error> BaseDaemon: 26. /lib/x86_64-linux-gnu/libpthread.so.0(+0x76ba) [0x7f2fce0e76ba]
./clickhouse-server.log:2019.05.07 15:23:28.453338 [ 214 ] {} <Error> BaseDaemon: ########################################
./clickhouse-server.log:2019.05.07 15:23:28.453349 [ 214 ] {} <Error> BaseDaemon: (version 19.5.3.1) (from thread 206) Received signal Segmentation fault (11).
./clickhouse-server.log:2019.05.07 15:23:28.453354 [ 214 ] {} <Error> BaseDaemon: Address: NULL pointer.
./clickhouse-server.log:2019.05.07 15:23:28.453360 [ 214 ] {} <Error> BaseDaemon: Access: read.
./clickhouse-server.log:2019.05.07 15:23:28.453366 [ 214 ] {} <Error> BaseDaemon: Unknown si_code.
./clickhouse-server.log:2019.05.07 15:23:28.516622 [ 214 ] {} <Error> BaseDaemon: 0. /usr/bin/clickhouse-server(DB::TablesBlockInputStream::readImpl()+0x3f3) [0x5ee28a3]
./clickhouse-server.log:2019.05.07 15:23:28.516671 [ 214 ] {} <Error> BaseDaemon: 1. /usr/bin/clickhouse-server(DB::IBlockInputStream::read()+0x258) [0x5f66b08]
./clickhouse-server.log:2019.05.07 15:23:28.516681 [ 214 ] {} <Error> BaseDaemon: 2. /usr/bin/clickhouse-server(DB::ExpressionBlockInputStream::readImpl()+0x2d) [0x65b6b5d]
./clickhouse-server.log:2019.05.07 15:23:28.516688 [ 214 ] {} <Error> BaseDaemon: 3. /usr/bin/clickhouse-server(DB::IBlockInputStream::read()+0x258) [0x5f66b08]
./clickhouse-server.log:2019.05.07 15:23:28.516710 [ 214 ] {} <Error> BaseDaemon: 4. /usr/bin/clickhouse-server(DB::DistinctBlockInputStream::readImpl()+0x91) [0x65df041]
./clickhouse-server.log:2019.05.07 15:23:28.516718 [ 214 ] {} <Error> BaseDaemon: 5. /usr/bin/clickhouse-server(DB::IBlockInputStream::read()+0x258) [0x5f66b08]
./clickhouse-server.log:2019.05.07 15:23:28.516725 [ 214 ] {} <Error> BaseDaemon: 6. /usr/bin/clickhouse-server(DB::ExpressionBlockInputStream::readImpl()+0x2d) [0x65b6b5d]
./clickhouse-server.log:2019.05.07 15:23:28.516733 [ 214 ] {} <Error> BaseDaemon: 7. /usr/bin/clickhouse-server(DB::IBlockInputStream::read()+0x258) [0x5f66b08]
./clickhouse-server.log:2019.05.07 15:23:28.516740 [ 214 ] {} <Error> BaseDaemon: 8. /usr/bin/clickhouse-server(DB::LimitBlockInputStream::readImpl()+0x384) [0x5f68f84]
./clickhouse-server.log:2019.05.07 15:23:28.516748 [ 214 ] {} <Error> BaseDaemon: 9. /usr/bin/clickhouse-server(DB::IBlockInputStream::read()+0x258) [0x5f66b08]
./clickhouse-server.log:2019.05.07 15:23:28.516755 [ 214 ] {} <Error> BaseDaemon: 10. /usr/bin/clickhouse-server(DB::ConvertingBlockInputStream::readImpl()+0x3d) [0x65ad0dd]
./clickhouse-server.log:2019.05.07 15:23:28.516763 [ 214 ] {} <Error> BaseDaemon: 11. /usr/bin/clickhouse-server(DB::IBlockInputStream::read()+0x258) [0x5f66b08] -
./clickhouse-server.log:2019.05.07 15:23:28.516770 [ 214 ] {} <Error> BaseDaemon: 12. /usr/bin/clickhouse-server(DB::FilterBlockInputStream::readImpl()+0xaa) [0x65c25aa]
./clickhouse-server.log:2019.05.07 15:23:28.516778 [ 214 ] {} <Error> BaseDaemon: 13. /usr/bin/clickhouse-server(DB::IBlockInputStream::read()+0x258) [0x5f66b08]
./clickhouse-server.log:2019.05.07 15:23:28.516785 [ 214 ] {} <Error> BaseDaemon: 14. /usr/bin/clickhouse-server(DB::ExpressionBlockInputStream::readImpl()+0x2d) [0x65b6b5d]
./clickhouse-server.log:2019.05.07 15:23:28.516797 [ 214 ] {} <Error> BaseDaemon: 15. /usr/bin/clickhouse-server(DB::IBlockInputStream::read()+0x258) [0x5f66b08]
./clickhouse-server.log:2019.05.07 15:23:28.516804 [ 214 ] {} <Error> BaseDaemon: 16. /usr/bin/clickhouse-server(DB::DistinctBlockInputStream::readImpl()+0x91) [0x65df041]
./clickhouse-server.log:2019.05.07 15:23:28.516812 [ 214 ] {} <Error> BaseDaemon: 17. /usr/bin/clickhouse-server(DB::IBlockInputStream::read()+0x258) [0x5f66b08]
./clickhouse-server.log:2019.05.07 15:23:28.516822 [ 214 ] {} <Error> BaseDaemon: 18. /usr/bin/clickhouse-server(DB::ParallelInputsProcessor<DB::UnionBlockInputStream::Handler>::loop(unsigned long)+0xfb) [0x604bc5b]
./clickhouse-server.log:2019.05.07 15:23:28.516832 [ 214 ] {} <Error> BaseDaemon: 19. /usr/bin/clickhouse-server(DB::ParallelInputsProcessor<DB::UnionBlockInputStream::Handler>::thread(std::shared_ptr<DB::ThreadGroupStatus>, unsigned long)+0x1f4) [0x604c2f4]
./clickhouse-server.log:2019.05.07 15:23:28.516851 [ 214 ] {} <Error> BaseDaemon: 20. /usr/bin/clickhouse-server(ThreadFromGlobalPool::ThreadFromGlobalPool<DB::ParallelInputsProcessor<DB::UnionBlockInputStream::Handler>::process()::{lambda()#1}>(DB::ParallelInputsProcessor<DB::UnionBlockInputStream::Handler>::process()::{lambda()#1}&&)::{lambda()#1}::operator()() const+0x67) [0x604cbc7]
./clickhouse-server.log:2019.05.07 15:23:28.516861 [ 214 ] {} <Error> BaseDaemon: 21. /usr/bin/clickhouse-server(ThreadPoolImpl<std::thread>::worker(std::_List_iterator<std::thread>)+0x1cc) [0x6b8b2ac]
./clickhouse-server.log:2019.05.07 15:23:28.516869 [ 214 ] {} <Error> BaseDaemon: 22. /usr/lib/x86_64-linux-gnu/libstdc++.so.6(+0xbd57f) [0x7f2fcda0557f]
./clickhouse-server.log:2019.05.07 15:23:28.516876 [ 214 ] {} <Error> BaseDaemon: 23. /lib/x86_64-linux-gnu/libpthread.so.0(+0x76ba) [0x7f2fce0e76ba] -
похоже тоже самое что и https://github.com/yandex/ClickHouse/issues/5141
-
фикса пока нет
-
Добрового времени. Подскажите как можно обойти ошибку при insert большого кол-ва данных из mysql
запрос выглядит подобным образом
INSERT INTO clickhouse_table (...) SELECT ... FROM mysql(?, 'db_name', 'mysql_table', ?, ?) mt
данный запрос работал до определённого момента
после стал падать с ошибкой
HttpCode:500 ; ;Poco::Exception. Code: 1000, e.code() = 2013, e.displayText() = mysqlxx::Exception: Lost connection to MySQL server during query (remote-host.ru:3306) (version 19.5.3.8 (official build)) -
таймаутов в мускуле может не хватает?
-
падение воспроизводится на определенных запросах?
-
непонятно что это вообще,
возможно вот это тоже самое https://github.com/yandex/ClickHouse/issues/5197
и оно уже пофикшено в v19.7.1.403-testing, можно попробовать, я ее тестил в стейдже, никаких проблем не нашел -
mysql забанил ip кликхауза? https://dev.mysql.com/doc/refman/5.5/en/flush.html#flush-hosts
-
Алексей докладывает : кликхауз не тормозит
-
Видео будет опубликовано.
-
Ура!
-
-
-
application/x-www-form-urlencoded; charset=UTF-8
-
а если из js то ещо в query string add_http_cors_header=1
-
Продолжает митап Александр из Altinity
-
Надо выжимки в пару строк)
-
Joined.
- 08 May 2019 (140 messages)
-
-
-
-
-
-
-
-
-
-
Вроде Material View этим заведуют. Правда не совсем полноценно, но всеж таки.
-
-
-
-
-
Докладов с highload очень много с юз кейсами (от Altinity, Badoo и других классных ребят), в ютубе можно найти. Я бы начал с этого.
У Altinity есть хороший блог:
https://www.altinity.com/blog
Из интересных статей, которые я помню:
https://dou.ua/lenta/articles/experience-with-clickhouse/
Но их очень много, гуглятся по ‘опыт перехода на clickhouse’
Ну и еще этот чат) Мне кажется, что тут любую типовую задачу уже можно найти, тут уже столько наспрашивали и наотвечали. Так что в любой непонятной ситуации я сначала пользуюсь поиском в этом чатике 🙂 -
Шикарно! Спасибо
-
Joined.
-
нет. иногда да, скорее причина в одновременном большом количестве запросов
-
Joined.
-
начинаю собирать. сейчас накатим фикс наш (функцич geoToH3) протестирую, отпишусь
-
-
Вопрос по Mysql Engine.
В документации написано:
The MySQL engine does not support the Nullable data type, so when reading data from MySQL tables, NULL is converted to default values for the specified column type (usually 0 or an empty string).
Существует ли известный обход этого правила? Допустим, чтобы брались дефолтные значения не ТИПА, а дефолтное значение из MYSQL? -
В релизе 19.3.3
https://github.com/yandex/ClickHouse/blob/master/CHANGELOG_RU.md#clickhouse-release-1933-2019-02-13
"Добавлена поддержка Nullable типов в табличной функции mysql"
Насколько хорошо работает - не скажу, пробуйте -
-
-
Коллеги, добрый день, подскажите пожалуйста нюанс по воронкам windowFunnel
Есть запрос на 9 этапов воронки
SELECT level, COUNT() AS Count
FROM (SELECT UserId, windowFunnel(86400)
(EventDateTime,
EventId = 'BSE' AND Param1 = '0045fc6b-95db-4be1-b728-b387b6ed34cd',
EventId = 'BCE' AND Param1 = '0045fc6b-95db-4be1-b728-b387b6ed34cd',
EventId = 'CTO', EventId = 'GCO' OR EventId = 'GCOP', EventId = 'ATB',
EventId = 'BK1', EventId = 'BKD', EventId = 'BKP', EventId = 'ORC') AS level
FROM statdb.events
WHERE EventDate = '2019-05-07'
AND ApplicationType = 1
AND EventId in ('BSE', 'BCE', 'CTO', 'GCO', 'GCOP', 'ATB', 'BK1', 'BKD', 'BKP', 'ORC')
GROUP BY UserId)
GROUP BY level
воронка говорит что событий 'BSE' 250 тысяч
если делать отдельный запрос на данный этап (а он первый в воронке)
SELECT EventId, count()
FROM statdb.events
WHERE EventDate = '2019-05-07'
And EventId = 'BSE'
AND ApplicationType = 1
AND Param1 = '0045fc6b-95db-4be1-b728-b387b6ed34cd'
GROUP BY EventId
то получается 1 млн, событий,
если делать запрос через count(distinct(UserId))
то выходит 250 тысяч,
windowFunnel только уникальных юзеров считает получается?
есть возможность считать от всех юзеров? -
Всем привет! Столкнулись с интересной ошибкой. В таблице есть колонка ratedAt, я делаю вот такой запрос:
SELECT rate, `courseId` FROM `cursometr`.`rate_history_distributed` PREWHERE `courseId` IN 93 WHERE `rate` > 0 AND `isCourse` = 1 ORDER BY `ratedAt` DESC, `rate` DESC LIMIT 1 BY `learnerId`
И вижу ошибку Not found column ratedAt in block. There are only columns: courseId, learnerId, rate.. Хотя если явно добавить эту колонку в select, то все ок. Версия: 19.5.3.8
Это как-то лечится настройками? В чейджлоге не нашел пока ничего.
Причем если убрать LIMIT 1 BY learnerId, то все ок работает. -
Работает. Только нужно изменить тип поля: Int64 —> Nullable(Int64)
-
Есть данные в таблице
┌───────────────────t─┬──────doldids_object─┬──────lin─┬──────lout─┐
│ 2019-05-07 18:29:20 │ 8943830673763257145 │ 11207831 │ 218605070 │
│ 2019-05-07 18:29:38 │ 2071505660187816938 │ 17172263 │ 227922573 │
│ 2019-05-07 18:34:20 │ 8943830673763257145 │ 12023280 │ 245116349 │
│ 2019-05-07 18:34:39 │ 2071505660187816938 │ 14227229 │ 227032367 │
│ 2019-05-07 18:39:20 │ 8943830673763257145 │ 14895851 │ 281474903 │
│ 2019-05-07 18:39:37 │ 2071505660187816938 │ 16141559 │ 272949789 │
Подскажите пожалуйста как суммировать пойты по 10 минут? -
select (toMinute(d) % 10) * 10 as t1 ... group by t1
-
не?
-
Плиз, подскажите, как этим бороться?
Code: 102. Unexpected packet from server clickhouse-cl:9000 (expected Hello or Exception, got Unknown packet)
server version 19.5.3 revision 54417 -
SELECT t-t%600 AS t10, doldids_object, SUM(lin), SUM(lout) GROUP BY t10, doldids_object
-
Оно
Спасибо! -
Ммм
Сработало, только графана не может работать с такими данными, потому как колонка t меняется -
графана замечательно отображает данные, возвращаемые как графит-метрики
-
Графана отлично работает, проблема с точками
-
Ну так возвращайте ей t, обернув запрос в ещё один select, если внутри запроса не получается выдать нужное
-
-
Есть кстати toStartOfTenMinutes toStartOfInterval
-
графана хочет время в формате unixtime*1000
-
Всегда? Иногда? Для определнного запроса? Раньше работало? Докер?
-
-
будет что-то вроде:
SELECT toUInt32(toStartOfTenMinutes(datetime)) * 1000 as t, sum(data) as dsum FROM $table WHERE ... GROUP BY t -
┌───────────────────t─┬──────doldids_object─┬──────lin─┬──────lout─┐
│ 2019-05-07 18:29:20 │ 8943830673763257145 │ 11207831 │ 218605070 │
│ 2019-05-07 18:29:38 │ 2071505660187816938 │ 17172263 │ 227922573 │
│ 2019-05-07 18:34:20 │ 8943830673763257145 │ 12023280 │ 245116349 │
│ 2019-05-07 18:34:39 │ 2071505660187816938 │ 14227229 │ 227032367 │
│ 2019-05-07 18:39:20 │ 8943830673763257145 │ 14895851 │ 281474903 │
│ 2019-05-07 18:39:37 │ 2071505660187816938 │ 16141559 │ 272949789 │
dev1 8943830673763257145
dev2 2071505660187816938 -
@den_crane - спасибо. Добавили новый апп клиент и взяли некорректный haproxy конфиг. В нем не было. mode tcp
backend clickhouse-cl
mode tcp
...
Ошибка пропала. -
А в чём, собственно, проблема? Требуется агрегировать без учёта устройства или что?
-
да
-
И в чём именно тут проблема?
-
Хотя... Тип данных там какой?
-
-
Не в этом смысле. Нарастающий итог или просто значение с датчика?
-
И что именно требуется сагрегировать?
-
-
-
-
-
Переформулирую вопрос: результат агрегации - это что?
-
-
Просто сумма, без учёта предыдущих периодов?
-
Требуется только для графаны?
-
-
Сейчас покажу аналог
-
-
-
-
-
естественно, серверов там далеко не один и не десяток.
-
см. запрос в графане и опции запроса типа "Step"
-
У меня на примере - значения берутся на интервале 5 минут.
-
-
чтобы получить не количество за период, а сколько в секунду
-
тебе не требуется
-
-
он влияет на t и только на t
-
Задаёт шаг. Рекомендую ещё поиграться с Round, кстати. Чтоб начало шага было детерминированным
-
Кстати, так выглядит графики с двух устройств. Все красиво
-
а можно как-то для 1 запроса убрать кеширование?
-
День добрый. Подскажите бест практис по именованию колонок и таблиц? Камелкейс или снейккейс? Или такогового не имеется?
-
как угодно, лишь бы везде одинаково.
-
Спасибо
-
-
у меня 18.16.1
-
-
В chproxy? В кх нет кеширования результата
-
Joined.
-
т.е надо системно менять найстроки кликхауса?
-
-
просто я думал можно как-то убрать "разогрев базы" запросом
-
Если хотете почитать мимо кэша ОС
SET min_bytes_to_use_direct_io=1, merge_tree_uniform_read_distribution=0 -
о
-
пасиба!
-
system drop mark cache;
sync; echo 2 > /proc/sys/vm/drop_caches -
А DDLWorker вообще хоть что-нибудь пишет в лог на том хосте?
Типа <Debug> DDLWorker: Cleaning queue -
-
-
Joined.
-
-
Кирилл, а подскажите при использовании TO одинаковые данные хранятся и во вьюхе и в таблице? То есть дублируются? И при создании матвьюхи функции агрегирования нужно использовать без state?
-
при to вьюха тупо хранит данные в таблице указанной в to вместо неявной .inner таблицы
-
detach table MV;
alter table `.inner.MV` add column NEWCOL String;
ATTACH MATERIALIZED VIEW MV
....
as select , NEWCOL .... -
А почему тогда нужно агрегировать по count , а не countState.
-
?????
-
а есть какой-нибудь оператор для пустого условия Where ?
что-то вроде
where Date = today() and (1 = 1)
мб есть что-нибудь получше? а то 1=1 выглядит костыльно -
where 1
-
спасибо большое
-
У меня выдало ошибку когда я пытался занести данные в матвью, которая была создана как select col1, countState(). Как я понимаю из за того что колонка в таблице типа UInt64 не соответствует countState, или в таблице нужно использовать другой тип?
-
Да, у вас разные типы, для хранения каунта стейт не нужен
-
вы либо число храните, либо стейт, разные типы. Если у вас там стейт, то и вставляйте туда стейт
-
2019.05.08 14:45:03.418293 [ 1276114 ] {3a071405-b760-4431-9a20-1601b337f1a0} <Error> executeQuery: Code: 159, e.displayText()
= DB::Exception: Watching task /clickhouse/task_queue/ddl/query-0000018900 is executing longer than distributed_ddl_task_timeou
t (=180) seconds. There are 1 unfinished hosts (0 of them are currently active), they are going to execute the query in backgro
und, e.what() = DB::Exception (from ….) (in query: DROP TABLE IF EXISTS me_dump.user_d1 ON CLUSTER 'product_ana
lytics'), Stack trace:
0. clickhouse-server(StackTrace::StackTrace()+0x16) [0x9c778f6]
1. clickhouse-server(DB::Exception::Exception(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > c
onst&, int)+0x22) [0x32b6342]
2. clickhouse-server(DB::DDLQueryStatusInputSream::readImpl()+0x132c) [0x6e8048c]
3. clickhouse-server(DB::IProfilingBlockInputStream::read()+0x25a) [0x6d6ac6a]
4. clickhouse-server(DB::AsynchronousBlockInputStream::calculate()+0x56) [0x6d5fe96]
5. clickhouse-server() [0x6d60300]
6. clickhouse-server(ThreadPool::worker()+0x19e) [0x9f3779e]
7. clickhouse-server() [0xa94e40f]
8. /lib/x86_64-linux-gnu/libpthread.so.0(+0x7494) [0x7f9d48f60494]
9. /lib/x86_64-linux-gnu/libc.so.6(clone+0x3f) [0x7f9d48592acf] -
примеры
https://gist.github.com/den-crane/bc5256cb3f64ed3789819d40c11bda84
https://gist.github.com/den-crane/048ce66bc59f5577d56e42d76934682e
https://gist.github.com/den-crane/d03524eadbbce0bafa528101afa8f794
https://gist.github.com/den-crane/49ce2ae3a688651b9c2dd85ee592cb15
https://gist.github.com/den-crane/f7382cd4f1f859ff6ac46afe7dc9925a
https://gist.github.com/den-crane/a72614fbe6d23eb9c2f1bce40c66893f -
В том и вопрос куда туда? С каким типом создавать колонку?
-
ну, матвью пушит данные в таблицу
о структуре этой таблицы речь и идёт. Создавайте с целочисленным типом.
И примеры от @den_crane обычно отвечают на множество вопросов, которые ещё могут возникнуть по ходу. Посмотрите. -
Понял
-
это ведь хост на котором запускали запрос, а не который по таймауту не выполняет, т.е. вообще не то
-
-
Значит я опять не понимаю где нужно использовать count, а где countState?
-
А DDLWorker вообще хоть что-нибудь пишет в лог на том хосте?
Типа <Debug> DDLWorker: Cleaning queue
за последние 7 дней? -
Если таблица aggregating to countState (тип поля AggregateFunction(count))
-
Спасибо, а что плохого если таблица agregating, а я создал поле Uint64 и матвьюху с count?
-
мусор там будет с результатом перезатирающимся кол-вом строк в последнем insert
-
Фигово, придется переделывать ((
-
/var/log/clickhouse-server/clickhouse-server.log.5.gz:DDLQueryStatusInputSream
/var/log/clickhouse-server/clickhouse-server.log.5.gz:2019.05.08 14:45:03.418293 [ 1276114 ] {3a071405-b760-4431-9a20-1601b337f1a0} <Error> executeQuery: Code: 159, e.displayText() = DB::Exception: Watching task /clickhouse/task_queue/ddl/query-0000018900 is executing longer than distributed_ddl_task_timeout (=180) seconds. There are 1 unfinished hosts (0 of them are currently active), they are going to execute the query in background, e.what() = DB::Exception (from 10.156.2.232:54534) (in query: DROP TABLE IF EXISTS me_dump.user_d1 ON CLUSTER 'product_analytics'), Stack trace:
/var/log/clickhouse-server/clickhouse-server.log.5.gz:2. clickhouse-server(DB::DDLQueryStatusInputSream::readImpl()+0x132c) [0x6e8048c]
/var/log/clickhouse-server/clickhouse-server.log.6.gz:DDLQueryStatusInputSream
/var/log/clickhouse-server/clickhouse-server.log.6.gz:DDLQueryStatusInputSream
/var/log/clickhouse-server/clickhouse-server.log.6.gz:2. clickhouse-server(DB::DDLQueryStatusInputSream::readImpl()+0xb5b) [0x6e7fcbb]
/var/log/clickhouse-server/clickhouse-server.log.6.gz:DDLQueryStatusInputSream -
-
-
похоже там упал DDLWorker. Я бы рестартанул тот хост и посмотрел что будет в логе при загрузке.
-
ребят, а что за ошибка в логах?
2019.05.08 18:57:07.025857 [ 11 ] {} <Error> rum.delta_lr (StorageReplicatedMergeTree): DB::StorageReplicatedMergeTree::queueTask()::<lambda(DB::StorageReplicatedMergeTree::LogEntryPtr&)>: Poco::Exception. Code: 1000, e.code() = 0, e.displayText() = No message received -
или реплика не ответила за таймаут, или баг https://github.com/yandex/ClickHouse/issues/4047#issuecomment-478101442Poco::Exception. Code: 1000, e.code() = 0 · Issue #4047 · yandex/ClickHouse
Using docker clickhouse-server:latest After upgrade - we have many error-log entries such as: 2019.01.14 02:24:10.831297 [ 17 ] {} graphite.metrics_lr (StorageReplicatedMergeTree): DB::StorageRepli...
-
Рестартанули…
019.05.08 19:14:45.768547 [ 50 ] {f9ffe958-b537-4c8f-9bb0-e898b1f5469d} <Debug> DDLWorker: Will not execute task query-0000018871: There is no a local address in host list
2019.05.08 19:14:45.769685 [ 50 ] {f9ffe958-b537-4c8f-9bb0-e898b1f5469d} <Debug> DDLWorker: Will not execute task query-0000018872: There is no a local address in host list
2019.05.08 19:14:45.770716 [ 50 ] {f9ffe958-b537-4c8f-9bb0-e898b1f5469d} <Debug> DDLWorker: Will not execute task query-0000018873: There is no a local address in host list
2019.05.08 19:14:45.771817 [ 50 ] {f9ffe958-b537-4c8f-9bb0-e898b1f5469d} <Debug> DDLWorker: Will not execute task query-0000018874: There is no a local address in host list
2019.05.08 19:14:45.772944 [ 50 ] {f9ffe958-b537-4c8f-9bb0-e898b1f5469d} <Debug> DDLWorker: Will not execute task query-0000018875: There is no a local address in host list
2019.05.08 19:14:45.774123 [ 50 ] {f9ffe958-b537-4c8f-9bb0-e898b1f5469d} <Debug> DDLWorker: Will not execute task query-0000018876: There is no a local address in host list
2019.05.08 19:14:45.775122 [ 50 ] {f9ffe958-b537-4c8f-9bb0-e898b1f5469d} <Debug> DDLWorker: Will not execute task query-0000018877: There is no a local address in host list
2019.05.08 19:14:45.776202 [ 50 ] {f9ffe958-b537-4c8f-9bb0-e898b1f5469d} <Debug> DDLWorker: Will not execute task query-0000018878: There is no a local address in host list
2019.05.08 19:14:45.777249 [ 50 ] {f9ffe958-b537-4c8f-9bb0-e898b1f5469d} <Debug> DDLWorker: Will not execute task query-0000018879: There is no a local address in host list
2019.05.08 19:14:45.778297 [ 50 ] {f9ffe958-b537-4c8f-9bb0-e898b1f5469d} <Debug> DDLWorker: Will not execute task query-0000018880: There is no a local address in host list
2019.05.08 19:14:45.779329 [ 50 ] {f9ffe958-b537-4c8f-9bb0-e898b1f5469d} <Debug> DDLWorker: Will not execute task query-0000018881: There is no a local address in host list
2019.05.08 19:14:45.780380 [ 50 ] {f9ffe958-b537-4c8f-9bb0-e898b1f5469d} <Debug> DDLWorker: Will not execute task query-0000018882: There is no a local address in host list
2019.05.08 19:14:45.781391 [ 50 ] {f9ffe958-b537-4c8f-9bb0-e898b1f5469d} <Debug> DDLWorker: Will not execute task query-0000018883: There is no a local address in host list
2019.05.08 19:14:45.782466 [ 50 ] {f9ffe958-b537-4c8f-9bb0-e898b1f5469d} <Debug> DDLWorker: Will not execute task query-0000018884: There is no a local address in host list
2019.05.08 19:14:45.784674 [ 50 ] {f9ffe958-b537-4c8f-9bb0-e898b1f5469d} <Debug> DDLWorker: Will not execute task query-0000018885: There is no a local address in host list
2019.05.08 19:14:45.785785 [ 50 ] {f9ffe958-b537-4c8f-9bb0-e898b1f5469d} <Debug> DDLWorker: Will not execute task query-0000018886: There is no a local address in host list
2019.05.08 19:14:45.786776 [ 50 ] {f9ffe958-b537-4c8f-9bb0-e898b1f5469d} <Debug> DDLWorker: Will not execute task query-0000018887: There is no a local address in host list
2019.05.08 19:14:45.789096 [ 50 ] {f9ffe958-b537-4c8f-9bb0-e898b1f5469d} <Debug> DDLWorker: Will not execute task query-0000018888: There is no a local address in host list -
-
адрес сменился у хоста поди ?
-
-
подскажите, плиз, когда появится видео запись митапа вчерашнего в Лимассоле?
-
надо было ехать!
-
В течение недели
-
👍
-
Подскажите пожалуйста про AggregatingMergeTree:
Насколько вероятно получить при выборке некорректные результаты, если Мердж не успел отработать после вставки? -
0-вая, мерж вообще не влияет на результат select from AggregatingMergeTree (в смысле без group by делать запросы туда бессмысленно, мерж может вообще не случится уже никогда).
-
Спасибо!
-
Запустил alter delete, он закончился, кроме двух партов (system.mutations) parts_to_do = 2 / is_done 0, причем в этих партах удалять нечего.
Но у этих двух партов размер чуть больше 200ГБ (max_bytes_to_merge_at_max_space_in_pool=200) (свободно на диске >ТБ).
Причем таблица в старом формате, поэтому settings туда в sql не подпихнуть (чтобы обойтись без рестарта). Печаль.
И в логах ни слова об этом, фиг догадаешься что почему застряло. - 09 May 2019 (32 messages)
-
Согласен, это неочевидная засада, мы тоже натыкались. По-хорошему, должно быть хотя бы задокументировано, что мутации не мутируют парты размера больше max_bytes_to_merge_at_max_space_in_pool.
-
Аналогичная проблема может и с TTL случиться
-
Логичней сделать какую-нибудь настройку чтобы проверялось max_bytes_to_merge_at_max_space_in_pool + {10%} например, потому что при мутации размер не особо увеличивается, да и предсказать насколько увеличится нельзя, может апдейт там шире строки сделает в два раза.
-
-
ну и тупой, как палка golang-migrate/migrate
-
Подскажите плиз. Хочу из кх запроса достучаться через odbc('DSN=..', 'table') до посгре. Но не могу найти clickhouse-odbc-bridge. Где он лежит?
-
обычно рядом с clickhouse
какая ОС?
откуда взят и как поставлен clickhouse ? -
все нашел его. не туда смотрел.
другой вопрос, я создал таблицу в ch ODBC(...) которая ходит в pg. В pg большая таблица. Я делаю
SELEC * FROM big_table_odbc LIMIT 1
Но запрос выполняется оченьь долго. Правильно я понимаю что limit 1 не в pg исполняется? -
Привет! А возможно ли, что при записи в ReplacingMergeTree уникальных данных, при очередном селекте попадаются одинаковые строки (при этом вставляли эту строку только 1 раз) ?
-
без реплик
-
то есть вставленная 1 раз строка внезапно в select * 2 раза видна
-
-
Нет, что записали то и читаем. Если это так, то это как минимум былабы awful error #2. Читаете пишете в обычную не distributed таблицу?
-
Дебажу сейчас, очень редкий кейс - записали 10 строк, получили 11 в селекте, пока грешу может на ретрай какой-нибудь не к месту в коде
-
Есть простая merge tree таблица на 10 ярдов строчек. Сделал materialized view для неё. Не подскажите, как теперь наполнить (materialized view) ?
-
Оно наполняется само инсертами.
-
А через какое время, не подскажите?
-
Мне нужно, чтобы эти все 10 ярдов наполнились
-
Дык только новые записи появятся. Мат вью работает как триггер на вставку в классическом sql.
-
Понятно, спасибо. А старые наверное нужно перезаливать - только так старые вставятся
-
Другого нет пути?
-
тупо заинсертить в MV тем же селектом что и в MV
-
Спасибо
-
а я не могу делать вставки из ch через odbc?
insert into test_odbc VALUES(100,'odbc')
INSERT INTO test_odbc VALUES
Received exception from server (version 19.8.1):
Code: 86. DB::Exception: Received from localhost:9000, 127.0.0.1. DB::Exception: Received error from remote server /. HTTP status code: 500 Internal Server Error, body: No 'query' in request body -
Joined.
-
-
Кажется, я столкнулся с таким же, моментально сбрасывает...
-
нашел вот такое решение https://github.com/Percona-Lab/clickhousedb_fdw попробуюGitHub - Percona-Lab/clickhousedb_fdw: PostgreSQL's Foreign Data Wrapper For ClickHouse
PostgreSQL's Foreign Data Wrapper For ClickHouse. Contribute to Percona-Lab/clickhousedb_fdw development by creating an account on GitHub.
-
Доброго вечера, подскажите пожалуйста мануал по Distributed tables. Из найденного описано довольно скудно. Создать получается но данные не распространяются по кластеру, только внутри шарда, где были добавлены.
-
https://tech.marksblogg.com/billion-nyc-taxi-rides-clickhouse-cluster.html
<remote_servers>
<perftest_3shards>
perftest_3shards -- 3 Шарда по одной реплике в каждом
CREATE TABLE trips_mergetree_x3
AS trips_mergetree_third
ENGINE = Distributed(perftest_3shards,
default,
trips_mergetree_third,
rand()); -
Если локально видно только часть данных, значит надо смотреть лог почему Distributed таблица не может вставить в шарды
-
@den_crane спасибо. Попробую.
- 10 May 2019 (78 messages)
-
Joined.
-
Joined.
-
Всем привет, столкнулись с такой проблемой сегодня, по сети отвалилась нода кликхауса и все запросы по Distributed таблицам упали с сетевой ошибкой no route to host
ClickHouse server version 18.14.15 revision 54409
Code: 209, e.displayText() = DB::NetException: Timeout exceeded while reading from socket (10.2.0.141:9000), e.what() = DB::NetException
Code: 210, e.displayText() = DB::NetException: Net Exception: No route to host: (xxxx:9000, 10.2.0.141), e.what() = DB::NetException
соотвествонно вопросы
1) баг или фича?
2) спасет ли появление реплик от подобного? -
1)ну а какое поведение вы ожидали, если такое то фича, если не такое то для вас это баг , на деле так и долэжно быть
-
если хоть одна реплик доступна дистрибьютед туда запишет
-
это селекты
-
ну а какое вы поведение ожидаете для селектов 7
-
у вас нет половины данных , что по вашему должен отдавать кликхаус 67
-
ну половина громко сказано )
-
ну треть
-
то есть вас устраивает ответ в половиной данных ? тогда зачем вам дистрибьютед таблица то ?
-
запрашивайте напрямую с ноды
-
там не половина а капля)
-
а основной вопрос был вторым
-
если будет аналогичная реплика то будет ли no route to host
-
ну то ест ьу вас тысяча шардов в этой дистрибьютед таблице? или вы специально туда мало ложите
-
будет на отвалившуюся , потом запрос уйдет к другой
-
да. шардов много, данных много
-
это прдположение или задокументированная фича?
-
это обычное поведение кликхауса
-
нахрена тогда нужны были бы реплики
-
ну мы с дистрибуютед таблицами работаем с первых публичных релизов практически, и очень много фич с ними не работают
-
поэтому вопрос не с потолка
-
-
спс, а по второй части про реплику? именно no route to host с ней обработается?
-
Left.
-
Да
-
Спс
-
Joined.
-
здравствуйте! подскажите кто-то использовал clickhouse в проекте symfony + doctrine? проблема в том, что при вызове flush вызывается метод beginTransaction, а реализация этого метода в FriendsOfDoctrine/dbal-clickhouse бросает исключение.
-
@R0m3g Не думаю что использовать доктрину и clickhouse хорошая идея. Я бы использовал dbal отдельно есть сильно надо.
-
Поправте, если не правильно понимаю как кх делает join. Он всегда делает hashjoin. Правую таблицу закачивает в память и сканирует левую.т.е если в join три таблицы A B C, то сначала в память C. Потом читаем C и результат join в памяти. И последней читаем A
-
все правильно, так и задумано.
-
Joined.
-
Joined.
-
-
Joined.
-
/start@combot
-
-
-
-
поле is_done там в 1? Если да - по-моему, всё ок
-
-
-
Попробуйте рестартнуть кх
-
Это точно поможет. Вопрос в том, как сделать без рестарта
-
Не поможет :-)
-
В смысле, в system.mutations оно таки лежит после рестарта
-
Обновится
-
-
-
Мне там удалить вообще немного. На диске около 20 Тб свободно
-
-
В моём случае - парты мелкие, точно меньше объёма, при котором не работает удаление
-
>Мне там удалить вообще немного
вообще ни при чем.
>На диске около 20 Тб свободно
тоже ни при чем.
дело в размере партов -
общий объём файлов одной таблицы, из которой удаляли ошибочные данные (порядка 5-10%) - чуть больше 200кб
-
Другой вопрос, что у меня данные мутации уже отработали и просто висят в таблице system.mutations
-
Любая мутация не завершится для партов
select * from system.parts where bytes_on_disk > (select toInt64(value) from system.merge_tree_settings where name = 'max_bytes_to_merge_at_max_space_in_pool') -
Кстати да, если уменьшить неожиданно этот параметр и есть парты больше его то они не мутируют, но мне кажется тогда бы и на остальных не шло
-
0 rows in set.
-
Ещё вариант не хватает свободного места его должно быть 2х размера парта
-
а в system.replication_queue они есть? MUTATION . ..
-
-
-
-
-
Да вообще там не должно быть таймаута, сколько угодно времени может выполняться, какая версия КХ?
-
-
-
-
странно это, можно наверное поменять для пользователя default отдельным профилем
-
-
-
-
-
Joined.
-
Joined.
-
Всем привет! немного не по теме есть сеньеры golang или люди с большим опытом по работе с сетью на этом языке?
- 11 May 2019 (47 messages)
-
Joined.
-
Joined.
-
вам сюда https://t.me/gogolang
-
Подскажите пожалуйста, в чем проблемка.
Не делается UPDATE, когда есть столбец типа Array(DateTime)
ALTER TABLE db.t UPDATE PurchaseDateTime = ['2018-05-28 10:04:12'], PurchaseID = ['145194'], PurchaseRevenue = [3550] WHERE VisitID = 6373188956342199024
Code: 386, e.displayText() = DB::Exception: There is no supertype for types String, DateTime because some of them are String/FixedString and some of them are not -
Что значит не делается? Пишет ошибку или что?
-
забыл добавить ошибку, добавил в сообщение выше
-
Ну у вас типы не те
-
как нужно в запросе написать, чтоб выполнился запрос?
-
Обернуть строки в массиве в toDateTime
-
спасибо, получилось
-
Подскажите какой тип данных использовать ,если хотим логи хранить в КХ. И стоит ли ?
-
Нужно больше деталей. Это как хочу машину, тут много нюансов. Посмотрите в доке примеры тестовых данных https://clickhouse.yandex/docs/ru/getting_started/example_datasets/ontime/
-
-
Захардкожено. Покажите пример для чего вам.
-
-
У logstash есть clickhouse-output например
-
-
-
Не вдаваясь в подробности, я делаю из такой таблички
id dates
1 2019-04-01,2019-04-05,2019-04-07
2 2019-04-28,2019-05-02
вот такую
id dates
1 2019-04-01,2019-04-02,2019-04-03,2019-04-04,2019-04-05,2019-04-06,2019-04-07
2 2019-04-28,2019-04-29,2019-04-30,2019-05-01,2019-05-02
используя range от первой до последней даты
Только периоды у меня порядка года, и строк сотни тысяч, поэтому вылетает исключение -
Готового решения нет, но если сможете выгрузить данные в jsoneachrow (это ближе всего к es) формате в файлы -- можно их залить clickhouse-client ом
-
Хотя, имхо,проще логстеш поднять
-
set max_block_size=10
а зачем это? вы хотите потом для каждой даты найти что-то ? есть специальный словарь -
да, там для каждой даты считается в каждой строчке свой показатель, потом все суммирую через sumMap
уже переписал через левый джоин по крайним датам с подготовленной табличкой дата_начало-дата_конец-range_дат
так вроде даже быстрее работает) нет худа без добра) -
Joined.
-
Joined.
-
Подскажите, где бы почитать про состояния агрегатных функций? Интересует:
1. Как они хранятся в целом?
2. Во сколько раз должно быть меньше строк после группировки, чтобы выиграть по занимаемому дисковому пространству ?
3. Есть ли смысл сжимать столбцы с агрегатными функциями ZSTD например ? -
1. имхо только в исходниках, я думаю хитро хранятся только uniqState, остальное попроще.
2. обычно задача уменьшить кол-во строк, раз в 10 минимум, чтобы ускорить выполнение запросов. Т.к. при этом автоматически уменьшается кол-во полей, то выигрыш обычно раз 10 минимум, естественно если тоже самое(строки и поля), сохранить в обычной таблице, то будет примерно тоже самое, или чуть меньше.
SummingMergeTree стейтов не хранит поэтому он занимает меньше.
3. ZSTD всегда все жмет лучше, просто жрет больше цпу.
ну и с uniq-ми например разницы нету https://gist.github.com/den-crane/32cac4f069f4227b35ab86553bbc649b -
-
-
Cannot use ALIAS columns when inserting into materialized view · Issue #2285 · yandex/ClickHouse
Reproduce as: CREATE TABLE test1 ( date Date, datetime DateTime, zoneId UInt64, test ALIAS zoneId == 1 ) ENGINE = MergeTree(date, (date, zoneId), 8192); CREATE MATERIALIZED VIEW test1_view ENGINE =...
-
Спасибо за информацию!
-
-
Поясните пожалуйста, что произойдет в следующей ситуации. Я делаю запрос на удаление строки и потом вставляю, новую строку, попадающее под условие удаления. Ведь запрос delete не сразу выполняется. Свежевставленную строку КХ тоже удалит? или распознает, что она была вставлена после заказа удаления и не троет её?
-
новая вставка попадет в новый парт , а его в списке мутаций не будет и строка останется
-
крайне наврятли
-
добавьте просто еще одно поле датетайм
-
Может с основным индексом такое было?
-
ну в целом непонятно нафиг такое использовать
-
-
поле с датой много места не займет
-
выигрыша в вашей идее нет никакого
-
Обычно выборки нужны по DateTime (всякие графаны и ручками удобнее), но иногда нужны точные выборки с точностью до ns
-
один индекс вместо двух
-
-
ну он тоже много не займет
-
спасибо
-
- 12 May 2019 (28 messages)
-
это для рукожопых программистов что ли ? ну сделайте лоукейс или хайкейс для название колонок при вставке у себя просто если они не могут запомнить как правильно называть колонки
-
Есть какой-то способ запустить два сервера на одной виртуалке без докера?
-
kvm
-
qemu
-
chroot достаточно (можно даже и без него, но конфиги придётся править сильнее) + разные порты. Зачем лишние сущности?
-
справедливо
-
не, имелось в виду без докера и других виртуализаций
-
-
ну ты всё равно меня понял))
-
Я хочу просто бинарь прям на месте запускать, потому что пересобираю его локально (докером пересобирать сильно дольше)
-
-
Joined.
-
вообще скорость сборки докером, если на локальном пк может быть такой же как и обычная сборка
там же главное кеш настроить как нужно -
с нуля он у меня значительно дольше собирался, я и не стал даже пробовать
-
Понятно, что можно туда смаунтить папку сборки и будет нормальный кэш сборщика
-
-
Я про всё, что начинается после ninja ..., в этот момент он уже должен только собирать
-
-
сборщик, который ninja-builder
-
-
э, нет, внутри docker/builder/build.sh используется ninja в качестве сборщика, всё оригинальное
-
-
Всё ещё хуже - некоторые системы игнорируют правильность найменования ключей в json. Вот и приходится по дороге переписывать. А это требует ресурсов. Иногда даже не малых....
-
-
-
если вас точность при семплировании устраивает, то почему бы и нет?
-
Хм, а что за точность? Кол-во строк которые вытаскиваются через такой способ(ведь я же могу подобрать размер кусочка, сделаю его достаточно маленьким 1 / 1_000_000 например) или есть вероятность не получить часть строк таким образом итерируясь? В limit меня не устраивает скорость работы, когда offset уже слишком большой
-
- 13 May 2019 (70 messages)
-
Joined.
-
Joined.
-
/report
-
/reporr
-
-
Joined.
-
ща будет спамить
-
Joined.
-
привет всем!
пытаюсь поменять параметр max_partitions_per_insert_block
<max_partitions_per_insert_block>0</max_partitions_per_insert_block>
но select * from system.settings; всеравно возвращает 100
что не так делаю? -
нужно ли сервер рестартовать?
-
рестарт не помогает
-
Привет! Подскажите пожалуйста, если лефт джойнить на таблицу с enum полем, и нет совпадений то ругается на то что в енум нет значения с "0" это норм или баг?
-
по идеии должен null возвращать не?
-
-
может какой-то костыль есть, что бы он не пытался искать с 0 значением
-
?
-
-
-
да, как варик
-
спасибо
-
подскажи, по какой причине при вставке в таблицу из CSV в атрибут DateTime может прибавляться 6 часов?
-
к значению
-
подскажите*
-
Коллеги, добрый день
Подскажите пожалуйста, как лучше заменить строковую колонку, где всего 500к уникальных строк на словарь, как поэтапно это реализовать, хотелось бы хранить индекс, а не целую строку
табличка овер 30 миллиардов строк
спасибо большое -
разобрался, в данных ок, проблема в IDE
-
я бы добавил колонку с hash строки и с ней дальше работал в индексы в другую таблицу и пр.
-
-
-
периодически ищут.
Да и думаю, что многим было услышать о вакансиях, требованиях и компенсации -
-
-
Joined.
-
-
-
-
-
Joined.
-
Привет. помогло.
-
-
@den_crane
-
Привет.
Выбираю БД под аналитику для IoT-проекта. Сделал proof-of-concept на Кликхаусе, всё отлично работает, но есть два вопроса:
1. Как правильнее хранить разнородные данные, учитывая что у разных устройств могут быть разные наборы метрик, при чём в любое время этот набор может быть изменён пользователем?
Один вариант - использовать широкую таблицу по столбцу на каждую метрику и при пользовательских изменениях набора метрик автоматически выполнять ALTER TABLE. Согласно документации операции ADD\DROP COLUMN достаточно дешёвые, пользовательские изменения ожидаются достаточно редко. Правильно ли я понимаю, что в этом варианте основная проблема в максимальном количестве метрик (столбцов)? Или делать туда-сюда ALTER TABLE - не лучшая идея?
Другой вариант - использовать длинную таблицу со столбцами (timestamp, device_id, metric_id, value). Точнее даже две таблицы - для числовых и строковых значений, или два столбца int_value\string_value. Вопрос в том, будут ли при этом оптимально работать аналитические запросы, 90% которых заключается в расчёте продолжительности интервалов времени по каждому станку, когда Метрика1 = Значение1, Метрика2 > Значение2, и т.п? Количество разных метрик в условиях запроса может доходить до 10.
2. Подходит ли кликхаус для данных, которые представляют собой не мгновенные события, а продолжительные по времени значения? Например, устройство сообщает изменение состояния только в момент изменения. При этом всё остальное время оно находится в новом состоянии, которое должно учитываться в запросах по интервалам после времени изменения. В TimescaleDB для таких значений есть функция locf: https://docs.timescale.com/v1.3/using-timescaledb/reading-data#locf
Думал написать подобный запрос на Кликхаусе, но не могу придумать, как сделать без джойнов и всяких order by timestamp desc limit 1, что выглядит нездорово.
Сейчас решил этот вопрос так: устройства отправляют данные в Кафку, самописный консьюмер читает оттуда данные и пишет в кликхаус ежесекундно. Это позволяет считать продолжительность интервалов простым count'ом. Хотелось бы упростить эту логику, и по возможности избавиться от консьюмера. -
Коллеги, добрый вечер. Подскажите, могу ли я как-то посмотреть строку которой создавалась таблица или первичные ключи таблицы?
-
show create table {table name}
-
-
Так может вам и использовать какую-нибудь ts db?
-
-
Почти все TSDB умеют работать только с числовыми значениями
-
-
-
Ребята, привет.
У меня есть (была?) очень странная проблема с кластером из трех машин.
При выполнении одного тяжелого topK()-запроса из distributed таблицы весь кластер "падал". Проявлялось это следующим образом: КХ пытался убить запрос, но, похоже, запрос дергался повторно с горизонтально заскейленых сервисов. В конце концов каждая нода КХ начинала ругаться на Too many simultaneous queries, а дальше становилось только хуже: в логах сыпались Unknown packet 227213735 from client и
DB::NetException: All connection tries failed. Log:
Code: 32, e.displayText() = DB::Exception: Attempt to read after eof
Code: 32, e.displayText() = DB::Exception: Attempt to read after eof
Code: 32, e.displayText() = DB::Exception: Attempt to read after eof
словом, ноды теряли связь друг с другом до самого рестарта контейнеров.
Попытки достучаться к кластеру были безуспешны даже во время подключения к ноде по локалхосту. Такое ощущение, будто каждая нода "залипала" — в логах была тишина, процесс был запущен, но никакой активности не наблюдалось.
У кого-либо была хотя бы приблизительно похожая проблема? Прошу прощения за довольно размытое описание. -
-
select length(splitByChar(' ', replace('строка со словами', ' ', '')))
-
спасибо
-
Строковые можно использовать в тегах, но при этом получается тьма комбинаций, что не рекомендуется в TSDB. В нашем юзкейсе большинство запросов можно сравнить с OLAP-кубом, где в качестве дименшенов используются различные строковые "метрики" (лучше наверно их называть телеметриями, так как метрики - это скорее про числовое), а в качестве мер - только продолжительность. Числовые данные нужны редко и в основном тоже в дименшенах, а не в результатах.
-
Запросы практически всегда вида: "как долго устройство было в Состоянии 1, в Режиме 2, в Статусе 3, в ФазеЛуны 4", и у Состояния\Режима\Статуса\ФазыЛуны может быть до пары десятков возможных значений (у каждого из параметров).
-
1
>Метрика1 = Значение1, Метрика2 > Значение2
для таких запросов лучше много столбцов (каждая метрика = колонка), возможно я бы для каждого типа девайса сделал свою таблицу, со своим набором столбцов
2 collapsing / aggregating -
у меня в подвале стук. Похоже на своппинг
-
-
а лучше так: select length(splitByChar(' ', replaceRegexpAll('строка со словами', '[ \t]+', ' ')))
-
Да, нужно.
-
спасибо.
печально... -
Спасибо!
Про отдельную таблицу для каждого типа тоже думал, для некоторых кейсов хороший вариант, но бывают устройства из одной серии, но разных версий, с небольшими различиями в столбцах. В таком случае поддерживать несколько таблиц будет проблемно.
По п.2. Collapsing ведь поможет только если необходимо хранить последнее состояние? А если старые данные тоже нужны?
Допустим в таблице есть две строки со значениями ('2000-01-01 02:30:00', 'V1') и ('2000-01-01 04:20:00', 'V2').
И хотим запросить как долго было значение V1 в интервале от 2000-01-01 01:00:00 до 2000-01-01 03:00:00. В результате должно получиться 30 минут. -
-
всем привет, не поможете ли с такой проблемой.
мы закачали в кх табличку с datetime, а при запросах в нее видим, что все datetime сдвинуты на 3 часа назад, не подскажете, как такое можно поправить? -
Попробуйте SELECT toUnixTimestamp(time_field) и сравните
-
yandex/ClickHouse tagged: v19.4.5.35-stable
Link: https://github.com/yandex/ClickHouse/releases/tag/v19.4.5.35-stable
Release notes:
v19.4.5.35-stableyandex/ClickHouseClickHouse is a free analytic DBMS for big data. Contribute to yandex/ClickHouse development by creating an account on GitHub.
-
ох уж эти московские пробки 😜
-
Joined.
-
Привет, подскажите, пожалуйста, что делаю не так.
Запрос с таким select:
SUM(IF(type = 1, income, 0)) as incomeFirst,
SUM(IF(type = 2, income, 0)) as incomeSecond,
SUM(IF(type = 3, income, 0)) as incomeThird
В ответ получаю ошибку:
Aggregate function SUM(IF(equals(type, 2), income, 0)) is found inside another aggregate function in query.
Спасибо. -
sumIf(column, cond)
- 14 May 2019 (115 messages)
-
-
-
-
-
-
-
-
Утро доброе,
есть вопрос в отношении связки Grafana + ClickHouse - настраиваю variables в Grafana - variables достаются из таблицы ClickHouse и передаются в запрос строчкой WHERE Position ='$position' - все вполне работает. но, не удается добиться того, чтобы по умолчанию выводились все значения, без этих условий, т.е. по умолчанию нужно, чтобы запрос выдавался полностью, без WHERE, а вот уже при выбраных variables срабатывала сортировка.
Есть обходной вариант с LIKE '%' (добавить в таблицу значение all = % не проблема, тем более. что в дальнейшем заместо таблицы будет словарь) но, может кто подскажет как это реализовать не прибегая к LIKE -
Можно что-нибудь типа WHERE Position = coalesce('$position', Position), а в параметр null по дефолту прокидывать
-
Доброго утра! может не так понял, но чем плох in?
например,
where system in ($systems)
в настройках переменной установить галку "include All option" -
например такая настройка переменной
-
Подскажите, пожалуйста, есть ли какие-то рекомендации по настройке файловой системы, на которой расположены базы? Что-то у меня зачастила ситуация "D 53198 [xfsaild/dm-4]" на диске с базой.
-
Плох лишь тем, что я этим никогда не пользовался, спасибо, протестирую..
-
-
Кажется в доке https://clickhouse.yandex/docs/ru/query_language/create/#create-view неточность. Сказано "При создании материализованного представления, нужно обязательно указать ENGINE - движок таблицы для хранения данных." при этом ENGINE необязательный параметр
-
Можно указать Engine=Null
-
Он вроде и есть и нет )
-
-
так же, однако, у нас табло ходит с помощью odbc в кликхаус, там все нормально
-
-
-
Joined.
-
Коллеги, столкнулся с проблемой
есть AggregatingMergeTree с несколькими колонками. одни считают униральные значение, вторые общее количество
uniqIfState(id, type = 'SEND')
countIfState(type = 'SEND')
...
так же есть вторая таблица MergeTree в которую падают теже самые данные
так вот при селекте из аггрегированной таблицы
select uniqIfMerge, countIfMerge ...
не хватает данных по countIf
сравнивая результаты с MergeTree таблицой
ошибок в логах естественно никаких нет
сталкивался ктонибудь с такой проблемой? -
Поле type в первичном ключе?
-
нет, не входит
-
Ну в таймзону переводит ваш клиент из utc. Java jdbc?
-
делаем запросы через clickhouse-client на машине, там возможно и jdbc.а как сделать так, чтобы клиент не переводил, а показывал как есть?
-
Ну вот, в какой-то момент type у вас вычисляется в any() и приехали.
-
Какой клиент?
-
Command-line Client
-
Jdbc никак.
-
должно быть в составе?
-
Да
-
спасибо ! я всю голову уже сломал
-
TZ=UTC clickhouse-client --use_client_time_zone=1
-
Joined.
-
Подскажите, есть ли какие-то преимущества или недостатки друг перед другом у двух движков: MySQL и JDBC (соединяемся также с MySQL)?
-
Т.е. у вас указано TO
-
так на 6 часов отставать стало
-
Mysql движок использует либу вкомпиленную прямо в кх. Jdbc это бутерброд из кучи слоев, т.е. несколько медленнее.
-
ок. Какая tz на сервере и какая на клиенте?
-
jdbc это отдельное приложение-прокси, т.е. там будет ещё один раунд сериализации-десереализации. по-большому счёту, запросы во внешние базы не должны притаскивать слишком много (десятки миллионов) рядов, так что не должны быть сильно заметны различия
-
Там ещё JDBC использует демона через которого ходит, а не даёт ли он профит в виде пула соединений и т. п. и не открывает ли движок MySQL новое соединение на каждый запрос?
-
к сожалению я был ленив чтобы заюзать пул коннектов, так что не держит :) будет спрос - можно будет допилить.
-
В mysql коннект очень дешев и если сессий тысячи то легко решается thread_handling=pool-of-threads
-
ОК, спасибо 👍
-
yandex/ClickHouse tagged: v19.6.2.11-stable
Link: https://github.com/yandex/ClickHouse/releases/tag/v19.6.2.11-stable
Release notes:
v19.6.2.11-stableyandex/ClickHouseClickHouse is a free analytic DBMS for big data. Contribute to yandex/ClickHouse development by creating an account on GitHub.
-
Здравствуйте,
У меня есть колонка AdditionalJson, в ней хранится Json {}, внутри которого есть проперти object {}
Из него (вложенного объекта) мне надо вытащить два проперти Id, Name
Что оптимальнее будет работать? Учитывая что object может быть относительно большого размера
1) select visitParamExtractString(visitParamExtractString(AdditionalJson, 'object'), 'Id'), visitParamExtractString(visitParamExtractString(AdditionalJson, 'object'), 'Name')
ИЛИ
2) — select visitParamExtractString(AdditionalJson, 'object') as obj, visitParamExtractString(obj, 'Id'), visitParamExtractString(obj, 'Name') -
-
Welcome!
-
я изменил и добавил type в ключ,
но это не помогает..
может есть еще идеи? -
а sumStateIf(1, ) ?
-
попробую, спасибо!
подскажите, где можно почитать про разницу countIfState и countStateIf ? -
Joined.
-
-
-
group by toStartOfHour(eventtime)
-
Пасиба
-
Может кто разъяснить. Использую словарь из flat файла. Не совсем понял ограничения ключа значением 500 000. У меня ключ Uint64, но он натуральный, к примеру номер телефона. То есть в словаре может быть одна запись но ch не даст его использовать. Как использовать подобные словари?
-
использовать hashed или cache
-
Code: 87. DB::Exception: Received from localhost:9011, 127.0.0.1. DB::ErrnoException. DB::ErrnoException: Cannot seek through file /var/lib/clickhouse/data/default/marks1718/20170901_20170930_3172_3303_2/mark.bin, errno: 22, strerror: Invalid argument: (while reading column mark): (while reading from part /var/lib/clickhouse/data/default/marks1718/20170901_20170930_3172_3303_2/ from mark 0 with max_rows_to_read = 100)
что делать в этом случае? увеличивать max_rows_to_read? -
-
Доброго дня,
Подскажите, плиз, как вставить одинаковые данные в ReplicatedSummingMergeTree?
Вот такая строка может быть вставленна неограниченное число раз без изменений?
('2019-04-23', 10, 'cloud', 2759, 'vast', 1, 9, 184, 1, 5, 4, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
Также в мануале нашел "Параметры дедуплицирования регулируются настройками сервера merge_tree" и все... Может кто-то поделится ссылкой на как и где настроить insert_deduplicate? -
версия КХ?
ошибка постоянная для одного и того же запроса? -
clickhouse-client --insert_deduplicate =0
-
@den_crane благодарю!
Я запускаю clickhouse-client --insert_deduplicate=0
делаю INSERT INTO Distributed.table
проверяю
SELECT SUM(show_count) FROM Distributed.table
значение без изменений :( -
clickhouse-server-19.3.3-1.el7.x86_64
да -
аа Distributed, там наверное insert_deduplicate не проталкивается.
В общем единственно решение нормальное, это добавить поле batch_id и для каждого batch заполнять его uuid каким-нибудь, в ключ не добавлять, чтобы Summing схлопывал -
@den_crane Благодарю!
-
в реальной жизни батчи обычно заполнены разными данными, поэтому такой проблемы нет обычно.
-
Попробую с UUID, в доке описано columns для SummingMergeTree
-
по большому счету без разницы есть columns или нет
Если columns не задан, то ClickHouse суммирует значения во всех столбцах с числовым типом данных, не входящих в первичный ключ.
т.е. если UUID строка то это не важно, если UUID это число, то оно будет суммироваться, и это тоже не важно -
Вот полный запрос, джойню по строковому ключу, часть обрабатывает и запинается
SELECT *
FROM default.marks1718 AS m
INNER JOIN default.concept_ege AS ege ON ege.predmet = m.subject_name
LIMIT 100
↘️ Progress: 35.96 million rows, 5.26 GB (3.66 million rows/s., 536.31 MB/s.) Received exception from server (version 19.3.3):
Code: 87. DB::Exception: Received from localhost:9011, 127.0.0.1. DB::ErrnoException. DB::ErrnoException: Cannot seek through file /var/lib/clickhouse/data/default/marks1718/20170901_20170930_3172_3303_2/control_form_name.bin, errno: 22, strerror: Invalid argument: (while reading column control_form_name): (while reading from part /var/lib/clickhouse/data/default/marks1718/20170901_20170930_3172_3303_2/ from mark 0 with max_rows_to_read = 100).
0 rows in set. Elapsed: 9.891 sec. Processed 35.96 million rows, 5.26 GB (3.64 million rows/s., 532.26 MB/s.) -
т.е. прилетает insert в replicated КХ считает контрольную сумму от всего блока, сравнивает с сотней последних сумм в ZK и если повтор то откидывает, какой тип движка summing или нет не важно
-
а если limit 10000 ?
-
Мне не совсем понятен смысл таких ограничений при uint64, почему тогда не uint32 или ограничение на количество, вместо размера?
-
И существует ли запрос для ручного обновления словаря без перезапуска ch?
-
flat это плоский массив, который жрет память на все элементы до максимального id
т.е. если во flat будет одна строка с id = 500000, он сожрет в 400000 раз больше памяти чем такой же hashed -
system reload dictionary DICT_NAME
system reload dictionaries сразу все -
Спасибо за пояснение
-
создал еще одну таблицу с countStateIf..
аналогичное поведение в обоих таблицах.
в какую сторону еще можно посмотреть? -
уточню, что данные вставляются из кафки.
если я вручную вставляю данные в агрегированную таблицу - то countMerge возвращает правильное значение -
а запрос какой у MV ?
-
-
-
создать новую таблицу и перелить данные фигурным запросом
-
FR: Renaming Columns · Issue #146 · yandex/ClickHouse
Hello! Thank you for the great DBMS! It would be nice to have support of renaming columns. For example: ALTER TABLE table_name RENAME [ COLUMN ] column_name TO new_column_name; or RENAME COLUMN tab...
-
оу (
-
в логах нашел, в момен обработки ивента:
<Information> email_stats.email_events_aggregated_2 (Replicated OutputStream): Block with ID 20190514_3736458929129713781_16658284836114761406 already exists; ignoring it. -
т.е. в кафку прилетают уникальные (батчи) строки, а после агрегации они становятся не уникальными?
-
добавить after old, alter update, drop old
-
Спасибо, попробую
-
фактически все ивенты отличаются таймстэмпом и типом. остальные поля (в рамках теста) одинаковые.
в обычную MergeTree данные вставляются.
в аггригированной не хватает ивентов
т.е. вставляем 10 ивентов с одним ID но разным timestamp.
я ожидаю, что uniqMerge вернет 1, а countMerge 10
а фактически получаю uniq = 1, count = 2 -
причем count может быть и больше, закономерности не установленно.
-
пример образный
-
email_events_aggregated_2 = ReplicatedAggregatingMergeTree
email_stats.email_events_aggregated_2 Block with ID 20190514_3736458929129713781_16658284836114761406 already exists; ignoring it.
дедупликация, попробуйте на AggregatingMergeTree -
на не реплицируемой?
-
да
-
ок, спасибо, попробую сейчас
-
Joined.
-
Joined.
-
-
Есть ли функция для этого?
-
-
Joined.
-
Доброго времени суток)
Столкнулся с проблемой. при создании MATERIALIZED VIEW
запрос, который отрабатывает в консоли, не работает.
получаю ошибку вида code: 47, message: Unknown identifier: hash, context: query ...
это как-то связано с ограничениями VIEW?
p.s. искользую подзапросы и join -
>p.s. искользую подзапросы и join
подзапросы не работают в MV, join-ы почти не работают в MV.
Короче текст в студию -
Если делается select c limit n,m, то с диска читается только кусок в котором m записей, или серверу надо через себя как то прогнать все n строк чтобы понять какие m отдать?
-
да
-
как я понимаю нужно всё переделывать?)
-
да - значит только кусок или всё?=)
-
да всЕ (прочитает offset, и будет читать пока не прочитает limit) , ну если там был order by, то вообще всЕ будет отсортировано.
-
спасибо
-
да переделывать все, подзапросы делать нельзя, джойны не рекомендуется, потому что очень медленно и жрут память.
И MV это такая on insert trigger. При инсерте пачки строк в таблицу, эта пачка попадает во MV и select применяется к этой пачке, саму таблицу MV не читает. -
понял, спасибо
- 15 May 2019 (202 messages)
-
-
Привет. Столкнулся с проблемкой.
Есть таблица
create table if not exists bans (
event_timestamp DateTime,
event_date materialized toDate(event_timestamp),
user_id Int64,
account_id Int64,
comment String,
task_id Int64
) Engine = ReplacingMergeTree
partition by event_date
order by (user_id, account_id); -
-
-
-
-
-
-
-
-
-
-
-
Можно перейти на aggregatingmergetree и заиспользовать uniq/groupBitmap или вообще uniqExact
-
-
-
-
-
-
uniqExactState это uniqExact с комбинатором State. Посмотри документацию к aggregatingmt https://clickhouse.yandex/docs/en/operations/table_engines/aggregatingmergetree/#example-of-an-aggregated-materialized-view
-
Коллеги, а ни у кого не осталось статьи сравнеия кликхауса с другими БД для хранения метрик?
-
там вроде статья из 2х частей была, не могу найти
-
спасибо, не знал про такое
-
Joined.
-
https://www.altinity.com/blog/clickhouse-for-time-series
https://www.altinity.com/blog/clickhouse-timeseries-scalability-benchmarksClickHouse Crushing Time SeriesNov 15, 2018Once upon a time we spotted TSBS (https://github.com/timescale/tsbs) -- Time Series Benchmark Suite, started by InfluxDB engineers and polished to perfection by TimescaleDB team. The suite allows to compare apples-to-apples when testing different databases: it is a framework to generate test data, load it to different databases, run test queries, and collect statistics to analyse. We could not resist adding ClickHouse to the list of supported databases. It turned out that ClickHouse --- being a general purpose analytical DBMS -- stands very well against proven time series databases. Those benchmarks highlighted strengths and weaknesses of different technologies. Interested? Let’s dig into details.
-
благодарю
-
Подскажите, чем groupBitmap отличается от uniqExact ? Читаю доку и не понимаю
-
State меньше получается при агрегации ?
-
скорее groupBitmap можно с uniq сравнивать, оба оценивают мощность
-
-
Joined.
-
Ок. А профит в чем?
-
-
Коллеги, здравствуйте. Есть небольшое недопонимание касательно работы ch. Допустим есть набор данных OnTime, который предлагается в документации. Я хочу выбрать несколько записей. Почему серверная часть обрабатывает всегда больше?
-
019.05.15 14:28:47.284927 [ 42 ] {f2fff439-e781-4ec2-9584-372e05e9dfdd} <Debug> executeQuery: (from 127.0.0.1:52808) select * from ontime where Y
ear=1987 limit 3
2019.05.15 14:28:47.290870 [ 42 ] {f2fff439-e781-4ec2-9584-372e05e9dfdd} <Debug> default.ontime (SelectExecutor): Key condition: (column 0 in [198
7, 1987])
2019.05.15 14:28:47.290896 [ 42 ] {f2fff439-e781-4ec2-9584-372e05e9dfdd} <Debug> default.ontime (SelectExecutor): MinMax index condition: unknown
2019.05.15 14:28:47.290973 [ 42 ] {f2fff439-e781-4ec2-9584-372e05e9dfdd} <Debug> default.ontime (SelectExecutor): Selected 6 parts by date, 3 part
s by key, 161 marks to read from 3 ranges
2019.05.15 14:28:47.293151 [ 42 ] {f2fff439-e781-4ec2-9584-372e05e9dfdd} <Trace> default.ontime (SelectExecutor): Reading approx. 1318912 rows wit
h 2 streams
2019.05.15 14:28:47.293428 [ 42 ] {f2fff439-e781-4ec2-9584-372e05e9dfdd} <Trace> InterpreterSelectQuery: FetchColumns -> Complete
2019.05.15 14:28:47.294675 [ 42 ] {f2fff439-e781-4ec2-9584-372e05e9dfdd} <Debug> executeQuery: Query pipeline:
Limit
Expression
Union
Limit × 2
Expression
Filter
MergeTreeThread
2019.05.15 14:28:47.326763 [ 42 ] {f2fff439-e781-4ec2-9584-372e05e9dfdd} <Trace> UnionBlockInputStream: Waiting for threads to finish
2019.05.15 14:28:47.330217 [ 42 ] {f2fff439-e781-4ec2-9584-372e05e9dfdd} <Trace> UnionBlockInputStream: Waited for threads to finish
2019.05.15 14:28:47.330322 [ 42 ] {f2fff439-e781-4ec2-9584-372e05e9dfdd} <Information> executeQuery: Read 16384 rows, -
Спасибо. Надо попробовать
-
https://clickhouse.yandex/docs/ru/operations/table_engines/mergetree/#primary-keys-and-indexes-in-queries
Разреженный индекс допускает чтение лишних строк. При чтении одного диапазона первичного ключа, может быть прочитано до index_granularity * 2 лишних строк в каждом блоке данных. В большинстве случаев ClickHouse не теряет производительности при index_granularity = 8192 -
Спасибо. Буду продолжать наблюдение.
-
да, на нереплицируемой таблице все ровно работает.
есть возможность что то подкрутить, чтобы с репликацией заработало? -
-
спасибо, сейчас попробую
-
generateUUIDv4() - будет работать?
-
или для все записей в батче должен быть одинаковый id?
-
CREATE MATERIALIZED VIEW IF NOT EXISTS email_stats.email_events_aggregated_view_2
TO email_stats.email_events_aggregated_2
AS
SELECT toDate(timestamp) as date,
generateUUIDv4() as batch_id,
brand_id as brand_id,
... -
Господа, такой странный вопрос... Есть графана, которая более-менее рисует графики из кликхауса. Есть графит, куда пишутся эвенты, которые показываются в виде аннотаций на графиках. Как-то уже можно избавиться от графита в этом месте? Ну хотя бы в виде какого-нибудь graphite-clickhouse или ещё чего-нибудь подобного? А то получается, что графит - только для эвентов и это несколько неправильно, по-моему.
-
нет пакета clickhouse-server-base_19.6.2.11_amd64.deb для этой версии. Когда стоит ожидать ?
-
Работает! спасибо большое за помощь!
-
Joined.
-
Joined.
-
Мы ивенты храним в эластике, но графики все через графит
-
У нас практически все графики - напрямую из кликхауса, куда пишет telegraf, так что графит тут лишний уже...
-
интересно как вы будете алертинг на КХ натягивать =)
-
Подскажите, плиз, такая схема будет работать? И чем лучше батчи собирать для инсерта в применении к кликхаусу?
-
>батчи собирать
так а буферные таблицы у вас в схеме разве не для этой цели служат? -
Лучше через Kafka батчи копить
-
В буфферные таблиц тоже же можно инсерты делать, например по 1000 строк за раз.
-
попробуйте дергать аннотации из эластика, раз графит не нужен
-
Таблицы с алертами с теми же полями как в графите - достаточно, по-моему. Разве что поле с автоинкрементом заменить на что-то другое.
-
Тоже вариант, конечно... Но тут опять добавляется сущность типа "ещё одна бд".
-
ну, люди и логи хранят в КХ, возможно, получится хранить аннотации в нем
-
угу. Проблема только в графане, которая (пока?) не умеет брать аннотации из кх.
-
А telegraf пользуете патченый, или обычный, через связку json output format -> kafka -> clickhouse ?
-
С плугином для записи напрямую в кх. Плугин - слегка патченый уже нами.
-
К слову, я тестировал вариант через kafka - все работает, но, мне нигде не попадалась информация в отношении количества единовременных клиентов, что подключаются к kafka серверу, опасаюсь, что количества в 500-1000 клиентов kafka уже не выдержит. Поэтому протестировал ещё одну связку telegraf (json output через tcp ) -> filebeat -> kafka -> clickhouse. filebeat так как сейчас через него уже отлавливается syslog. Снова все работает, но выглядит уже монструозно.
-
Через graphite-clickhouse или напрямую ?
-
напрямую, графит тут полное legacy для того софта, который ещё не переведён на кх.
-
А у телеграфа плагин для ch появился ?
-
базировались на этом (вроде): https://github.com/r3nic1e/telegraf-clickhouse-pluginGitHub - r3nic1e/telegraf-clickhouse-plugin: Output plugin for sending telegraf metrics to clickhouse
Output plugin for sending telegraf metrics to clickhouse - GitHub - r3nic1e/telegraf-clickhouse-plugin: Output plugin for sending telegraf metrics to clickhouse
-
Понял. Спасибо
-
Ещё интересное наблюдение... есть табличка с настройками движка хранения данных ENGINE = MergeTree() PRIMARY KEY (documentid, workshiftid) ORDER BY (documentid, workshiftid)
-
Таблица содержит около миллиарда записей. Если я делаю выборку по полю workshiftid, то сканируются все записи. Предположим я знаю их число. Добавив оператор limit, записей обработается серверной частью меньше.
-
тот же результат, похоже на багу, сваливается на~35млн строке
SELECT *
FROM default.marks1718 AS m
INNER JOIN default.concept_ege AS ege ON ege.predmet = m.subject_name
LIMIT 10000
↑ Progress: 35.81 million rows, 5.24 GB (6.50 million rows/s., 950.89 MB/s.) Received exception from server (version 19.3.3):
Code: 87. DB::Exception: Received from localhost:9011, 127.0.0.1. DB::ErrnoException. DB::ErrnoException: Cannot seek through file /var/lib/clickhouse/data/default/marks1718/20170901_20170930_3172_3303_2/mark.bin, errno: 22, strerror: Invalid argument: (while reading column mark): (while reading from part /var/lib/clickhouse/data/default/marks1718/20170901_20170930_3172_3303_2/ from mark 0 with max_rows_to_read = 1000).
0 rows in set. Elapsed: 5.534 sec. Processed 35.81 million rows, 5.24 GB (6.47 million rows/s., 946.90 MB/s.) -
Так умеет же (я правда не помню точно это из коробки в вертамеади плагине или мы патчили). У нас сейчас полный цикл, включая алертинг работает, telegraf - clickhouse - grafana, без лишних костылей в виде графита, кафки и прочего
-
Тогда, какие версии у графаны и т.п.?
-
И эта, не алерты, а эвенты. Это разные вещи. Эвенты могут быть алертами, а могут и не быть. У вас точно эвенты, а не алерты средствами графаны?
-
И то и другое, если под ивентами подразумевается вывод событий через аннотации на график в графане
-
ок, значит оно. Посмотрите, пожалуйста, версии того, что относится к графане.
-
Никогда.
пакетов clickhouse-server-base и clickhouse-server-common больше не будет.
У них были непонятные названия.
Теперь удобнее всего устанавливать clickhouse-client clickhouse-server и все их зависимости ( clickhouse-common-static ) должны устанавливаться автоматически. -
Подскпдите. КХ когда делает вычисления, которые требуют много памяти может сбрасывать на диск или он требует, что бы все в памяти было? Пример таких действий - аггрегатор, сортировка и т.д
-
Датасорс кх имеет интеграцию с евентами в графане. Ложите всё в кх и вперёд
-
С какой версии? А то, похоже, пора обновлять...
-
Требуется перенести данные за 3 дня из одной графитовской таблицы в другую. Как бы это попроще и наименее затратно сделать? INSERT INTO ... SELECT ... FROM ... WHERE - выжрало все ресурсы сервера, как бы в фоне сделать?
-
Шальная мысль... создать файл swap на сервере
-
Графана 6.1.6, vertamedia-clickhouse-datasource 1.8.1, с набором наших фиксов, они вроде не влияют на работу аннотаций
-
Благодарю! Уже таки нашел в исходниках плугина редактирование аннотаций. Заодно выяснил, что обновлять надо вообще всё и это чревато. Вобщем, повод всё переделать нашелся :-)
-
-
Подскажите, нет ли у кого решения чтобы генерить ddl из типов полей селекта?
-
max_bytes_before_external_sort max_bytes_before_external_group_by
https://clickhouse.yandex/docs/en/query_language/select/#order-by-clause -
Joined.
-
-
-
Joined.
-
если это номер смены (8 часов) то надо просто сделать партиционирование по функции от этого поля.
-
-
-
-
-
сколько ядер столько и процессов
-
-
-
-
минут по 5 жду или вообще не дожидаюсь
-
а что в логе во время остановки? какое время запуска процессов? возможно это старые висящие
-
какая версия КХ? Было проблема раньше, КХ ждал завершения мержей. Проверьте iostat в момент остановки, есть i/o или нет, free возможно у вас из свопа поднимается что-то.
-
-
-
-
-
в clickhouse-server.log:
оочень много записей вида:
2019.05.15 12:40:03.175933 [ 19 ] {} <Debug> events_dev.pub_demand (Data): Removing part from filesystem 1540425600_1_800_160_44157
2019.05.15 12:40:03.185938 [ 19 ] {} <Debug> events_dev.pub_demand (Data): Removing part from filesystem 1540425600_1_800_160_44158
2019.05.15 12:40:03.195934 [ 19 ] {} <Debug> events_dev.pub_demand (Data): Removing part from filesystem 1540425600_1_800_160_44159
2019.05.15 12:40:03.206007 [ 19 ] {} <Debug> events_dev.pub_demand (Data): Removing part from filesystem 1540425600_1_800_160_44160
2019.05.15 12:40:03.215982 [ 19 ] {} <Debug> events_dev.pub_demand (Data): Removing part from filesystem 1540425600_1_800_160_44161 -
-
Ну у вас Сержи скорее всего бегут.. Партиционирована таблица?
-
-
-
-
А много ли файлов вот тут: /var/lib/clickhouse/data/{database_name}/{table_name}/?
-
-
-
точно так же как и обычную
-
-
-
-
-
вероятно при создании вы использовали один и тот же путь в зукипере
-
-
не встречалось такое..
-
-
-
-
-
sudo -u clickhouse touch /var/lib/clickhouse/flags/force_restore_data
-
-
-
-
если именно удалить таблицы -
то удалять соотвествующие файлы в /var/lib/clickhouse/metadata/
и директории с данными в /var/lib/clickhouse/data/ -
Привет, а поделитесь, как правильно собрать asof join
-
-
Снова мучаю grafana в настоящий момент получается следующее - составляю запрос в grafana из последнего:
Добавляю в график сортировку по полю связанной таблицы, для этого просто оборачиваю select в ещё один select
select * from (
select ...
)
после чего график перестает строится, но, при этом если нажать кнопку generated SQL и выполнить запрос в tabix, то все отрабатывает.
то же самое с таблицей, когда добавляю к запросу WHERE Name IN ($name), где $name - grafana variables. Таблица строится лишь при небольшом количестве variables в скобках, при выбранном значении all (порядка 50 значений) таблица уже не строится, и, снова, если нажать кнопку generated SQL и выполнить запрос в tabix все отрабатывает.
На лимиты grafana не похоже, потому что если убрать ограничение WHERE Name IN ($name) вовсе, то таблица строится, т.е. количество возвращаемых данных не причем. Версии и плагина clickhouse и grafana - последние.
Кто-нибудь сталкивался с такими ограничениями в grafana? -
да, помогло. дзякуй!
-
Joined.
-
1ГБ это очень мало. Надо настраивать КХ, кеш марков пытается сожрать 5ГБ.
Непонятно своп есть или нет?
>в файле логов с ошибками ничего, последняя запись пол часа назад. т.е. понять почему он упал нельзя.
он не упал, его убил oom killer (sudo dmesg|tail) -
там память течет кстати (чинится compile_expressions = 0 или обновится до 18.14.19)
-
Здравствуйте. Не подскажите что будет если на лету включить compression? или надо обязательно сделать реастарт сервера? server version 19.4.1
-
какой из ?
нет не надо ничего рестартовать, само и сразу. -
ZSTD для всего сервера.
-
-
т.е. не включить, а поменять lz4 на ZSTD. После изменения конфига начнет применятся к новым партам ( без рестарта ).
-
нет, прям включить сразу zstd. Шас никакого compression-а нету
-
Каким образом? По дефолту lz4.
-
по умолчанию включен lz4?
-
если да, то да, получается просто октрыть коментарий в настройках по умолчанию
-
Всем привет!
Пытаюсь собрать мат представление, но СН плюется ошибками.
Запросы пишу по необходимости, а не по специализации.
Есть табличка, в которой лежит время (time_local) и сайт (site), куда обращаются.
Нужно посчитать количество обращений в час на каждый сайт.
Собрал SELECT, который выводит необходимые данные:
SELECT toStartOfHour(time_local), count(*),site FROM test_database.auths GROUP BY toStartOfHour(time_local),site order by toStartOfHour(time_local)
Но при этом фейлится создание следующего представления:
CREATE MATERIALIZED VIEW site_stat
ENGINE = AggregatingMergeTree(time_hour, hits, site) POPULATE AS
SELECT
toStartOfHour(time_local) as time_hour,
count(*) as hits,
site
FROM test_database.auths
GROUP BY
time_hour,
site
order by
time_hour
ЧЯДНТ? Или тыкните, плз, носом куда почитать, чтобы правильно писать матпредставления. Документашка СН тут не сильно помогает, ибо предаолагает dba бэкграунд и знакомство с матпредставлениями в общем и какой надо использовать с ними синтаксис.
Спасибо! -
а какая именно ошибка?
-
тут есть неплохой пример https://clickhouse.yandex/docs/ru/operations/table_engines/aggregatingmergetree/
-
-
Сорри, забыл указать ошибку:
Code: 36. DB::Exception: Received from localhost:9000, 127.0.0.1. DB::Exception: Index granularity must be a positive integer -
AggregatingMergeTree(time_hour, hits, site) - уберите отсюда time_hour, hits, site
-
Точно, и про это забыл ><
-
Тогда другая ошибка:
Exception: Storage AggregatingMergeTree requires 3 to 4 parameters:
name of column with date,
[sampling element of primary key],
primary key expression,
index granularity -
AggregatingMergeTree() PARTITION BY toDate(time_local) ORDER BY (time_hour) SETTINGS index_granularity = 8192
попробуйте так -
есть два синтаксиса
старый AggregatingMergeTree(part_date, order_by_expr, granular)
и
новый AggregatingMergeTree partition by .... order by ...
похоже вам нужен AggregatingMergeTree partition by toYYYYMM(time_hour) order by (site,time_hour) -
не нужен в запросе
order by
time_hour
MV это такой on insert trigger. При инсерте пачки строк в таблицу, эта пачка попадает во MV и select применяется к этой пачке, саму таблицу MV не читает. -
Спасибо! Вроде создалась без ексепшнов. Буду дальше чекать.
-
Joined.
-
воу, а можно ссылку на issue?
-
согласен, мало, но это стг, там данных совсем чуть-чуть
-
alter table impressions modify column node_name LowCardinality(String);
ALTER TABLE impressions
MODIFY COLUMN
node_name LowCardinality(String)
Received exception from server (version 19.4.3):
Code: 76. DB::Exception: Received from localhost:9000, ::1. DB::ErrnoException. DB::ErrnoException: Cannot open file /storage/clickhouse/data/default/impressions/197001_1_74428_7_102752/checksums.txt.tmp, errno: 13, strerror: Permission denied. -
кто-нибудь в курсе в чем может быть причина? хочу поменять Enum8 на LowCardinality
-
https://github.com/yandex/ClickHouse/issues/3410
https://github.com/yandex/ClickHouse/issues/3976 -- там написано 18.16.1, но в 18.14 это тоже есть, просто я нашел позже -
-
-
Посмотрите в processed, есть эти данные или нет.
-
извинясь за глупый вопрос, но где оно лежит? не могу найти
-
Покажите что у вас в /etc/clickhouse-server/
-
для многих параметров (включая max_concurrent_queries ) - никогда и нужен перезапуск сервера.
-
там два конфига, config и users. Препроцессед нашел в папке рабочей, там 200
-
т.е. без рестарта никак?
-
никак. Ну возможно можно пошаманить с gdb и поменять на лету, но лучше так не делать
-
2019.05.15 19:37:45.804094 [ 234 ] {} <Error> BaseDaemon: ########################################
2019.05.15 19:37:45.804237 [ 234 ] {} <Error> BaseDaemon: (from thread 33) Received signal Segmentation fault (11).
2019.05.15 19:37:45.804273 [ 234 ] {} <Error> BaseDaemon: Address: NULL pointer.
2019.05.15 19:37:45.804293 [ 234 ] {} <Error> BaseDaemon: Access: read.
2019.05.15 19:37:45.804310 [ 234 ] {} <Error> BaseDaemon: Address not mapped to object.
2019.05.15 19:37:45.858422 [ 234 ] {} <Error> BaseDaemon: 0. clickhouse-server() [0x54ec03b]
2019.05.15 19:37:45.858558 [ 234 ] {} <Error> BaseDaemon: 1. clickhouse-server(DB::DataTypeLowCardinality::serializeBinaryBulkStateSuffix(DB::IDataType::SerializeBinaryBulkSettings&, std::shared_ptr<DB::IDataType::SerializeBinaryBulkState>&) const+0x1f) [0x54eddcf]
2019.05.15 19:37:45.858589 [ 234 ] {} <Error> BaseDaemon: 2. clickhouse-server(DB::MergedColumnOnlyOutputStream::writeSuffixAndGetChecksums()+0x1b6) [0x58ec396]
2019.05.15 19:37:45.858615 [ 234 ] {} <Error> BaseDaemon: 3. clickhouse-server(DB::MergeTreeData::alterDataPart(std::shared_ptr<DB::MergeTreeDataPart const> const&, DB::NamesAndTypesList const&, std::vector<std::shared_ptr<DB::ASTIndexDeclaration>, std::allocator<std::shared_ptr<DB::ASTIndexDeclaration> > > const&, bool)+0x973) [0x587a533]
2019.05.15 19:37:45.858639 [ 234 ] {} <Error> BaseDaemon: 4. clickhouse-server(DB::StorageMergeTree::alter(DB::AlterCommands const&, std::string const&, std::string const&, DB::Context const&)+0x384) [0x57cb3b4]
2019.05.15 19:37:45.858659 [ 234 ] {} <Error> BaseDaemon: 5. clickhouse-server(DB::InterpreterAlterQuery::execute()+0x833) [0x5b78233]
2019.05.15 19:37:45.858689 [ 234 ] {} <Error> BaseDaemon: 6. clickhouse-server() [0x56f5fb6]
2019.05.15 19:37:45.858709 [ 234 ] {} <Error> BaseDaemon: 7. clickhouse-server(DB::executeQuery(std::string const&, DB::Context&, bool, DB::QueryProcessingStage::Enum, bool)+0x61) [0x56f7eb1]
2019.05.15 19:37:45.858730 [ 234 ] {} <Error> BaseDaemon: 8. clickhouse-server(DB::TCPHandler::runImpl()+0x47c) [0x2e1676c]
2019.05.15 19:37:45.858754 [ 234 ] {} <Error> BaseDaemon: 9. clickhouse-server(DB::TCPHandler::run()+0x1c) [0x2e17b0c]
2019.05.15 19:37:45.858779 [ 234 ] {} <Error> BaseDaemon: 10. clickhouse-server(Poco::Net::TCPServerConnection::start()+0xf) [0x613634f]
2019.05.15 19:37:45.858795 [ 234 ] {} <Error> BaseDaemon: 11. clickhouse-server(Poco::Net::TCPServerDispatcher::run()+0x110) [0x61369b0]
2019.05.15 19:37:45.858812 [ 234 ] {} <Error> BaseDaemon: 12. clickhouse-server(Poco::PooledThread::run()+0x77) [0x621e117]
2019.05.15 19:37:45.858828 [ 234 ] {} <Error> BaseDaemon: 13. clickhouse-server(Poco::ThreadImpl::runnableEntry(void*)+0x38) [0x621b678]
2019.05.15 19:37:45.858843 [ 234 ] {} <Error> BaseDaemon: 14. clickhouse-server() [0x692ecef]
2019.05.15 19:37:45.858863 [ 234 ] {} <Error> BaseDaemon: 15. /lib64/libpthread.so.0(+0x7e25) [0x7f951025ce25] -
при попытке сконверитть Enum8 в LowCardinality(String)
-
ClickHouse client version 19.4.3.11.
Connecting to localhost:9000 as user default.
Connected to ClickHouse server version 19.4.3 revision 54416. -
на маленьких табличках вроде норм работает а вот на нескольких миллиардах не очень
-
и значений немного по идее словарь не гигансткий должен формироваться - пару десятков разных значений всего
-
Попробую завтра воспроизвести.
-
заведу ишью в гитхабе пока
-
-
140092800087712:error:25FFF06C:DSO support routines:CRYPTO_internal:functionality not supported:../contrib/ssl/crypto/dso/dso_lib.c:224:
140092800087712:error:0EFFF06E:configuration file routines:CRYPTO_internal:error loading dso:../contrib/ssl/crypto/conf/conf_mod.c:273:module=ssl_conf, path=ssl_conf
debian-buster -
-
-
-
-
чтобы КХ работал придется
закоментировать строчку в /etc/ssl/openssl.cnf
[default_conf]
#ssl_conf = ssl_sect
https://medium.com/@andrewhowdencom/mysterious-ssl-tls-network-connection-failures-in-debian-buster-52c29a661cb3
https://github.com/yandex/ClickHouse/issues/4470 -
Большое спасибо, заработало
-
я наступил на это с официальным 19.4.3.11
-
Всем привет!
А как по-грамотному распарсить юзер-агент, чтобы он был максимально похож на тот, что в Logs API? -
ты достучался до моего сердца (с) заставил открыть консоль и полезть посмотреть как оно выглядит
-
Там сложно, и ни библиотека, ни набор правил, не в open-source.
-
Выложены все презентации с митапа на Кипре:
https://yandex.github.io/clickhouse-presentations/meetup22/strategies.pdf
https://yandex.github.io/clickhouse-presentations/meetup22/exness.pdf
https://yandex.github.io/clickhouse-presentations/meetup22/new_features/
https://yandex.github.io/clickhouse-presentations/meetup22/kubernetes.pdf
https://yandex.github.io/clickhouse-presentations/meetup22/aloha.pdf
Видео записывалось, ожидается скоро. -
-
Привет. А как безопасно включить use_minimalistic_part_header_in_zookeeper
1) Надо ли перегружать сервер?
2) Если включить на одной реплике — то будет ли работать вторая или надо обновлять обе? Если работать не будет — то как? Не пойдут инсерты совсем или только репликация? -
1. Да.
2. На одной не имеет смысла - лучше сразу на всех (если включить на одной, на самом деле обе реплики будут затронуты, но часть кусков будет не в новом формате).
Будет работать гарантированно.
Единственная особенность - после включения невозможно будет использовать старую версию clickhouse-server, в которой не было такой опции. -
У нас нет никаких опасений по поводу этой опции, используем в продакшене несколько месяцев. Админы постепенно включали на разных шардах, потом на разных кластерах, а сейчас осмелились поставить по-умолчанию везде.
-
Плюс мы ещё сконвертировали старые куски специальной конвертировалкой... И ещё коллеги из одного из соседних отделов сделали то же самое.
- 16 May 2019 (113 messages)
-
-
Joined.
-
Подскажите, как экранировать вопрос. знак в функции замены. Так не работает:
replaceRegexpOne(URLPath, '\?.*', '')
UPD:
Надо так экранировать:
replaceRegexpOne(URLPath, '\\?.*', '') -
Господа, не могу понять как работает AggregatingMergeTree
Я обновляю исходную таблицу раз в сутки, но данные не подтягиваются в агрегируованную. Как такое возможно? -
А какого профита ожидать от этой фичи?
-
Спасибо. На сколько широко распространена практика использования этих параметров?
-
-
мы с репликацией переезжали, единственное, что при этом нет лимитов на сеть и ресурсы, поэтому хосты могут напрячься)
-
Здравствуйте! Подскажите, пожалуйста,
- если перед серверами КХ стоит chproxy, то:
# curl 'http://***/?session_id=123&session_timeout=10' -d 'CREATE TEMPORARY TABLE t AS SELECT 1'
Code: 113, e.displayText() = DB::Exception: There is no session (version 19.5.3.8 (official build))'
- если без chproxy (сразу на ноду КХ) то:
# curl 'http://***/?session_id=123&session_timeout=10' -d 'CREATE TEMPORARY TABLE t AS SELECT 1'
# curl 'http://***/?session_id=123&session_timeout=10' -d 'SELECT * from t'
1
Что-то нужно добавить в настройки chproxy или такое через него не будет работать? -
Уменьшение объёма данных в zk в несколько раз.
-
Доброго дня! Как видно из видео Алексея Миловидова, вставка в CH предпочтительна батчами. Была идея сначала собирать в mongodb, а после в CH. Судя по тесту на хабре, mongodb не отличается особой скоростью записи https://habr.com/ru/post/320762/ .А как вы собираете данные перед заливкой в ch?Небольшое сравнение производительности СУБД «MongoDB vs ClickHouse»
Так как колоночная СУБД ClickHouse (внутренняя разработка Яндекс) стала доступна каждому, решил использовать эту СУБД заместо MongoDB для хранения аналитических...
-
-
-
buffer table 😄
-
Из кафки
-
Спасибо!)) Почитаю)
-
Спасибо! 🙏
-
-
схлопыванием, но ключ должен быть
-
Айдишники хэшами генерировать?
-
Уникальность определяется вами, на основании требований
-
Например, если взять логи
-
Можно хешами
-
-
Joined.
-
@hagen1778, @valyala , подскажите, пожалуйста или лучше создать issue ?
-
chproxy удаляет все параметры из query string, которые отсутсьвуют в списке разрешенных. Поэтому session_id удаляется. Даже если бы он не удалялся, то сечсии бы непоавильно работали, если за chproxy будет стоять больше одного сервера КХ, т.к. запросы с одним идентификатором сессии попадвли бы на разные сервера кликхауса
-
подскажите а в движке для кластера - replicated merge tree, не запускается на стороне базы поток с автоматической дедупликации данных даже если есть примари ключ?
-
Надежда - она такая... спасибо!
-
Joined.
-
-
Joined.
-
какие именно ошибки ?
-
например, в произвольный момент времени возникает
Tableau was unable to generate a query to perform this operation.
Generic ODBC requires additional configuration. The driver and DSN (data source name) must be installed and configured to match the connection.
Unable to connect using the DSN named "ClickHouse". Check that the DSN exists and is a valid connection. -
-
Ребята не могу сообразить с запросом. Вспомогите пожалуйста.
Есть таблица item, cost, sum - цена и за товар и сумма чека. Одна строка описывает один товар.
Надо выбрать за месяц данные для графика уровней цен. 10 столбиков, длина столбика - общая суммаь по этой цене, сам столбик это уровень цены от-до. -
Joined.
-
Достаточно странный вопрос (это все в продолжении разбирательств с Grafana), что можно подставить в переменную $systems (какой символ или регулярку?) чтобы на запрос вида:
where system in ($systems)
возвращались все значения таблицы? -
Variables: when "Include All option" is set · Issue #72 · Vertamedia/clickhouse-grafana
Is it possible, do not include "IN" operator to query if the variable has a too many values and "All" is selected?
-
проверьте что приходит в ответе на запрос в DeveloperTools - https://developers.google.com/web/tools/chrome-devtools/network/referenceNetwork features reference - Chrome Developers
A comprehensive reference of Chrome DevTools Network panel features.
-
там приходил Bad Request, при том, что и tabix и grafana работают по http протоколу
-
Это как раз то, что мне нужно, и, оно работает!!
-
Подскажите, как удалить конретный кусок из таблицы. Я вижу только удаление партиции
-
возможно, вы превысили размер GET запроса и тогда нужно переключить на POST в настройках. Но лучше посмотреть сам HTTP запрос и разобраться почему он не работает
-
В том то и дело, что запрос не работал ( без хаков, что привели выше ) в Grafana, но, при этом работал в Tabix.
В отношении предположения про Post - посмотрю. -
возможно, табикс по умолчанию использует POST метод
-
В любом случае спасибо за решение, а то я уже прям отчаялся.
-
вроде нет такой возможности
-
Привет, а чтобы юзера в кх добавить надо только users.xml исправить, рестартовать не надо?
-
ALTER TABLE <table_name> DELETE WHERE <filter>
-
Updates and Deletes in ClickHouse
Oct 16, 2018It’s been two years already ago when ClickHouse development team published an excellent blog post “How to update data in ClickHouse”. In that old times ClickHouse supported only monthly partitions, and for mutable data structures, they suggested to use pretty exotic data structures. We were all waiting for a more convenient approach, and finally, it is there: ClickHouse now supports updates in deletes! In this article, we will see how it works.
-
В filter здесь нельзя задать part_name. Только колонки из таблицы
-
Мне же нужно дробнуть конкретный кусок
-
все пользуются.
-
Всем привет, есть вопрос, после инсерта бывает у меня иногда так, что идет сразу селект и данные видимо не успевают доезжать до реплики и их нет. Можно ли как-то указать в параметрах чтобы ответ об успешном инсерте получать только после того как все записалось и доступно к выборке?
-
В КХ нет транзакционности, так что не факт, что возможно.
-
Возможно помогут настройки insert_quorum и select_sequential_consistency
https://clickhouse.yandex/docs/ru/operations/settings/settings/#settings-insert_quorum -
Понял, всем спасибо
-
то есть какие-то операции (в Tableau Desktop) все-таки проходят? Ну там подключиться к CH и увидеть таблицы в Datasource Pane. Или до этого не доходит?
-
-
detach partition / mv каталог_парта куда_нибудь на всех репликах / attch partition
-
-
Получается подключиться и делать выборки. Затем по прошествии некоторого времени просто внезапно может вылезти ошибка дата сорца. Пока связываю это с использованием одного calculated field(очень простой - конкатенация двух полей).
Причём на сервере после паблиша может работать а потом перестать аналогично. Быть может надо копать куда то в сторону tdc и каких то настроек odbc? -
-
про какой тип словаря речь?
-
Пробовал flat - ошибка "Code: 1, e.displayText() = DB::Exception: 'key' is not supported for dictionary of layout 'flat' (version 19.5.3.8 (official build))"
-
ок, тогда что такое "иерархическим атрибутом"
-
если на сервере (под виндой наверное?) тоже что-то работает, но где-то отваливается, то можно ковырять и в десктопе. вот на всякий случай мой TDC файл -- сравните, если у Вас как-то по-другому, можно попробовать с моим.
-
<hierarchical>true</hierarchical>
-
и какую версию ODBC драйвера скомпилили? последний релиз стабильно работает.
-
так это про mongo, у вас mongo ? и про атрибуты , а не ключи
-
нет конечно. Это не про монго : )
-
ясно, видимо я чего-то не знаю.
-
вот из документации : hierarchical - Поддержка иерархии. Отображение в идентификатор родителя. По умолчанию, false.
-
-
А потом в работе получить всех родителей с помощью функции dictGetHierarchy https://clickhouse.yandex/docs/ru/query_language/functions/ext_dict_functions/#dictgethierarchy
-
в любом случае flat это плоский массив, с адресацией по индексу, индекс не может быть отрицательным. Можно использовать complex словари и сделать ключом tuple(Int64)
-
-
Это идея ! Спасибо - попробую
-
DB::Exception: h: hierarchical attributes not supported for dictionary of type ComplexKeyHashed.
-
-
-
-
но вообще какая вам разница, положите в словарь UInt
select toInt64(toUInt64(-100))
-100
select toUInt64(-100)
18446744073709551516 -
-
<id>
<name>kladr_id</name>
<type>UInt64</type>
<expression>tuple(pid)</expression>
<null_value>0</null_value>
</id>
<attribute>
<name>kladr_pid</name>
<type>Int64</type>
<expression>tuple(kladr_pid)</expression>
<null_value>0</null_value>
<hierarchical>true</hierarchical>
<injective>true</injective>
</attribute> -
-
Разницы нет. Действительно. Вылезла другая ошибка : 500 Internal Server Error, body: Poco::Exception. Code: 1000, e.code() = 0, e.displayText() = Out of range: Value too small. <id>
<name>kladr_id</name>
<type>UInt64</type>
<null_value>0</null_value>
</id>
<attribute>
<name>kladr_pid</name>
<type>UInt64</type>
<null_value>0</null_value>
<hierarchical>true</hierarchical>
<injective>true</injective>
</attribute> -
я имел в виду конвертировать в источнике, вьюхой в mysql или что там у вас.
-
для конкатенации нужно каждое поле явно обернуть в STR(), то есть например [Origin] + ' - ' + [Dest] не прокатит, а вот STR( [Origin] ) + ' - ' + STR( [Dest] ) -- вполне себе
-
-
можете лог Tableau Desktop прислать (содержимое папки My Tableau Repository/Logs)?
-
Всем привет!
Пытаюсь синхронизировать Logs API и локальный КХ. Периодически ловлю ошибки такого рода
<Error> void DB::BackgroundProcessingPool::threadFunction(): Code: 84, e.displayText() = DB::Exception: Directory /var/lib/clickhouse/data/default/visits_all_KS/tmp_merge_20180601_20180630_161_232_1/ already exists, e.what() = DB::Exception, Stack trace:
0. /usr/bin/clickhouse-server(StackTrace::StackTrace()+0x16) [0x6cd78e6]
1. /usr/bin/clickhouse-server(DB::Exception::Exception(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int)+0x22) [0x32febe2]
2. /usr/bin/clickhouse-server(DB::MergeTreeDataMergerMutator::mergePartsToTemporaryPart(DB::MergeTreeDataMergerMutator::FuturePart const&, DB::MergeListEntry&, long, DB::DiskSpaceMonitor::Reservation*, bool)+0x476b) [0x5a3e3ab]
3. /usr/bin/clickhouse-server(DB::StorageMergeTree::merge(bool, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool, bool, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*)+0x432) [0x5976b72]
4. /usr/bin/clickhouse-server(DB::StorageMergeTree::backgroundTask()+0x135) [0x5979625]
5. /usr/bin/clickhouse-server(DB::BackgroundProcessingPool::threadFunction()+0x43e) [0x59ebeae]
6. /usr/bin/clickhouse-server() [0xa9b74ff]
7. /lib/x86_64-linux-gnu/libpthread.so.0(+0x76db) [0x7f65015d66db]
8. /lib/x86_64-linux-gnu/libc.so.6(clone+0x3f) [0x7f6500b5588f]
Насколько я понимаю это происходит, когда КХ упирается в диск. Так как данные приходяшие из Logs API объемные и дефраментированные по времени. При этом мерждей не висит. Ловит ошибку и уходит в рестарт.
Можете подсказать чем ему можно помочь? -
а могу я в свою очередь попросить у вас скомпилированный драйвер dylib? 🙂
пересобрал последнюю версию через brew и теперь получаю Cannot parse connection timeout value [y????????????5??e????e????????????]. -
Версия КХ?
>Ловит ошибку и уходит в рестарт.
sudo dmesg| tail -50
есть сообщения oom killer ? -
-
я поисправлял рабочесть odbc драйвера во всех вариантах unixodbc-iodbc под линуксом, а вот макоси пока нет под ругой проверить - может кто-нибудь собрать-поиспользовать? https://github.com/yandex/clickhouse-odbc/pull/173
-
Версия 19.1.9
-
Команду необходимо выполнить в контейнере?
-
-
-
-
-
-
Большое спасибо!
-
Запрос покажите и что в нем не работает. Устно сложно воспринимать
-
Да я и не могу запрос придумать, как его вообще построить. За что уцепиться.
Нужно с таблицы item, cost, num выбрать за неделю распределение продаж по уровням цен. К примеру по 20р - 40р продано 200шт, по 40 - 60 р продано 120шт и тэдэ -
-
Наверное )) завтра покручу эту идею и отпишусь.
Спасибо 🤝 -
не важно, в том же ядре
-
и это может быть awful error, я обновился до 19.1.14
Fixed error in #3920. This error manifestate itself as random cache corruption (messages Unknown codec family code, Cannot seek through file) and segfaults. This bug first appeared in version 19.1 and is present in versions up to 19.1.10 and 19.3.6. -
-
Joined.
- 17 May 2019 (74 messages)
-
-
-
попробовав кликхаус на каком нибудь тесте и прочитав историю этого чата вы можете составить свое впечатление
-
Ну он бесплатен, что же еще тут желать 😊
Юзаем в продукшене уже почти год, никаких проблем. -
Спасибо огромное! Все получилось
-
Всем доброго дня. Возможно кто-то сталкивался с проблемой. Пусть есть две таблицы, которые имеют большой набор данных. Поле, по которому будет объединение, добавлено в первичный ключ и ключ сортировки. Почему запрос
-
select w.workshiftid, d.documentid from (select * from workshift where workshiftid = 3558114) as w left join document as d using workshifti
-
приводит к чтению всех данных, при выполнении оператора join, а не использует записи из подзапроса
-
2019.05.17 13:03:19.241145 [ 43 ] {8cf4fbe2-e179-48e0-a9b3-8b0cbe064cda} <Debug> Join: setSampleBlock: documentid UInt32 UInt32(size = 0), d.works
hiftid UInt32 UInt32(size = 0), checknum UInt8 UInt8(size = 0), cashcode String String(size = 0)
2019.05.17 13:03:19.242080 [ 43 ] {8cf4fbe2-e179-48e0-a9b3-8b0cbe064cda} <Debug> default.workshift (SelectExecutor): Key condition: (column 0 in [
3558114, 3558114])
2019.05.17 13:03:19.242126 [ 43 ] {8cf4fbe2-e179-48e0-a9b3-8b0cbe064cda} <Debug> default.workshift (SelectExecutor): Selected 3 parts by date, 2 p
arts by key, 2 marks to read from 2 ranges
2019.05.17 13:03:19.242223 [ 43 ] {8cf4fbe2-e179-48e0-a9b3-8b0cbe064cda} <Trace> default.workshift (SelectExecutor): Reading approx. 16384 rows wi
th 2 streams
2019.05.17 13:03:19.242259 [ 43 ] {8cf4fbe2-e179-48e0-a9b3-8b0cbe064cda} <Trace> InterpreterSelectQuery: FetchColumns -> Complete
2019.05.17 13:03:19.242316 [ 43 ] {8cf4fbe2-e179-48e0-a9b3-8b0cbe064cda} <Trace> InterpreterSelectQuery: FetchColumns -> Complete
2019.05.17 13:03:19.242563 [ 43 ] {8cf4fbe2-e179-48e0-a9b3-8b0cbe064cda} <Debug> executeQuery: Query pipeline:
Expression
CreatingSets
Lazy
Union
Expression × 2
Expression
Expression
Expression
Filter
MergeTreeThread
2019.05.17 13:03:19.242802 [ 47 ] {} <Trace> CreatingSetsBlockInputStream: Creating join. -
2019.05.17 13:03:19.243075 [ 47 ] {} <Debug> default.document (SelectExecutor): Key condition: unknown
2019.05.17 13:03:19.243099 [ 47 ] {} <Debug> default.document (SelectExecutor): Selected 6 parts by date, 6 parts by key, 1941 marks to read from
6 ranges
2019.05.17 13:03:19.243335 [ 47 ] {} <Trace> default.document (SelectExecutor): Reading approx. 15900672 rows with 2 streams
2019.05.17 13:03:19.243367 [ 47 ] {} <Trace> InterpreterSelectQuery: FetchColumns -> Complete
2019.05.17 13:03:19.622196 [ 47 ] {} <Debug> CreatingSetsBlockInputStream: Created. Join with 139796 entries from 15864986 rows. In 0.379 sec. -
Привет!
Вопрос возник является ли операция вставки блока записей (в пределах параметра max_insert_size) в таблицу на основе которой создано материализованное представление атомарной?
т.е. может ли возникнуть такая ситуация, что данные в таблице буду записаны, а в представление не добавлены?
В документации на эту тему четко не сказано, в чате и гугле противоречивые данные, которые скорее говорят о том, что это не гарантируемая/автомарная операция, но тогда вопрос другой - а как пользоваться этими представлениями? -
Привет! Кто-нибудь знает, можно ли отменить начавшиеся мержи?
Я случайно запустил optimize table final на большой таблице и все начало тормозить, query я прибил, но в system.merges остались записи. -
Joined.
-
И да и нет. Легко поставить, легко начать использовать, но одновременно с этим нужно понимать его архитектуру и ограничения, чтобы использовать его действительно эффективно. ClickHouse не является серебряной пулей, и при неправильном использовании он будет работать намного хуже обычных реляционных СУБД
-
В эксплуатации довольно неприхотлив, но зависит от версии — не все версии одинаково стабильны
-
После обновления ошибки ушли, но проблема осталась. При вставке контейнер начинает рестартится и впадает в кому
-
Есть такое
[6725653.434045] Out of memory: Kill process 18211 (clickhouse-serv) score 574 or sacrifice child
[6725653.435065] Killed process 18211 (clickhouse-serv) total-vm:4136136kB, anon-rss:583824kB, file-rss:0kB, shmem-rss:0kB
[6725653.522400] oom_reaper: reaped process 18211 (clickhouse-serv), now anon-rss:0kB, file-rss:0kB, shmem-rss:0kB -
Коллеги, я видел в чате, что кто-то сталкивался с проблемой для Mysql engine таблиц, что нельзя сделать больше двух AND в WHERE:
Пример:
Можно
select a WHERE b = 1 AND c = 2
Нельзя
select a WHERE b = 1 AND c = 2 AND d = 3
А вот так работает
select a WHERE 1 AND(b = 1, c = 2, d = 3)
Кто-то решил эту проблему правильнее, чем регулярка? -
Это ООМ киллер, не хватает памяти
-
да, попробовал уменшить параметр max_memory_usage до половины доступной оперативки, но не помогло
правда и доступно совсем мало -
Всем привет, а можно ли джойнить таблицы по массиву? по пересечению например двух массивов
-
-
по пересечению - нет. по точному равенству должно быть можно (array это просто колонка). если не получается - можно сделать issue, на вскидку не нашел теста. еще в массивах не должно быть null-ов. ну и очевидное - можно вызывать какую-то функцию от массива из обеих таблиц и джойнить по ней.
-
понятно, спасибо
-
у вас 1гб памяти, вам надо специально настроить кх (вертикальные мержи, урезать кеши) и добавить своп. Это бесмысленно, воткните 16гб.
-
Ох, бедняга, с 1гб тестить кх..
-
Кх не использует индексы при джойне, правая таблица всегда читается целиком и кладется в память целиком (не таблица там подзапрос будет ограничен по where).
-
Это фича?
-
Да. Так делают ВСЕ olap бд.
-
В чем выигрыш? Почему не использовать индексы?
-
system stop merges (или ребутнуть)
-
проход по индексу начинает тормозить на джойне уже 5млн. Оракл и информикс и постгре тоже начинают джйнить хешем на таких кол-х.
-
https://t.me/clickhouse_ru/91910
https://t.me/clickhouse_ru/91945 -
Добрый день, на одном из серверов постепенно в течение аптайма растет потребление памяти.
Нагрузки на нем почти нет, версия 18.14.15
MemoryTrackingInBackgroundProcessingPool имеет большие отрицательные значения
Увидел, что советуют compile_expressions поставить в 0. Что-то в новых версиях относительно этого поменялось? Имеет смысл обновиться? -
Joined.
-
Joined.
-
в вашем случае можно поменять таблицы местами. позиция таблицы в джойне имеет значение. лукап джойна принципиально нет. Есть планы сделать еще merge джойн, который должен быть эффективней на заведомо отсортированных данных. Там тоже будут читаться обе выборки целиком (но возможна экономия памяти, т.к. не обязательно держать всю правую таблицу в оперативке)
-
Это исправлено давно и можно пофиксить установкой параметра https://github.com/yandex/ClickHouse/issues/3976#issuecomment-454009626
-
Всем привет.
Скажите, есть какая стандартная, наиболее короткая процедура действий после добавления колонки в таблицу, у которой есть materialized view??? -
## добавляем поле NEWCOL
detach table kostya_test.view_table;
alter table kostya_test.`.inner.view_table` add column NEWCOL String;
ATTACH MATERIALIZED VIEW kostya_test.view_table( date Date, customer_id UInt32, val AggregateFunction (sum, UInt32), NEWCOL String) ENGINE = ReplicatedAggregatingMergeTree('/clickhouse/tables/kostya_test.view_table', '{replica}', date, (date, prom_customer_id, val), 8192)AS SELECT date, customer_id, sumState(val) AS val,NEWCOL FROM test_db.log_41949_pageviews_product GROUP BY date, customer_id; -
stop merges помогло, спасибо! А вот рестарт сервера не помог.
-
только я не понял, эта команда совсем мержи отключает или только текущие прибивает?)
-
сделал start merges на всякий, те тяжелые мержы не воскресли.
-
Joined.
-
-
подскажите как реализовать:
есть таблица с пятиминутной статистикой в таком виде:
2019-05-13 13:55:00 985162418487296
2019-05-13 14:00:00 774056185954304
нужно эти пятиминутные индервалы усреднить до часа и потом отобразить в виде пятиминутных интервалов... вот в таком виде (левый столбец для наглядности)
12:55:00-13:55:00 2019-05-13 13:55:00 985162418487296
13:00:00-14:00:00 2019-05-13 14:00:00 774056185954304
как такое реализовать?) -
-
это вернет часовые интервалы, а нужны пятиминутные агрегации часовых выборок) вот как сказал)
-
скользящее среднее?
-
да
-
-
спасибо) буду смотреть)
-
Добрый день нужна помощь
Есть словарь в котором есть поле типа Decimal32
select dictGetDecimal32('dictionary', 'column', id)
Code: 46. DB::Exception: Unknown function dictGetDecimal32. Maybe you meant: ['dictGetFloat32','toDecimal32'].
select dictGetFloat32('dictionary', 'column', id)
Code: 53. DB::Exception: service: type mismatch: attribute price has type Decimal32.
но при попытке прочитать такое поле выходит ошибка
пробовали dictGetDecimal32 и dictGetFloat32
спасибо заранее -
Может версия КХ старая и не понимает новых функций, которые в доке описаны?
-
-
хм, я не нашел специализации для этого типа, видимо ее просто еще нет.
-
/stat@combot
-
Joined.
-
Появился на новом развернутом сервере какой-то лимит. Подскажите, как исправить?
Code: 159, e.displayText() = DB::Exception: Timeout exceeded: elapsed 5.000000708 seconds, maximum: 5: -
/stat@combot
-
в профиле пользователя
<max_execution_time>900</max_execution_time> -
поставлю, спасибо!
-
КХ падает при старте т.к есть поле с названием Index в таблице
.. как починить ? -
-
-
-
-
-
19.5.3.8 (19.4.4.33+) segmentation fault on CH-client query to system catalog. · Issue #5066 · yandex/ClickHouse
I experienced several crashes right after I ran create table from CH client. Probably the cause is the CH cli 'auto-complete' query: SELECT DISTINCT arrayJoin(extractAll(name, &...
-
я тупо сделал alias clickhouse-client = clickhouse-client -A
-
но уже пофикшено (19.5.4.22)
-
-
Joined.
-
- 18 May 2019 (29 messages)
-
Привет! У меня маленькая победа. Яндекс вывел на 1 место мой сайт по слову "clickhouse мануал" даже с зелёным значком 😀
-
Проблема за малым, чтобы там действительно был какой-то мануал, или хотя бы нечто, превосходящее по возможностям поиск по истории телеграм канала. Пока ваш подвиг легко повторить воспользовавшись кнопкой "экспорт истории канала", и загрузив результат на какой-нибудь бесплатный хостинг. И кстати результат экспорта выглядит красивее :)
-
Это я не в смысле что то не нужно этого делать, а в смысле что если это хорошо сделать, то и никакое позиционирование сайту не понадобится. А сейчас поисковик выдаёт ваш сайт, заходит человек, думает "куда я попал?" и немедленно выходит
-
-
Немного демотивации прямо с утра)
-
Чтобы сделать это хорошо нужно как минимум попробовать показывать цепочки связанных сообщений как единый тред, чтобы был поиск который находит нужные треды. Ещё лучше - чтобы можно было полезность тредов /конкретных сообщений оценивать, можно как-то по тематике треды отэговать, в идеале чтобы оно само тэговалось в реалтайме с помощью NLP, фильтры всякие и т.п.
-
В общем StackOverflow поверх истории чата :-)
-
Лайкалку сделать просто, а треды покапаю, спасибо
-
Выложил к себе видео с митапа на Кипре, чуть позже мы его куда-то более официально положим :) https://exness-2019.clickhouse.ninja/
-
Всем привет. Как подружить КХ и Tableau??? С драйвером, скомпилированным под мак периодически выдает ошибку DSN
-
Ходите по хттп
-
А по чему еще ходить можно? К кх же и так по хттп только ходят большинство клиентов
-
по тисипи
-
Да. Но в odbc для кх вроде ж хттп прописывается. Не могу утверждать точно, на работе все инструменты.
-
Да и тот же хттп поверх тсп
-
Там нет ограничений протокола хттп )))
-
То гет длинный то ещё что нибудь
-
-
-
-
Join Cloudflare & Yandex at our Moscow meetup! Присоединяйтесь к митапу в Москве!
Are you based in Moscow? Cloudflare is partnering with Yandex to produce a meetup this month in Yandex's Moscow headquarters. We would love to invite you to join us to learn about the newest in the Internet industry.
-
-
Есть такое условие в запросе:
where ‘’ = ‘’ or url like ‘’
Оно генерируется графаной когда variable пустая.
(Вот так в графане:
where ‘’ = ‘$url’ or url like ‘$url’)
Запрос с таким условием отрабатывается медленнее в кликхаусе, чем если бы такого условия не было. Такое ощущение, что кх считывает данные из колонки url, хотя первое условие true и по идее второе условие не нужно проверять.
Подскажите, пожалуйста, как лучше переписать такое условие, чтобы колонка url не считывалась? -
можно попробовать использовать where if(''='$url', 1, url like '$url'). См. https://github.com/yandex/ClickHouse/issues/658Feature request: evaluate and prune constant expressions before columns' scanning · Issue #658 · yandex/ClickHouse
The issue Suppose the following table exists: CREATE TABLE events ( EventDate Date, ClientID UInt32 ) Engine = MergeTree(EventDate, (EventDate, ClientID), 8192); We use the following query template...
-
Отлично! Попробую. Спасибо!
-
Хм, похоже, не помогло использование if. Сделал как вы написали выше, объём обработанных данных остался прежним. Вот если вообще убрать это условие, то данных обрабатывается меньше и запрос быстрее выполняется.
-
Версия сервера 19.1.6. Может в последних версиях это оптимизировано уже
-
Ребята, хочу узнать ваше мнение по следующему сценарию использования: есть жирная база, которая уже в КХ, в ней есть таблица на около 50млрд строчек, в таблице есть колонка last_updated. Сейчас в эту таблицу в основном пишется, а через какое то время нагрузка сместится в сторону апдейтов. Движок Replacing.
Не ляжет ли КХ если я планомерно буду вытаскивать N самых старых записей обновлять их и писать обратно? -
спс. Искал в основной ветке.
- 19 May 2019 (14 messages)
-
-
-
-
идеально подошло, спасибо
-
Можете пример показать, какой url нужен веб дата коннектору в табло, то в той что в документации просит авторизацию
-
Joined.
-
-
Joined.
-
Joined.
-
-
Received exception from server (version 19.6.2):
Code: 86. DB::Exception: Received from localhost:9000, ::1. DB::Exception: Received error from remote server /identifier_quote?connection_string=DSN%3Dpgconnection. 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:pgconnection
===========================
ODBC Diagnostic record #1:
===========================
SQLSTATE = 01000
Native Error Code = 0
[unixODBC][Driver Manager]Can't open lib 'psqlodbcw.so' : file not found -
-
-
Тэкс с драйвером я подшаманил, но теперь новая проблема. А почему запросы теперь для словарей экранируются кавычками?
2019-05-19 17:26:31.749 MSK [7943] postgres@master ERROR: relation "USERS" does not exist at character 64
2019-05-19 17:26:31.749 MSK [7943] postgres@master STATEMENT: PREPARE "_PLAN0x7f5115712c00" as SELECT "id", "username" FROM "USERS";;EXECUTE "_PLAN0x7f5115712c00" - 20 May 2019 (121 messages)
-
Коллеги, доброе утро. Подскажите решение проблемы.
Есть таблица с 2500 колонок. 4 шарда, на каждом distributed таблица и buffer перед ней.
В ситуации когда одновременно приходит около 100 инсертов падает ошибка с too many open files.
В операционной системе ограничение на кол-во открытых файлов поставили 999999. В КХ нет ограничения.
Понимаю, что слишком много колонок, но можно ли решить проблему без изменения схемы хранения? -
Добрый день коллеги! Я чувствую что задача очень типична для CH, подскажите есть ли решение лучше.
есть видеохостинг. Есть события (datatime, user_id, file_id, start_play| stop_play)
... можно еще какие то данные добавить
Нужно получить список тех кто вот сейчас смотрит видео. Их может быть в районе 40-60 тыс. Между start и stop может пройти до двух часов.
Мне в голову приходит схема
Events (datatime, user_id, file_id, action Int )
где action может быть
1 (start_play)
-1 (stop_play)
тогда активные сессии это (псевдокод)
SELECT user_id, file_id, sum(action) as session_state
FROM Events
WHERE datatime > NOW() - 1 DAY
HAVING session_state > 0
но чтото я не уверен что это лучше решение именно в рамках CH -
Можно сделать mv и группировать в сумму стэйтов по паре пользователь, файл и некоторому интервалу. Там, где sumMerge() = 1, там сессия активна
-
-
Речь про https://clickhouse.yandex/docs/en/operations/table_engines/merge/ ? Я просто понял из док и обсуждения, что он рулит когда записи схлопываются быстро. А если до 2 часов будет ли профит?
-
упс, я хотел дать сыслку на https://clickhouse.yandex/docs/en/operations/table_engines/mergetree/
-
ну в любом случае буду благодарен за пояснение. Как раз понимания конкретного инструментария СH мне и не хватает
-
зависит от объёмов. Если Вас устраивают скорости в этом решении, то всё ок. Если не устраивают, то Materialized View с некоторой предагрегацией
-
-
Ну то есть ни чего сильно проще и CH-way в голову не приходит. Ок спасибо
-
Ну это я так, не сильно думая, с запасом. Вопрос был скорее - нет ли какого то заточенного под это движка / механизма. буду пробовать
-
Можете попробовать https://clickhouse.yandex/docs/ru/operations/table_engines/summingmergetree/
-
А вот это https://clickhouse.yandex/docs/ru/operations/table_engines/collapsingmergetree/
Судя по доке, - то, что Вы ищете -
-
-
А вот тут я не твердо еще разбираюсь
> при слиянии кусков данных
> алгоритм слияния кусков данных логику
куски сливаются до какого размера? сколько их будет за день? В теории механизм понимаю, но конкретные цифры чтото сходу не найду -
я переживаю что если колапсинг будет, ну скажем, в в приделах 5-10 минут, то и профита мало будет, так как сессии длинее
-
-
Всем привет. прошу оценить на сколько я на верном пути:
есть таблица с значениями: eventtime, login и action [login/logout], но, результат нужен в grafana, в виде графика login и линии отображающей присутствие на ресурсе (аналогичный график уже имеется, и такое отображение устраивает) я собираюсь (не знаю подходящую функцию) исходя из времени login - время timeout генерировать значения с шагом в 10 мин, чтобы их отображать их на графике.
Правильный ли такой подход, как реализовать в запросе вычисление (времени logout-а - время login-а)? -
Чтобы по завершении выполнить group by toStartOfTenMinutes() и получить значения зарегистрированного в системе login-а с шагом в 10 минут
-
datadiff ('minute', login_time, now() ) ?
-
Буду пробывать, спасибо.
-
Ребят, все еще актуально.
Можно ли реализовать обновление last_updated в CH. Из таблицы выстаскиваются bulk'ом старые записи и обновляется состояние. Не ляжет ли при большом объеме таблицы? -
?
-
Joined.
-
Всем привет! Подскажите пожалуйста, можно ли как то прописать в конфиг
allow_experimental_data_skipping_indices = 1 чтобы не задавать каждый раз SET перед запросом? -
-
-
-
зависит от самих данных и метода сжатия - https://clickhouse.yandex/docs/en/query_language/create/#column-compression-codecs
проще проверить на чем-то похожем на твои данные. -
up. Вопрос всё еще актуален.
-
Можно прописать в конфиг на сервере или в конфиг на клиенте. На сервере нужно править users.xml:
<profiles>
<default>
<allow_experimental_data_skipping_indices>1</allow_experimental_data_skipping_indices>
</default>
</profiles> -
Можно через stdout и ограничить в pv.
-
В чем проблема увеличить до 9999999?
-
40 тыс. и кх? Mysql / redis / cassandra. Лить в кх уже готовые данные.
-
Неправильно переживаете.
-
Да понятно что на редисе решается, но CH как раз уже есть и чтото новое ставить не сильно хочется.
-
-
вот тут можно подробней, если не сложно - сильно плаваю в понмание
-
он мерджит за какой период времени?
-
-
ооо, спасбо буду разбираться
-
Нет ограничений по времени, есть по размеру (по дефолту 150гб). Другое дело мерж приходит когда-нибудь, может никогда.
-
-
то есть если партиции делать по месяцам, скажем, в бекграунде весь месяц может смерджиться в один блоб?
Это фишка именно mergetree подсимейства ? -
Да и да.
-
Спасибо, я как то по другому из докладов понял.
-
Надо тестить. Сколько у вас записей в день?
-
То есть нету? Ну ок (
-
В чем проблема написать toString в select?
-
Запрос автоматически набирается из system.columns. С другой стороны, я уже достаю тип, как раз, чтобы обрезать нули лишние
-
-
Супер! Спасибо, помогло!
-
-
-
Коллеги привет! Решили обновить сервера с КХ, версия 1.1.54231 до 19.6, после обновления получил ошибку:
<Error> analytics..inner.main_page_hits (StorageReplicatedMergeTree): Code: 40, e.displayText() = DB::Exception: Checksums of parts don't match: hash of uncompressed files doesn't match (version 19.6.2.11 (official build)). Data after merge is not byte-identical to data on another replicas. There could be several reasons
Сервер завелся, данные с диска видны, новые с Зоокипера не затягивает. Куда капать?
Несовместимость версий или что-то другое? -
Обновили на всех серверах? Конфиги на всех серверах идентичные?
-
обновление начали с слейвов, дальше не стали рисковать. Запись происходит со старых серверов 1.1
-
конфиг идентичен
-
Вы вообще тестили на стейдже? Приложение 100% не заработает.
-
полноценного кластерного тестового стенда нет, тестили на отдельных нодах. Все было норм пока не завели их в кластер со старыми серверами, которые пока пишут данные
-
-
в общем например были исправления багов, старые версии иногда мержили с ошибками, поэтому старая и новая могут помержить с разным результатом.
-
В день до 10 млн записей обновляется. Сейчас я их буферизую, склеиваю и раз в час лью в таблицу. Работает но нервничаю что перестанет когда таблица большой совсем станет.
-
Ясно, я верно понял, если обновить разом все сервера(те что пишут и читают) то скорее всего данная проблема уйдет?
-
да
-
Спасибо за оперативность!
-
Ну я бы начал с mv каталога таблицы в другое место потом rm. Как вообще так получилось?
-
недоглядел. Удаляли старые данные при переходе на новую схему загрузки. Но проблема , что МВ была реплицируемой. И в ЗК остались записи о ней
-
можно сделать attach / drop тогда и с диска и из зк удалится
-
За issue спасибо, то что нужно. Недооценил возможности, 5млн в секунду перекрывает мои нужды по апдейтам.
-
там довольно нетривиальный вариант (я его не проверял) и ENGINE = JOIN кушает память, но млн. можно туда засунуть.
-
Подскажите, пожалуйста, какой параметр нужно использовать у пользователя для отключения кэширования при повторной отправке аналогичного запроса за короткий срок.
Т.е. работая над оптимизацией запроса, нужно понимание насколько он стали бустрее/медленнее и точно быть уверенным, что данные вычитываются "как в первый раз", а не попадают в "горячий кэш". -
Привет, с версии 19.6 посыпались ошибки:
1. Code: 9, e.displayText() = DB::Exception: Size of filter (1944) doesn't match size of column (1948) (version 19.6.2.11 (official build))
2. Incorrect size of index granularity expect mark 1080 totally have marks 1080, Stack trace
Как с этим бороться? -
-
Прошу прощения, не нашел. Спасибо!
-
вы второй кто наступил на это. Это неведомая хрень и она не починена, так как первый не открыл тикет, не смог найти и прислать разработчикам парт на котором это происходит, это никто не смог воспроизвести.
-
-
Sqlalchemy нормально работает с кх?
Есть у кого-то опыт? -
Есть, нормально.
-
Бывает проблемы вылезают, но их фиксят периодически
-
Была проблема с лимитированием выборки (limit, offset). В оригинальном репозитории с коннектором вроде бы не исправлено до сих пор. В моем форке поправлено https://github.com/JustOnce/sqlalchemy-clickhouse/. Может пригодится.
-
Спасибо!
-
К слову, зависит от диалект для кх. От флары диалект плоский, почти без фич. Есть ещё один, clickhouse-sqlalchemy, вот он пободрей будет на фичи. Пользуюсь им, проблем нет
-
-
-
-
Добрый вечер!
Подскажите, пожалуйста.
CREATE TABLE a
(
a_field_1 Int32,
a_field_2 Int32
)
ENGINE = Log();
CREATE TABLE b
(
b_field_1 Int32,
b_field_2 Int32
)
ENGINE = Log();
INSERT INTO a VALUES (1,2);
INSERT INTO b VALUES (3,4);
Существует ли какой-то отличный от приведённого ниже способа получить объединение, чтобы всё само заполнилось дефлотными значениями. А то мне надо сделать union all последовательный многих таблиц, а то, что ниже написано, превращается в монстра, так как надо следить за названиями полей и подстановкой дефолтных значений:
select
a_field_1,
a_field_2,
0 as b_field_1,
0 as b_field_2
from a
union all
select
0 as a_field_1,
0 as a_field_2,
b_field_1,
b_field_2
from b -
В классическом sql все решается алиасами для полей, чьи названия не совпадают.
-
union не учитывает названия полей в любом sql, только порядок
-
Ну я алиасы и написал, но это вариант так себе.
Кажется, очень в стиле колоночного мира будет если
SELECT
a_field_1,
a_field_2
FROM a
UNION ALL
SELECT
b_field_1,
b_field_2
FROM b
будет возвращать как раз таблицу с a_field_1, a_field_2, b_field_1, b_field_2 и заполнять дефолтными значениями -
-
Так было бы даже логичнее, но в SQL не так.
-
select field1, field2 from (select field1, field2 from table1 union all select field1, field2 from table2)
-
Если я правильно поняла задачу
-
-
-
-
После юниона колонка имеет то название, что первая выбранная
-
Т.е. Select field1 union all select field2737378 - колонка будет называться field1
-
-
никак это не сделать, кроме вашего громоздкого варианта
-
Печаль. Даже issue на такую «фичу» заводить не стоит?
-
Можно было бы feature request, но пока мало перспективно.
-
Ясно. Спасибо, Алексей
-
как это в sql вписать? это нужен какой-то engine = SuperMerge или табличная функция.
-
-
-
Или настройка "делать UNION по особенному".
-
-
кстати, altinity делает фичи за деньги
-
Да если честно, мне проще утилиту написать, которая сама развернёт в эти алиасы. Тратить деньги, чтобы экономить на тексте, который итак можно сгенерить, так себе. Я скорее как математик смотрю на это, как на некоторое объединение множеств. В колоночном мире оно выглядит достаточно понятным образом
-
Если кто-то хочет сделать, то я напишу, в какие места кода смотреть. Внутри кода такая логика работы уже поддержана и используется, например, для таблиц типа Merge.
-
Хорошо, спасибо. Поспрашиваю, - вдруг найдутся у меня коллеги заинтересованные
-
Joined.
-
Доброго времени дня. Весь день пытаюсь заставить CH читать данные из kafka. Похоже наткнулся на https://github.com/yandex/ClickHouse/issues/4248 . Кто-нибудь знает какая версия стабильно работает с кафкой ?Kafka offset commit failed · Issue #4248 · yandex/ClickHouse
Sometimes clickhouse stop commiting offset for consumergroup. And then it take duplicated messages into DB. Just in random time it start this logs Feb 04 07:07:35 clickhouse-server[400]: %4|1549253...
-
приветствую,
Секция WITH упомянута в доках мельком, и не могу понять, есть ли возможность вынести её на верхний уровень в запросах с JOIN или UNION, чтоб избежать повторов:
WITH 42 AS x
SELECT x
UNION ALL
WITH 42 AS x
SELECT x
Вот можно ли тут как-то обойтись одним WITH? -
или есть другой способ обозначить "константу" и спустить её во все подзапросы ниже
-
https://clickhouse.yandex/docs/ru/query_language/select/#modifikator-with-totals
https://github.com/yandex/ClickHouse/issues/2416Support for WITH clause · Issue #2416 · yandex/ClickHouseWill ClickHouse support WITH clause (common table expression, cte)? Like https://www.postgresql.org/docs/9.1/static/queries-with.html The thing that with CTE I can define temp dataset I can then qu...
-
Давайте спросим у @ilezhankin.
-
Такого способа нет, пока только рассматриваются варианты, как лучше будет оформить эту возможность.
- 21 May 2019 (220 messages)
-
спасибо, будем ждать. Даже возможность использовать в подзапросах скаляры и массивы из WITH -- уже полезно
-
Похоже с 19.1 ситуация немного лучше, но возможно работают и более новые версии. Читал про проблемы и нашёл https://github.com/yandex/ClickHouse/issues/4736. Решил попробовать версию до появления бага, и оно заработало. Возможно проблему с коммитом оффсетов внесли при решении этой с потерей сообщений?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...
-
-
добрый день
только начал знакомится с clickhouse
возникли сложности с подключением PHPStorma к БД
получаю ошибку
[210] ClickHouse exception, code: 210, host: localhost, port: 8123; Connect to localhost:8123 [localhost/127.0.0.1] failed: В соединении отказано (Connection refused)
но из консоли
clickhouse-client -u web --password 147852369 -m test
заходит без проблем,
в файле логов при конекте из PHPStorma никаких ошибок не вижу
подскажите пожалуйста как можно устранить ошибку? -
-
а кнопку view не думал нажать?
-
там наверняка причина есть
-
-
-
а
-
так видимо не слушает никто на 8123. проверяй фаер на CH и что он слушает на внешнем IP
-
точнее не только на 127.0.0.1
-
-
у тебя прямо точно clickhouse на localhost?
-
-
IPv6 ?
-
ну ок
-
localhost = не слушает внешних
-
он мне не нужет
-
подозреваю что localhost это у тебя 127.0.0.1, а CH слушает на интерфейсе с IPv6
-
Должно быть так:
netstat -lnt |grep 8123
tcp 0 0 0.0.0.0:8123 0.0.0.0:* LISTEN -
[user@host ~]$ -
-
в config.xml :
<!-- <listen_host>::</listen_host> -->
<!-- <listen_host>::1</listen_host> -->
<listen_host>0.0.0.0</listen_host> -
-
добрый день, можно ли ограничить потредление Clickhouse CPU и RAM на сервере, и как это сделать?
-
Если сервер на ОС Linux с ядром версии 2.6.24 и выше, можно использовать cgroups. В интернете должна быть куча статей на эту тему
-
Joined.
-
-
либо запускать в Docker, тогда все становится еще проще
-
Сложилась ситуация:
┌─table───────┬─size───────┐
│ query_log_0 │ 3.25 GiB │
│ query_log │ 91.20 GiB │
└─────────────┴────────────┘
Стоят два извечных вопроса: "кто виноват?" (чтобы предотвратить повторение) и "что делать?" (как освободить место на диске) -
сделайте TRUNCAT TABLE system.query_log, query_log_0 просто удалите
-
Можно ограничить. КХ запускается как сервис /etc/systemd/system/clickhouse-server.service. При лимите по памяти его будет убивать OOM, поэтому настройки потребления памяти самим КХ тоже придется крутить. Но лучше его просто вынети на отдельную железяку и не ограничивать;)
-
-
Не надо докер, у ОС есть ручки для всего этого
-
Ну я предложил 2 варианта, выбор уже остается за пользователем )
-
А такой вопрос. Допустим у меня есть несколько шардов - несколько хостов в каждом, локальные таблицы с репликацией и Distributed таблица.
Я делаю insert в один из хостов шарда. И сразу потом делаю select из distributed таблицы, - пока ещё данные не успели перелиться на реплику. Есть ли гарантия того, что Distributed таблица пойдёт за данными в хост, где данные точно есть, а не туда, куда они реплицируются? -
Моя практика показывает, что нет.
-
А вы могли бы открыть ишью и попробовать описать сценарий появления ошибки? Может быть её как-то можно воспроизвести?
-
Разве кластер не отслеживает, какие реплики in-sync, а какие нет?
-
Я в максимально жестких условиях проверял, при временно отключенных запросах на репликацию. При большой нагрузке на объединение партиций.
-
-
-
спасибо почитаю
-
всем привет, может подскажет кто. создал materialized view, приаттаченный к таблице.
потом удалил его через drop table, теперь при записи в основную таблицу пишет, что он требуется)
нашёл инфу про команду detach, но в документации почти ничего про неё нет.
снова создал таблицу, сделал detach - та же ошибка
ERROR:Table default.`.inner.news_hours` doesn't exist.
как правильно отвязать materialized view? -
Да, я сегодня сделаю
-
-
-
Коллеги, приветствую, подскажите с таймзоной, что делаю не так, и на сервере стоит Europe/Moscow, и в кх, но при запросе прям вот сейчас в разрезе часа toHour получаю значения от 0 до 8 (как будто я в UTC).. не могу понять что делаю не так, а хочу получить от 0 до 11
-
есть ещё один вопрос.
вот есть функция sum и sumState. Первая просто запишет число в ячейку, вторая некие бинарные данные. Для первой при выборке из materialized view я могу просто sum использовать, для второй нужно sumMerge.
По документации рекомендуют именно второй вариант использовать, но чем хуже первый? Быстродействие?
по uniq и uniqState понимаю, в чём может быть разница, а с суммой - нет -
можно вторым аргументом принудительно таймзону задать, но хз почему так
-
пробовал, не помогло..
-
-
хм, и правда, последняя запись в 9 утра, а не в 12 ..
-
-
Добрый день.
Планируем обновление с 1.1.54370 до 18.14.19 с даунтаймом кластера т.к., насколько нам известно:
ClickHouse release 18.4.0, 2018-07-28
Настройка use_minimalistic_checksums_in_zookeeper таблиц семейства ReplicatedMergeTree включена по-умолчанию. Эта настройка была добавлена в версии 1.1.54378, 2018-04-16. Установка версий, более старых, чем 1.1.54378, становится невозможной.
Схема стандартная, 3 шарда по 2 реплики. Итого 6 нод. 3 ноды Zookeeper.
Данных не много. Около 1ТБ в сжатом виде.
Хотелось бы узнать:
- был ли у кого опыт такого большого скачка в версиях?
- насколько 18.14.19 стабильна. Нет ли там критичных багов и "особенностей"?
Спасибо 😊
P.S. Версии новее не предлагать. У нас не готов для этого код -
у эльёра спроси)
-
Движок aggregating не знает что надо суммировать или считать средниее или брать мин. при мержах, он просто берет any, поэтому ему нужен намек .state. Запрос во вью никак не связан с движком таблицы, движок который мержит просто не в курсе про наличие mv.
Движок summing суммирует по умолчанию, ему state не нужен. -
18.14.19 одна из самых стабильных и безглючных версий. Там есть мелкие пролемы типа https://github.com/yandex/ClickHouse/issues/4162
переходить не страшно, но тестить надо приложение, есть еще несколько мелких багов. -
Добрый день! Не подскажите, какое количество партиций считается уже большим количеством?
-
Для риалтайм запроса 10.
При 5000 сломаются мутации, при 10000 кх начнет ребутится 3 часа. -
В пятницу количество файлов в каталоге таблицы превысило 70 000. Тормоза были знатными.
-
Спасибо большое
-
то есть если регулярно собираются данные за месяц, то партиции лучше не по дням делать, а больше?
-
спасибо
-
риалтайм запросы? 100мс?
-
ручная выборка человеком. пользователь может и десятки секунд подождать
-
Я не знаю тогда стоит или нет.
Т.е. вы наверно чем-то руководствовались когда решили сделать партиции по дням, у всех все по разному некоторые перезаливают партиции через drop. Изначально кх был с по-месячными партициями. -
мы пока только внедряем, поэтому и вопрос. будем ещё тестировать
-
Начинайте с по-месячных toYYYYMM(
-
спасибо
-
Добрый день! Кто нибудь смог изавиться от ошибки запуска под контейнером LXC?: Application: It looks like the process has no CAP_NET_ADMIN capability, 'taskstats' performance statistics will be disabled. It could happen due to incorrect ClickHouse package installation. You could resolve the problem manually with 'sudo setcap cap_net_admin=+ep /usr/bin/clickhouse'. Note that it will not work on 'nosuid' mounted filesystems. It also doesn't work if you run clickhouse-server inside network namespace as it happens in some containers
-
-
-
Это не ошибка это ворнинг, кх не будет собирать некоторые статистики из ядра.
Теоритически на хосте можно разрешить контейнеру лазить за ними. -
практически не получилось
-
Опубликовали пост про одну из низкоуровневых оптимизаций в ClickHouse. Довольно детальное рассмотрение, начиная от высокого уровня до перекладывания байт. Будет интересно для разработчиков :)
https://habr.com/en/company/yandex/blog/452778/ -
None
-
Резюме. Обсудили в личной переписке: более детально проблему получится изучить завтра или после-завтра.
-
Хорошая статья. Только не понял, чем скайнет на серверах не угодил. 🙂
-
Это на самом деле неплохая штука - наш внутренний агент для мониторинга серверов и операций. Но так как там Python, периодически просыпается на пару секунд и использует 100% одного ядра CPU, на всякий случай на время бенчмарков тоже останавливаем.
-
Цитата:"Из опыта известно, что среднее время выполнения запроса, загрузки сайта и так далее представляет собой «мусор»"
Как же немного людей это понимает.
антиоффтоп: вынужденно пишу в КХ усреднённые значения. 🙂 -
-
LVM
-
RAID
-
:)
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 -
а что тогда делает фича? https://nuget.pkg.github.com/yandex/ClickHouse/pull/4918Feature 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...
-
-
-
Пока никак. Фича в разработке. Но уже близко
-
-
-
Joined.
-
Эта фича в основном для того чтобы использовать разнородные диски (ssd - hot / hdd - cold) для однородных раид даст перфоманс.
-
Вот это и интересно. Есть планы когда будет закончено ?
-
https://t.me/clickhouse_ru/101318
Я не имею отношения к разработке. я ненастоящий сварщик. -
-
-
Вопрос про distributed таблицу или про replicated?
-
Final оставит одинаковые записи в mergetree
-
проблема с distributed, но и про replicated тоже интересно. если есть ссылочка на документацию - буду признательна
-
Будет ли DEDUPLICATE схлопывать строки с одинаковым ключем или он просто убирает строки идентичные по всем полям?
-
Для distributed в документации есть параметра для доступа (user и password) https://clickhouse.yandex/docs/en/single/#distributed. Для реплицируемых таблиц КХ ходит только если хочет пробросить запрос с не лидера на лидера, например ALTER запросы. Раньше ходил от default пользователя, сейчас должна быть возможность указать системного пользователя (но это не точно, надо проверить)
-
-
Да, можно профиль отличный от default указывать https://github.com/yandex/ClickHouse/blob/master/dbms/programs/server/config.xml#L127
-
-
спасибо!
-
Спасибо, прям очень качественно
-
Joined.
-
Подскажите плиз, где детльнее можно ознакомится с "отдельным решением"
Наибольшие преимущества от оптимизации разжатия наблюдаются на сильно сжимающихся данных — например, на столбцах с повторяющимися строковыми значениями. Но специально для этого сценария у нас разработано отдельное решение, которое позволяет ускорить такие запросы на порядки - https://habr.com/en/company/yandex/blog/452778/ -
Вероятно, имеется в виду LowCardinality (String)
-
@yourock88 благодарю. На сйте с описанием, к сожалению, не густо.
-
https://events.yandex.ru/lib/talks/6166/ -- must
https://www.altinity.com/blog/2019/3/27/low-cardinality -
Да, имелось ввиду LowCardinality.
-
Я так понимаю, что LowCardinality либо только-только стал стабильным, либо он до сих считается "экспериментальным", поэтому документации пока что малр
-
@den_crane благодарю
-
Уже считается стабильным. А то, что документации мало - это постепенно исправим.
-
для репликации тожно можно включить аутентификацию
https://github.com/alesapin/ClickHouse/blob/master/dbms/tests/integration/test_replication_credentials/configs/credentials1.xml
правда удобнее ограничить доступ по хостамalesapin/ClickHouseClickHouse is a free analytic DBMS for big data. Contribute to alesapin/ClickHouse development by creating an account on GitHub.
-
а есть сейчас какие-нибудь проблемы с LowCardinality-полями при заливке?
-
кажется да
-
если их много оно делает оч долго инсерты.
-
-
-
а что в настройках пользователя readonly?
-
Такое ощущение, что дедупликация в ReplicatedMergeTree происходит блоками по 1048576. Делаю много вставок по несколько миллионов очень похожих элементов, выкручен max_insert_block_size на максимум. Ни один инсер не повторяется, но внутри одного инсерта могут быть одинаковые элементы, стабильно продатает ровно 1048576 элементов. Дедупликацию отключить нельзя, потому что она нужна, что-нибудь еще можно выкрутить?
-
Anton Liashenka in ClickHouse не тормозит
Работает! спасибо большое за помощь!
-
почитайте этот тред
-
Спасибо, уже пробую добавить id. Но неожиданно, что размер блока не равен max_insert_block_size.
-
Joined.
-
Коллеги всем привет! Подскажите а фичу "Mutations" уже кто то применял? обновлял данные и на каком обьеме строк?
-
Да уже наверно всё, скоро как год ей будет
-
В принципе любой объем данных можно обновить
-
Обновлял на 8 тб данных но понятное дело не все
-
круто - спасибо!
-
Есть пример создание таблицы с TTL?
-
как вы выставляете max_insert_block_size и для какого запроса (insert / insert from select)? Там много хитрости.
-
поискал тупо TTL в репе
https://github.com/yandex/ClickHouse/blob/7a6365dbf1436e82ddd2bd1c3642040a95e88afe/dbms/tests/queries/0_stateless/00933_ttl_simple.sql -
Выставлен в Long.MAX_VALUE через Properties в clickhouse-jdbc, вставка идет через RowBinary протокол по HTTP. Код здесь https://github.com/apache/beam/blob/master/sdks/java/io/clickhouse/src/main/java/org/apache/beam/sdk/io/clickhouse/ClickHouseIO.java#L175. Запрос вида INSERT INTO replicated_merge_tree;apache/beam
Apache Beam is a unified programming model for Batch and Streaming - apache/beam
-
а тип таблицы mergetree?
-
Да
-
я не пробовал через jdbc.
попробуйте еще добавить
min_insert_block_size_rows = 10000000000,
min_insert_block_size_bytes = 10000000000000; -
я искал тупо в документации
-
но спасибо
-
-
Подскажите, пожалуйста. Сейчас одинокий КХ, таблички на нем ReplacingMergeTree, не уникальные данные - схлопываются. Появилась необходимость использовать шардинг данных ну и репликацию. У меня теоретический вопрос, после миграции на схему distributed таблица + две ноды, если на разные ноды запишутся одни и те же данные (условно один и те же), при запросе через distributed таблицу они будут схлопываться или же нет?
-
-
нет
-
Из таких движков всегда надо брать с группировками и доаггрегациями. Даже на одной ноде не гарантируется схлопывание и аггрегация
-
дистрибьютед таблица не умеет быть коллапсинг она просто раскидывает запросы на две ноды и клеит по сути результат
-
-
наверное где-то в jdbc зарыто. Через клиент и http работает
3 повтора по млн.
clickhouse-client -q 'select today()+number%3, number from numbers(1048576) format CSV' > test1.csv
clickhouse-client -q 'select today()+number%3, number from numbers(1048576) format CSV' >> test1.csv
clickhouse-client -q 'select today()+number%3, number from numbers(1048576) format CSV' >> test1.csv
cat test1.csv|clickhouse-client -q 'insert into Replicate format CSV'
clickhouse-client -q 'select count() from Replicate'
1048576
cat test1.csv|clickhouse-client --max_insert_block_size=50000000 -q 'insert into Replicate format CSV'
clickhouse-client -q 'select count() from Replicate'
3145728
cat test1.csv | curl 'http://localhost:8123/?query=INSERT%20INTO%20Replicate%20FORMAT%20CSV' --data-binary @-
clickhouse-client -q 'select count() from Replicate'
1048576
cat test1.csv | curl 'http://localhost:8123/?max_insert_block_size=5000000&query=INSERT%20INTO%20Replicate%20FORMAT%20CSV' --data-binary @-
clickhouse-client -q 'select count() from Replicate'
3145728 -
-
-
например у вас ключ в таблице order by (Имя, Фамилия).
Нужно сделать шардирование в distributed не по rand() , а по например cityHash64(ИмяФамилия).
Тогда все одинаковые ключи окажутся на одном шарде. -
alter однопоточный, 300 ГБ прочитать, разжать, назад зажать и записать
-
-
-
-
не отменит, это фигня, будет дальше до победного
-
-
-
┌─column──────────────────┬─any(type)──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┬─compressed_bytes_per_row─┬─raw_bytes_per_row─┐
│ Symbols.Names │ Array(String) │ 34.962 │ 462.882 │ - было
│ Symbols.Names │ Array(LowCardinality(String)) │ 14.87 │ 67.994 │ - стало -
-
Да, верно, посмотрел PROCESSLIST, не передались в запрос параметры, кажется, нашел место куда надо было подпихнуть, странно, вроде раньше работало ¯\_(ツ)_/¯
-
-
Всем привет, а скажите, executable словари - это не какой-нибудь deprecated? Прыгаю уже с бубном весь день, конфиг вроде валидный, не цепляется и в логах ни слова
-
рабочие, вот месяц назад чинили частичное обновление, люди используют чтобы в редис ходить
-
покажите что-ли конфиг (словарь)
-
-
если рабочие - уже радует) скорее сам тогда накосячил где-то
-
я бы начал с полного пути к питону, КХ не человек, башем не пользуется скорее всего
-
попробовал, но не помогло. к тому же, раньше был просто путь к питоновскому скрипту (он executable)
-
мне кажется, что-то где-то может быть с правами, но не пойму где
-
в preprocessed xml рендерится?
-
на конфиг + скрипт права clickhouse:clickhouse стоят
-
неа, и в логах ни слова. это и удивляет
-
ну а куда вообще xml положили?
-
/etc/clickhouse-server. там у меня рядом еще 4 словаря рабочих лежат. два на таблицы смотрят, два - на csv
-
и рабочие словари апдейтятся, видно по system.dictionaries
-
-
О! спасибо) я олень. vanga_dictnary.xml было) не углядел, а тут проверил
-
Судя по всему, пишу самостоятельно)
-
Grafana. Можно выгружать csv из графиков и табличек
-
Не. Совсем не то
-
Недавно упоминалось:
https://redash.io/
https://metabase.com/Redash helps you make sense of your dataUse Redash to connect to any data source (PostgreSQL, MySQL, Redshift, BigQuery, MongoDB and many others), query, visualize and share your data to make your company data driven.
-
-
-
метабейз работает https://t.me/clickhouse_ru/88277
-
в редаше сценарий «сделать отчет и давать выгружать пользователям» очень хорошо работает
-
Помогите пожалуйста. Настроил шардирование добавил шарды на сервере но при попытке забрать из dist таблицы данные выдает ошибку.
-
там еще что то открывать нужно?
-
а если туда curl-м , фаервол?
-
<listen_host>::</listen_host>
-
курлом висит) а где прописать это?
-
в config.xml ?
-
а кажется понял
-
спасибо)
-
ща попробую
-
-
не помогло, расскометировал и перезапустил кликхаус
-
ноды не располагаются на одной локалке. они в одной подсети но не по локалке.
-
-
я боюсь не совсем понимаю сейчас)
-
где можно это увидеть?
-
-
-
странно но при попытке отправить запрос курлом даже на 9009 порт, все висит. будем разбираться , Спасибо.
-
Сервер localhost слушает же, не? Снаружи он не должен отвечать.
-
ну да ток я вроде открыл на все
-
<listen_host>::</listen_host> расскоментировал
-
0.0.0.0
-
-
-
-
это копейки для КХ, обычно под 400 колонок и 100к в секунду
-
Все зависит от размеров кластера)
-
-
а на скриншоте ::1 что и есть только локалхост
-
уже пофиксили
-
оказывается конфиг почему то появился еще в conf.d/ а не только в корне
-
- 22 May 2019 (150 messages)
-
Видео с митапа на Кипре:
https://clickhouse-meetup-04037ee6.cdn.integros.com/cyprus_clickhouse_meetup_2019/1080.mp4
(все доклады были на русском) -
None
-
None
-
Почему-то сразу два сообщения не получается закрепить в шапке.
-
что-то не качается
-
-
Можно попробовать jasper
-
Я еще с плеером выложил https://exness-2019.clickhouse.ninja/
-
Joined.
-
А можете подробнее по требованиям к Reports Service и сути отличий между искомым функционалом и существующим в Grafana/Redash/Metabase?
-
-
-
Порежьте видео на части пожалуйста. Почти 4 часа fullhd тяжеловато
-
что происходит, никак не могу достучаться до бэкенда
-
-
Он не хочет вам отвечать....
Там на бекенде сидит девушка....;) -
И сколько ей нужно заплатить?
-
Она принимает только длинные url
-
Я все узнал... Нужно передавать данные кредитки в заголовках запросов..... Она спишет 100 баксьонков и начнет отвечать 😆
-
-
Здравствуйте, можно сделать два разных шарда одной таблицы на единственной ноде?
-
Покручу ещё разок Redash, потом отпишусь
-
-
Joined.
-
Но лучше не надо :)
-
Там 5 gb
-
Joined.
-
Привет
Сейчас столкнулся с странным поведением Nullable(DateTime):
select DateConversationBegin, DateClear, DateClear - DateConversationBegin as ConversationLengthInSeconds
from Calls
>
2018-01-01 01:03:30
2018-01-01 01:19:29 2018-01-01 01:19:29 0
2018-01-01 01:06:42 2018-01-01 01:13:51 429
select DateConversationBegin, DateClear, DateClear - DateConversationBegin as ConversationLengthInSeconds
where DateConversationBegin != NULL
from Calls
>
0 records
В tabix заметил, что пустые поля с датами не помечены NULL. Кто-нибудь уже сталкивался с таким? -
С null нельзя сравнивать напрямую (во всех БД) используйте x IS NULL или x IS NOT NULL
-
Спасибо
-
-
ну вы посмотрите какие
-
-
-
Да, так намного лучше!
-
Joined.
-
-
Добрый день. при переходе с версии 19.5.3, например на 19.6.2 стал по другому работать планировщик запрос вместо 2 секунд на тех же данных стал работать за 125 секунд
SELECT
date,
countIf(status IN ('CP', 'A', 'OW', 'RC')) AS fact,
count(*) AS fact
FROM
(
SELECT
toDateTime(floor(toRelativeSecondNum(OrderedDate) / 1200) * 1200) AS date,
companyid,
id,
status
FROM mysql('ip', 'csts', 'order', '', '')
WHERE OrderedDate >= toString(toStartOfDay(now()))
)
WHERE companyid = 1
GROUP BY date
могу предоставить дебаг с send_logs_level -
в select datetime::timestamp? 🤔
-
Да, недавно были изменения в передаче параметров в MySQL. Покажите какой запрос он отправляет в MySQL в одном и втором случае.
-
Так у вас же 8 вместо 10
-
Есть ещё zeppelin.
-
-
-
-
Спасибо чату что он есть!
Вопрос про подпоследовательности:
Есть таблица условно:
uid, ev, ts
1, a, 10
1, b, 11
1, a, 12
1, b, 13
1, c, 14
1, a, 15
1, b, 16
1, c, 17
1, a, 18
1, a, 19
1, c, 20
uid - id пользователя
ev - событие (a, b или с)
ts - timestamp (для Uint8)
Группировка по uid: ищу подпоследовательность a->b->c:
sequenceMatch = 1,
sequenceCount = 2
Столкнулся с двумя вопросами:
1. А возможно ли получить ts по первой найденной подпоследовательности время начала и окончания? (И если можно, чему будет равно время начало в примере)
2. и по sequenceMatch: ей нужен DateTime для сортировки, но там будет с точностью до одной секунды: т.е. toDateTime(10) = toDatetime(11) = '2019-01-10 01:20:01' (условно, я храню в Uint64 до миллисекунд), если в подзапросе будет сортировка по ts, это решит возможную проблему сортировки в рамках одной секунды? -
Привет всем. Каk kill работает в КХ. Нельзя же просто убить поток. Он наверное флажек взводит и поток потом сам завершается ?
-
сейчас пришлю
-
А можно как то сделать чтобы писало строчки в которых ошибка с опцией
--input_format_allow_errors_ratio=0.001
а то непонятно почему строки не попали - то ли скипнулись , толи еще что-то -
Разве она не даст прирост в скорости при селектах по определенному event_id?
-
Первая часть - это из create table? Должна дать прирост, но проверять лучше, выполнив запрос и посмотреть, сколько строк было обработано в выборке
-
А черт, да. ORDER BY это из create table;
-
написал в личку
-
Всем привет!
Обновили CH с 18.16.1 на 19.6.2.11
После обновления CH стартует около 30 минут( было 5 минут)
В логах наблюдаю следующее:
<Information> DatabaseOrdinary (%db_name%): 0% - 100%
Инсталяция представляет собой 2 шарда по 2 ноды
Известно ли подобное поведение и в какую сторону стоит посмотреть? -
SELECT companyid, status, OrderedDate FROM csts.order WHERE (companyid = 1)
когда хорошо
SELECT companyid, status, OrderedDate FROM csts.order WHERE OrderedDate >= '2019-05-22 00:00:00' -
1. С помощью sequenceMatch / Count - нет. Выбирает первое встретившееся, т.е. в вашем случае a10, b11 c14. Count найдет 2 цепочки в вашем примере.
2 Про таймстампы не уверен поможет или нет предварительная сортировка. Если сделать в один поток - то должно помочь, иначе - кажется будет зависеть от скорости обработки разных блоков. Там можно эту проблему по другому обойти - перемаповать диапазон времени. Например просто взять мс и вычесть минимальное значение, а результат скастовать в DateTime.
3. Там сейчас добавляют поддержку других (64 битных) типов, чтобы можно было использовать вместо DateTime в этих фунциях про последовательности -
Хм. А если выключить enable_optimize_predicate_expression ?
-
Это не связано с пропорциональным ростом количества данных (таблиц и партиций) от момента растарта 18.16?
-
Или при даунгрейде снова 5 мин стартует?
-
-
-
-
Над чем "думает" в момент старта? Там по логам должно быть видно.
-
Важнее количество партов / таблиц чем размер
-
Т.е. если у вас 20000 партов - то даже если они будут все вместе 10 мб занимать - то будет запускаться еле-еле
-
-
Всем привет.
подскажите как правильно забирать данные из яндекс-метрики
проблема:
пытаюсь скачать метрики с яндекс счетчика через скрипт https://github.com/yndx-metrika/logs_api_integration
и постоянно ошибки.
сейчас "Logs API can't load data: max_possible_day_quantity = 0"
до этого было "DB::Exception: Cannot parse input: expected \t before: \n"GitHub - yndx-metrika/logs_api_integration: Script for integration with Logs APIScript for integration with Logs API. Contribute to yndx-metrika/logs_api_integration development by creating an account on GitHub.
-
Привет, а подскажите пожалуйста, как сделать interval 3 month правильно?
пробовал:
select toStartOfInterval(today(), interval 3 month);
но выдало 2019-04-01 не сильно похоже на 3 месяца -
вообще интересует такое как в мускуле:
select date_sub(curdate(), interval 3 month);
+---------------------------------------+
| date_sub(curdate(), interval 3 month) |
+---------------------------------------+
| 2019-02-22 |
+---------------------------------------+ -
now() - INTERVAL 3 MONTH
-
select today()- interval 3 month;
-
во, спасибо большое
-
Если уровень логирования понизить до trace то будет больше писать. Но в общем скорее всего из-за партиционирования, слоишком много партиций.
-
-
-
-
подскажите пожалуйста в чем суть ошибки? DB::Exception: Unknown data type family: Uint32.
-
UInt32
-
и?
-
i -> I
-
блин
-
спасибо
-
-
Спасибо большое!
1. т.е. сейчас это никак не вытащить?
2. Прошу прощения, но я не очень понял как обойти проблему, вот что имеем:
Select
1555793527197 as ts_int,
toDateTime(ts_int/1000) as ts_dt,
ts_int % 1000 as ts_ms3. Буду ждать 🙏 -
-
А какую версию используешь? Должна была быть подсказка
-
toStartOfInterval возвращает начало интервала, в данном случае год делится на интервалы по три месяца: 1 января - 31 марта, 1 апреля-30 июня, 1 июля - 31 сентября, 1 октября - 31 декабря. Сейчас май, toStartOfInterval(today(), interval 3 month) возвращает 1 апреля.
-
Понял, спасибо
-
Подскажите плиз. Настройка max_memory_usage на один запрос влияет ?
-
да
-
А как тогда не превосходить лимит памяти на сервере ? Параллельных запросов же может быть много
-
https://clickhouse.yandex/docs/ru/operations/settings/query_complexity/#settings_max_memory_usage
max_memory_usage_for_all_queries -
Лимит сервера / количество одновременных запросов = лимит на 1 запрос
-
А что будет , если с вот все запросы подойдут суммарно к usage_for_all_queries ?
-
ошибка в следующем запросе
-
спасибо, разобрался
-
А текущий же все равно лимит привысит ? Т.е следующий не запустится, но это му ведь тоже память нужна (ещё больше )
-
В новых версиях должно быть так
DB::Exception: Unknown data type family: Uint32. Maybe you meant: ['UInt32','Int32']. -
я думаю мало кто пользуется clickhouse-client-м
-
нет, такого не было, хотя, ставил 2 недели назад
-
В exception message должно было прилететь
-
а хотя, да я затупил
-
любой запрос с превышением лимита получит ошибку.
в чем вообще вопрос? -
Как избежать ошибки. Вот в оракое если поставить memory_target то он будет использовать только столько памяти, а если нужно, то сбросит на диск. Как мне такое же сделать в КХ? Что бы memory kilker не приходил .
-
все несколько сложнее, memory_target балансирует кол-во под кеш и под запросы. В КХ примерно тоже самое и будет если выставить max_memory_usage_for_all_queries + max_bytes_before_external_group_by+ max_bytes_before_external_sort
-
Ребят есть вот такой вопрос:
делаю set max_partitions_per_insert_block=10000 - все равно выдается Error: Too many partitions for single INSERT block (more than 100).. Выставляю в конфиге, в корне: <max_partitions_per_insert_block>0</max_partitions_per_insert_block>, рестартую КХ, смотрю в system.settings, а там 100 -
Надеюсь, таких всё же меньшинство. Не знают, что теряют... ;)
-
user.xml profile default
-
Подскажи пожалуйста, а как правильно выставить параметр distributed_product_mode в конфиг файле? выставила через клиента, set distributed_product_mode='allow', но всеравно получаю Double-distributed IN/JOIN subqueries is denied (distributed_product_mode = 'deny').
-
set меняет состояние сессии, т.е. действует на запросы после него.
можно выставить в профиле пользователя. -
Спасибо помогло
-
а профиль пользователя это где? users.xml секция user?
-
секция <profiles>
-
Спасибо. Но тут вроде как тоже возможны падения ? Каждая новый запрос будет пожирать память до параметров external sort/group by?
-
сколько у вас памяти и сколько одновременно запросов выполняется?
max_memory_usage_for_all_queries -- рекомендуется выставить в половину от имеющейся озу. Т.е. если у меня у сервера 500ГБ озу то я ставлю max_memory_usage_for_all_queries = 250GB что бы еще 250 остались под кеш диска. -
завелось. спасибо!
-
привет, подскажие а когда такое происходит [CH Error 242] DB::Exception: Table is in readonly mode?
-
отвал от зукипера
-
а чего с таким делать?
-
Чинить соединение с зукиперем.
-
Подскажите, пожалуйста, можно ли менять число повторов на вставку Distributed таблицей?
-
чинить зукипер / связь с зукипером. Старые версии кх плохо выходили из RO, приходилось ребутить или detach/attach
-
добрый вечер
хочу создать копию таблицы из мускуля
возник вопрос даные/таблицы по связым (которые в реляционых БД) как в кликхаузе создавать?
предполагаю это будет одна большая таблица где все даные будут объединены
но в доке вижу тип даных nested может правильнее такими типами создавать связаные таблицы ? -
Joined.
-
ну это не проблема, проблема в том что очень медленно и закачка уже 3 или 4 раза обрывалась (я в америке), хром не хочет продолжать закачку и все начинается с начала каждый раз. Интернет в офисе быстрый, так что я не думаю, что это наше ограничение
-
лучше одну очень широкую, избегая nested пока возможно
-
Добрый день!
Подскажите, пожалуйста, отличаются ли как-то структуры хранения данных в таблицах MergeTree, созданных командой нового формата и командой старого формата. Были ли добавлены какие-то существенные оптимизации в формат хренения? Если да, то как форматировать таблицу для хранения по новому формату с сохренением данных и с минимальным простоем?
Вопрос возник в связи с обновлением сервера clickhouse с версии 1.1.54388 до версии 19.4.2.7 и преобразованием таблицы в реплицируемую.
Новая реплицируемая таблица была создана с использованием нового формата и на этапе добавления кусков данных из старой таблицы, созданной командой старого формата, была получена ошибка No count.txt in part 20190404_20190404_50865_50865_0
Если использовать устаревший синтаксис создания реплицируемой таблицы, то инструкция преобразования таблицы MergeTree в ReplicatedMergeTree работает отлично. -
-
CREATE TABLE final_states_by_month(d date, uid UInt64, a_state AggregateFunction(groupArray, String))
ENGINE = AggregatingMergeTree PARTITION BY toYYYYMM(d) ORDER BY (uid); -
create table mv_z_store(a date, max_b AggregateFunction(MAX,Int64)) ENGINE = AggregatingMergeTree Partition by toYYYYMM(a) order by a;
-
утилита есть, но видимо она не публична
https://github.com/yandex/ClickHouse/pull/4195/ -
-
create table yy (x Int64) engine=Null;
create materialized view yy_v Engine AggregatingMergeTree order by tuple() as select x, anyIfState(x, x != 0) from yy group by x;
desc yy_v
AggregateFunction(anyIf, Int64, UInt8) -
-
-
??? я показал пример как узнать функцию
-
-
-
-
чего? я показал пример как узнать AggregateFunction(anyIf, Int64, UInt8)
а сам код и всякие gruop by я писал от балды -
-
-
спасибо
-
Я думал, что в параметрах типа надо объявлять входные параметры функции
Тогда получается
UInt64,UInt64 -
UInt8 -- это bool ( != )
-
Логично. У if параметр bool.
-
в clickhouse есть prepared ? как минимум с этим https://github.com/kshvakov/clickhouse похоже что нетGitHub - ClickHouse/clickhouse-go: Golang driver for ClickHouse
Golang driver for ClickHouse. Contribute to ClickHouse/clickhouse-go development by creating an account on GitHub.
-
нету ни prepared ни параметров. SQL планера нет, грантов нет, нечего preparить
-
понятно. Спасибо!
-
- 23 May 2019 (182 messages)
-
-
Joined.
-
Как сильно влияет на скорость выборки различное партицирование? Сейчас партицирование по дням по полю Date, исходя из того, что наиболее часты выборки за текущие сутки. Но, с учётом хранения данных более года, количество партиций большое и, если правильно понимаю, запрос данных за две недели (месяц) должен быть заметно дольше?
-
Пока нет
-
При запросах делается чтение из всех партиций, которые указаны в WHERE. Соответственно, в худшем случае, если данные не в кэше, то чтение из 100 партиций приведет к N*100 случайных чтений, где N — число колонок, участвующих в запросе
-
Я думаю, что на запросах за 14-30 дней вы ещё ничего особого страшного можете и не заметить, а вот выборки за год уже могут начать хорошо так тормозить
-
Там еще сортировка роль играет. В любом случае партиции по дням для сильно специфичных случаев. Попробуйте хотя бы нелели, а лучше месяцы.
-
В качестве небольшого "трюка" можно поставить дату в качестве первого компонента первичного ключа, и партиционионирование по месяцу, и тогда чтение по диапазону дат будет намного более последовательным. Минусом такого решения является то, что удалять данные быстро можно будет только по месяцам.
-
Ну и будет немного больше записи на диск в целом, потому что будет требоваться больше мержей (ибо сами партиции больше)
-
99% запросов - текущий день. Движок GraphiteMergeTree c репликой.
-
То есть в основном - отображаемые графаной срезы значений за полчаса-час до текущего момента. Хочется максимально уменьшить время отклика.
-
Плюс, дерево путей очень большое, десяками миллионов обозначаемое.
-
GraphiteMergeTree вообще интересный зверь: он поддерживает агрегацию на фоне, но сама агрегация делается только во время мержей, и "сами" мержи могут и не триггериться, так что нам пришлось в кроне делать OPTIMIZE партиций на регулярной основе, чтобы данные схлопывались
-
-
Это и сейчас так? В последних версиях?
-
Честно скажу, не знаю. Я вообще не видел слишком много жалоб про этот движок, вероятно у людей обычно все более-менее нормально работает и без плясок с бубном. У нас просто объем записи был очень большой, несколько Тб на каждом сервере набегало за месяц
-
А вам решардить приходилось?
-
Сколько же optimize длился на таких партициях?
-
А что значит срезы? Вы делаете агрегацию по нескольким миллионам метрик за раз?
-
Отличный вопрос! У меня по простому не получилось.
-
Партиции мы делали по 2 Тб, так что длился он много часов :))
-
Не могу сказать, не уверен, что знаю ответ :)
-
Мне кажется, что без stop the world тут не обойтись :)
Т.е. надо останавливать мержи для архивов, переносить из них данные на новые ноды. Ну и до кучи можно присочинить, что запись надо делать через Distributed таблицу с ключом шардирования - функцией из семейства consistent hashing (чтобы меньше перегонять на новые шарды).
Но я даже боюсь думать о такой процедуре, когда речь будет идти о таких размерах партиций, как Юра привёл.