
Konstantin
27.08.2018
16:27:07
Ещё много Nullable

Dmitry
27.08.2018
16:28:57

Alexey
27.08.2018
16:29:21

Wolf
27.08.2018
16:29:22
Нет

Google

Dmitry
27.08.2018
16:29:45
У меня явно одна таблица
Это наверное баг, из-за рестора дампом

Wolf
27.08.2018
16:31:21
Рестор дампом к такому не может привести

Dmitry
27.08.2018
16:34:35
Ну тогда я теряюсь в догадках

Шурик Корсуков
27.08.2018
17:16:02
Добрый день, подскажите, есть более короткая запись такого
WHERE arrayExists(t -> t IN (external', 'internal', 'timeout'), tags)
есть массив Array(String) нужно проверить что в нём есть хотя бы одина из строк

Аки
27.08.2018
17:28:58
всем привет )

Saprow
27.08.2018
17:29:57
Ку

Alexey
27.08.2018
17:30:58

Шурик Корсуков
27.08.2018
17:31:34
ок, видимо до какой-то версии работала конструкция WHERE tags IN (....)
по типу как я написал, но в 18.4 перестала

Alexey
27.08.2018
17:32:48
https://github.com/yandex/ClickHouse/blob/master/CHANGELOG_RU.md#%D0%9E%D0%B1%D1%80%D0%B0%D1%82%D0%BD%D0%BE-%D0%BD%D0%B5%D1%81%D0%BE%D0%B2%D0%BC%D0%B5%D1%81%D1%82%D0%B8%D0%BC%D1%8B%D0%B5-%D0%B8%D0%B7%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8%D1%8F-4

Шурик Корсуков
27.08.2018
17:48:33
да, спасибо, мы долго сидели на 1.1.54343

Google

Pavel Tyavin
27.08.2018
18:11:30
Можно ли переименовывать табличку в CH?

Pavel
27.08.2018
18:15:58

Шурик Корсуков
27.08.2018
18:19:36
https://clickhouse.yandex/docs/ru/query_language/misc/#rename
нет?
если таблица Replicated, то path в ZK остаётся прежним

Igor
27.08.2018
18:47:10
Я слышал, что недавно ввели в КХ update и delete. Так вот: извините за глупый вопрос, но как сделать update на полях фиксированной длины. Например, у каждой третьей строки сменить булево значение в одном из столбцов на противоположное?
В русской документации пока нету.
И еще такой вопрос: как в этом случае будет использоваться память? Не будет ли лишнего копирования (казалось бы, не должно быть)?

Denis
27.08.2018
19:14:38
апдейтов нет, и апдейт и делит работают и будут работать через перезапись в новое место ( merge )
и кстати что такое каждая третья строка? такого понятия вообще нет в КХ.

Igor
27.08.2018
19:16:46
ну имелся ввиду просто какой-то абстрактный предикат. Если верен, то меняем значение в ячейке. Если не верен, то пропускаем
такое поведение вводить не собираются из-за нарушения консистентности или появления блокировок на чтение?

Шурик Корсуков
27.08.2018
20:06:54
update можно реализовать через ReplacingMergeTree и запросы, которые учитывают что нужно отбирать последнюю ревизию записи. delete делается через копирование таблицы, это больше когда нужно как инструмент администратора

Igor
27.08.2018
20:12:46

Denis
27.08.2018
20:13:49
https://clickhouse.yandex/docs/ru/query_language/alter/#_4
насколько я понимаю, дизайн подразумевает что data файлы вообще никогда не меняются, иначе это ломает все, тот же freeze партиций через хардлинки.

Шурик Корсуков
27.08.2018
20:14:28
можно краткий пример?
CREATE TABLE IF EXISTS groups
(
date_time DateTime,
name String,
logins Array(String)
)
ENGINE = ReplacingMergeTree(date_time) ORDER BY (name);
и после нужно отбирать там где argMax(logins, date_time)
SELECT argMax(logins, date_time) AS logins WHERE name = 'pepe';
ClickHouse при мержар будет подтирать старые записи, для одного и того же name он будет стараться оставить ту у которой date_time максимальная
если явного поля нет, по кому хочется вести ревизию, можно явно завести revision или что-то типа того

Igor
27.08.2018
20:17:47
А если у меня таблица заполняется кафкой, но время от времени мне нужно по ней проходиться и менять?

Google

Igor
27.08.2018
20:17:58
это ж другой движок

Шурик Корсуков
27.08.2018
20:19:18
а кафка всегда заливает новые записи? или то же должна обновлять существующие?

Denis
27.08.2018
20:19:28
Теоритически наверное можно при delete вычислить строки которые подлежат удалению, положить их в новый файл с признаком удаленные, вернуть управление клиенту, при последующих селектах мержить с этим файлом и вырезать строки из результата, ну и смержить эвенчулли.


Konstantin
27.08.2018
20:20:09
Ничего подозрительного.
Точно что-то с Nullable, вот таких много нашёл
2018.08.27 20:54:33.087439 [ 8 ] <Error> void DB::BackgroundProcessingPool::threadFunction(): Code: 366, e.displayText() = DB::Exception: Logical err
or: Sizes of nested column and null map of Nullable column are not equal, e.what() = DB::Exception, Stack trace:
0. /usr/lib64/libclickhouse.so.18(StackTrace::StackTrace()+0x25) [0x7fa06618d635]
1. clickhouse-server(DB::Exception::Exception(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int)+0x39) [0x22db659]
2. /usr/lib64/libclickhouse.so.18(DB::ColumnNullable::checkConsistency() const+0x91) [0x7fa065e006e1]
3. /usr/lib64/libclickhouse.so.18(DB::DataTypeNullable::serializeBinaryBulkWithMultipleStreams(DB::IColumn const&, std::function<DB::WriteBuffer* (st
d::vector<DB::IDataType::Substream, std::allocator<DB::IDataType::Substream> > const&)>, unsigned long, unsigned long, bool, std::vector<DB::IDataType::Substream, std::allocator<DB::IDataType::Substream> >) const+0x55) [0x7fa065484df5]
4. /usr/lib64/libclickhouse.so.18(DB::IMergedBlockOutputStream::writeData(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, DB::IDataType const&, DB::IColumn const&, std::set<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std:
:less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >&, bool)+0x687) [0x7fa065ff4587]
5. /usr/lib64/libclickhouse.so.18(DB::MergedBlockOutputStream::writeImpl(DB::Block const&, DB::PODArray<unsigned long, 4096ul, Allocator<false>, 15ul
> const*)+0x5a6) [0x7fa065ff4e26]
6. /usr/lib64/libclickhouse.so.18(DB::MergeTreeDataMergerMutator::mergePartsToTemporaryPart(DB::MergeTreeDataMergerMutator::FuturePart const&, DB::MergeListEntry&, unsigned long, long, DB::DiskSpaceMonitor::Reservation*, bool)+0x2cf8) [0x7fa065f94f18]
7. /usr/lib64/libclickhouse.so.18(DB::StorageMergeTree::merge(unsigned long, bool, std::__cxx11::basic_string<char, std::char_traits<char>, std::allo
cator<char> > const&, bool, bool, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*)+0x461) [0x7fa065eb7081]
8. /usr/lib64/libclickhouse.so.18(DB::StorageMergeTree::backgroundTask()+0x17c) [0x7fa065eb971c] 9. /usr/lib64/libclickhouse.so.18(DB::BackgroundProcessingPool::threadFunction()+0x48d) [0x7fa065f4106d]
10. /usr/lib64/libstdc++.so.6(+0xea6de) [0x7fa063c436de] 11. /lib64/libpthread.so.0(+0x78ea) [0x7fa0633d98ea]
12. /lib64/libc.so.6(clone+0x3f) [0x7fa06310f4df]


Igor
27.08.2018
20:21:15

Ivan
27.08.2018
20:25:47
Всем привет, на таблицу надо 5 индексов. Самая простая идея сделать 5 одинаковых таблиц, но с разными индексами и писать в них одновременно.
Есть ли какое то другое решение этой проблемы?

Шурик Корсуков
27.08.2018
20:27:40
тогда то что залила кафка это revision=0, ищешь какие записи нужно обновить, и делаешь INSERT увеличивая revision на единицу
а, ну понятно когда выбираешь запись, которую хочешь отредактировать, берёшь ту, у которой revision максимальный

Igor
27.08.2018
20:28:45

Шурик Корсуков
27.08.2018
20:30:12
SELECT
max(revision) AS revision,
argMax(field1, revision) AS feild1,
argMax(field2, revision) AS feild2,
...
WHERE keyField1 = v1 AND keyField2 = v2 AND ...
а потом INSERT с resivion + 1 и обновлёными полями
кликхаус старые записи будет удалять, но никто не гарантирует что в текущей момент есть всего одна запись для такого значения ключа

Denis
27.08.2018
20:37:10
BTW, с Replacing не обязателен version/revision. И он вычисляет последнюю версию сам, с помощью final
select ... from tablename final

Ivan
27.08.2018
20:40:10
То есть иметь несколько одинаковых таблиц - плохая идея?

Denis
27.08.2018
20:40:45
нет, ну вот у вас 80TБ данных, вы их хотите на 5 умножить?

Ivan
27.08.2018
20:41:57
Это минус, безусловно
Ожидается около 50 млн записей в день и будет требоваться много статистики

Yuran
27.08.2018
20:52:53
50 млн в день не звучит как-то много. Возможно, вам даже фул скан подойдет :)

