@clickhouse_ru

Страница 637 из 723
Konstantin
27.08.2018
16:27:07
Ещё много Nullable

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
Добрый день, подскажите, есть более короткая запись такого WHERE arrayExists(t -> t IN (external', 'internal', 'timeout'), tags)
Вроде нет более хорошей. Есть функция arrayIntersect, но я думаю - будет работать хуже.

Шурик Корсуков
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
Можно ли переименовывать табличку в CH?
я это делал просто переименовав ее на диске. но это очень «так себе» решение

Шурик Корсуков
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 делается через копирование таблицы, это больше когда нужно как инструмент администратора

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 максимальный

Шурик Корсуков
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

Всем привет, на таблицу надо 5 индексов. Самая простая идея сделать 5 одинаковых таблиц, но с разными индексами и писать в них одновременно. Есть ли какое то другое решение этой проблемы?
Не используйте КХ. Вся суть КХ очень быстро сканировать весь объем. Сделайте одну таблицу с более менее подходящими партициями и индексом.

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, работают только в рамках одной партиции и кажись тольок если партиция умещается в один файл. И тем более ноды КХ ничего не знают про друг друга, поэтому не будут ничего схлапывать.

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
Тогда странно. В диск не упирается? Зукипер отдельно?

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