Denis
27.08.2018
20:56:03
И индексы кх тоже ненастоящие, по умолчанию они указывают на 8192 строки, все оптимизировано для фулсканов.
И с "индексами" все непросто, если кардинальность первых полей маленькая, КХ может искать и по другим полям из "индекса"
https://gist.github.com/den-crane/cbc6f0777d03a00417d70018378d360d

Igor
27.08.2018
21:10:56
тоже че-то не могу найти сходу в доках, как добавить поле автоинкремента, чтобы все строки были пронумерованы и номера не повторялись

Google

Denis
27.08.2018
21:12:32
нету автоинкремента, откуда вообще идея добавлять автоинкремент в DWH? Накой он там нужен

Igor
27.08.2018
21:14:24
ладно. Попробую через DateTime. Не гарантирует ничего, но хоть как-то позволит упорядочивать

Denis
27.08.2018
21:14:55
поиска ? ?

Igor
27.08.2018
21:16:13
ну илипоиск по дате - да

Denis
27.08.2018
21:22:08
дату можно, типа DateTime DEFAULT now().
упорядочивать в смысле order by, лучше по самим данным, выше будет компрессия если похожие строки упадут рядом в колонку.

Igor
27.08.2018
21:30:27
хорошо
и я правильно понимаю, что уникальных полей в КХ нет, не было и никогда не будет?

Denis
27.08.2018
21:36:06
правильно, более того, все эти replacing collapsing и другие aggregating ничего не гарантируют, схлапывают eventually, работают только в рамках одной партиции и кажись тольок если партиция умещается в один файл. И тем более ноды КХ ничего не знают про друг друга, поэтому не будут ничего схлапывать.

Andrey
27.08.2018
21:58:16

Vladimir
28.08.2018
04:47:16
подскажите как удалить path из zookeeper? удалил таблицы с реплик, а в zookeeper записи остались и мешают пересоздать

Wolf
28.08.2018
04:52:21
А как вы удаляли так что они остались?
Зайдите через зукиперкли и удалите по-моему команда рм или дел
Там же просто файловая система по сути
Если в зукипере нет нужных данных можно его остановить и почистить директорию с дампом данных где то в вар либ зукипер

Vladimir
28.08.2018
05:27:20
спасибо, попробую


molo4ko
28.08.2018
06:16:18
Как можно избавиться от такого?
2018.08.28 06:14:51.068603 [ 8 ] <Debug> shard_2.foo (ReplicatedMergeTreeQueue): Not executing log entry for part 20180801_20180824_812489_814335_968 because another log entry for the same part is being processed. This shouldn't happen often.
2018.08.28 06:14:51.068630 [ 8 ] <Debug> shard_2.foo (ReplicatedMergeTreeQueue): Not merging into part 20180801_20180824_812489_814374_983 because part 20180801_20180824_812489_814370_982 is not ready yet (log entry for that part is being processed).
записи вообще приостановлены уже минут 10 как, все равно ничего не меняется, полный лог таких сообщений и продолжается
при этом еще проскакивают
2018.08.28 06:20:27.783612 [ 9159 ] <Error> executeQuery: Code: 252, e.displayText() = DB::Exception: Too many parts (300). Merges are processing significantly slower than inserts., e.what() = DB::Exception (from other-node:55212), Stack trace:
но записи сейчас точно остановлены
если сейчас остановить кх, какие-то данные будут потеряны? из тех, которые не записаны


Stanislav
28.08.2018
06:23:25
если я правильно понимаю Too many parts, то достаточно просто подождать, пока рассосётся. И там действительно дохрена частей, скорее всего.
А так - пишите не по одной строке на инсерт, а сразу миллиончик

Google

molo4ko
28.08.2018
06:24:09
понял, подожду, спасибо.
пишу по 65к или раз в 5 секунд
поэтому и непонятно, что случилось
у нас неравномерная нагрузка, поэтому бывает, что 65к зайдет за секунду, а бывает, что за 5 секунд и 100 не наберется

Stanislav
28.08.2018
06:26:07
Тогда странно. В диск не упирается? Зукипер отдельно?

Kirill
28.08.2018
06:28:18