@clickhouse_ru

Страница 250 из 723
Stas
04.09.2017
12:50:41
можно делать case sum() можно делать sum(case ). главное чтобы на пути из select в листья агрегатные функции были один раз. в первом случае case будет работать меньшее число раз.
Кейсов у меня не один, а много вариант оборачивать его sum'ами я пробовал в разных местах, почему то не получается =(

Александр
04.09.2017
12:51:59
Ну самый простой вариант сделать агрегацию сверху. Скажем так без эспейна :) Хотя с данными поверх запроса с кейсом sumIf не нужен :) Там просто sum и группировка по колонке

Что-то я запарил

Stas
04.09.2017
12:52:05
Делается типа так select sumIf(...), column from (select с кейсом) group by column
не подойдет, тк у меня узкая таблица в которой есть \название счетчика\ его значение \ устройство\ а мне надо это перевести в вид : \устройство\ счетчик 1\счетчик 2\счетчик3\

Google
Nikolai
04.09.2017
12:52:07
а, это уже внутри btrie. Значит, конфигурация прочиталась :)

Stas
04.09.2017
12:53:26
Вот такой кейс у меня работает, далее мне нужно сделать sum(r) group by mts



Александр
04.09.2017
12:53:34
Ну тогда sumIf и три разных агрегата через sumIf, типа sumIf(counter = 'counter1...), sumIf(counter = 'counter2...)

Stas
04.09.2017
12:53:37
буду очень благодарен если кто-то поможет =)

Konstantin
04.09.2017
12:53:45
а, это уже внутри btrie. Значит, конфигурация прочиталась :)
а куда дальше копать чтобы это взлетело теперь?)

Александр
04.09.2017
12:53:48
И с группировкой по устройству

Nikolai
04.09.2017
12:55:58
а куда дальше копать чтобы это взлетело теперь?)
Я бы все-таки попробовал поставить новую версию CH. Если можете прислать сам csv словаря, и он не очень большой, я попробую воспроизвести у себя.

Stas
04.09.2017
12:56:26
Ну тогда sumIf и три разных агрегата через sumIf, типа sumIf(counter = 'counter1...), sumIf(counter = 'counter2...)
пытался скормить ему следующую конструкцию - не взял =( sumIf(r, "mt like 'pmNoOutgoingPsStreamHsHhoSuccess'")

Александр
04.09.2017
12:56:52
Stas
04.09.2017
12:59:09
Мне кажется в like нужно добавить по сторонам %
неа, ничего из этого не помогает, Code: 10, e.displayText() = DB::Exception: Not found column mt like 'pmAborteds' in block. There are only columns: mts, mt, r, e.what() = DB::Exception хотя в столбце mt у меня есть это значение...

papa
04.09.2017
12:59:46
Google
Stas
04.09.2017
13:00:55
а зачем у вас кавычки вокруг второго аргумента?
Без них ode: 43, e.displayText() = DB::Exception: Illegal type String of argument for aggregate function sum, e.what() = DB::Exception

papa
04.09.2017
13:01:18
а какой у вас тип у r?

Александр
04.09.2017
13:02:25
Вот так попробуйте. Я так не делал, но может сработает )

Stas
04.09.2017
13:02:49
а какой у вас тип у r?
тааак, кажется я облажался, там стринг, я на лету могу же его попросить конвертнуть тип да?

papa
04.09.2017
13:03:22
насчет sum внутри case я немного обманул, вот такой запрос не работает SELECT caseWithExpression(y, 1, sum(x), count()), sum(caseWithExpression(x, 1, 2, 3)) FROM ( SELECT 2 AS x, 1 AS y ) GROUP BY yно вот такая штука работает if(y = 1, sum(x), count()),

у вас там всегда числа?

Nikolai
04.09.2017
13:05:09
словарь ~500mb (база maxmind)
а можете ссылко поделиться, откуда оно скачивается? 500 mb - это в сжатом виде?

Stas
04.09.2017
13:05:14
у вас там всегда числа?
да! Ура, работает, спасибо огромное!

papa
04.09.2017
13:05:46
если у вас там всегда числа, лучше хранить их сразу в виде чисел.

Konstantin
04.09.2017
13:06:02
а можете ссылко поделиться, откуда оно скачивается? 500 mb - это в сжатом виде?
500 несжатое, сейчас сожму и выложу куда нибудь вместе с конфигом словаря

Nikolai
04.09.2017
13:06:47
здорово

Stas
04.09.2017
13:07:25
если у вас там всегда числа, лучше хранить их сразу в виде чисел.
Это я догадываюсь, но для теста пока и так подойдет я думаю

Konstantin
04.09.2017
13:21:42
здорово
кинул в личку

Yurij
04.09.2017
13:29:15
А вот в целом, будет ли кликхаус без обязательной колонки даты, или ради этой колонки вся база писалась ?

Konstantin
04.09.2017
13:29:43
можно взять engine = Log

Yurij
04.09.2017
13:30:03
А хочется то merge

Mariya
04.09.2017
13:32:59
Можно добавить поле DummyDate и писать туда константу "0000-00-00" и использовать движок MergeTree.

Alex
04.09.2017
13:33:24
Да, будет. Возможно, даже скоро ?

Google
zigmund
04.09.2017
15:38:48
добре вам

Mikhail
04.09.2017
15:38:59
Хэй! :)

zigmund
04.09.2017
15:39:34
есть вопрос <clickhouse_remote_servers> <kolesa-cluster1> <shard> <internal_replication>false</internal_replication> <replica> <host>s1r1</host> <port>9000</port> </replica> <replica> <host>s1r2</host> <port>9000</port> </replica> </shard> <shard> <internal_replication>false</internal_replication> <replica> <host>s2r1</host> <port>9000</port> </replica> <replica> <host>s2r2</host> <port>9000</port> </replica> </shard> </kolesa-cluster1> </clickhouse_remote_servers>

дистребьютед таблица, смотри на мержтри

хочу добавить еще один шард с репликой, чтобы снизить нагрузку на существующие серваки

шардится по rand()

могу просто довешать серваки в конфигах? перешардить не принципиально, главное - нагрузку распределить на запись

Roman
04.09.2017
15:42:06
Добрый день. Что-то у меня не работает arrayJoin, после применения к массиву, полученному из splitByChar Тип поля по toTypeName Nullable(Array(String)) в чем может быть проблема?

"ARRAY JOIN requires array argument"

При попытке скастить в not-nullable массив Cannot convert data from a nullable type to a non-nullable type Есть какой-нибудь по-любому workaround?

zigmund
04.09.2017
15:56:42
могу просто довешать серваки в конфигах? перешардить не принципиально, главное - нагрузку распределить на запись
В случае использования реплицированных таблиц, есть возможность перешардировать данные - смотрите раздел “Перешардирование”. Но во многих случаях лучше обойтись без этого. Запросы SELECT отправляются на все шарды, и работают независимо от того, каким образом данные распределены по шардам (они могут быть распределены полностью случайно). Правильно ли понимаю, что достаточно дописать новые серваки в конфиг и на этом все?

zigmund
04.09.2017
16:22:02
Да. И изменение веса старых
Нагрузка при чтении в данный момент не важна, значит можно и весы не менять? Или же лучше уравнять временными весами объем данных по шардам?

zigmund
04.09.2017
16:24:36
Дык нагрузка на отдельный существующий шард на запись снизится с 1/2 общей нагрузки до 1/3. Это то, что я и пытаюсь получить в данный момент.

Нагрузка на чтение будет на старые шарды существенно выше, это я понимаю.

Да. И изменение веса старых
В общем, ясно. Спасибо за коммент.

Vladimir
04.09.2017
16:28:32
В общем, ясно. Спасибо за коммент.
Короче предлагаемый способ расширения это перестать писать на старые шарды и поставить новые

Читать по прежнему со всех

zigmund
04.09.2017
16:30:21
Новый шард не справится со всей нагрузкой. Думаю на старые два поставить вес по 1, на новый шард вес 2. Через какое-то время, когда примерно объем данных уравняется, выставить одинаковый вес на все шарды.

Google
Alexey
04.09.2017
18:03:01
Следующий ClickHouse Meetup состоится в Берлине, 5 октября. https://www.meetup.com/ClickHouse-Meetup-Berlin/ Это первый крупный англоязычный митап. Мы рады пригласить всех, кто сможет приехать! Участие бесплатно. Необходимо зарегистрироваться: https://events.yandex.com/events/meetings/05-10-2017/register/

Рулон
04.09.2017
18:22:36
Коллеги! У меня в таблице куча полей с типом string . учавствуют в условии where. Это сильно бьет по перфомансу?

Andrey
04.09.2017
18:29:34
А where по like? или просто сравнение?

Рулон
04.09.2017
18:31:30
просто where Field ='Word'

Igor
04.09.2017
18:31:58
event_date - используется т/е ключь ?

Мы чтобы уйти от строк используем и храним CityHash() - там где можно, типа OS и т/д

Рулон
04.09.2017
18:33:41
Таблица ок 4 яров . date есть, но люди хотят за весь период. я просто думаю надо ли переделывать на словари. или и так норм?

Igor
04.09.2017
18:34:35
Можете словари лучше словари - имхо int лучше чем string

Весь периуд - full scan получается )

Roman
04.09.2017
18:35:36
Добрый день. Что-то у меня не работает arrayJoin, после применения к массиву, полученному из splitByChar Тип поля по toTypeName Nullable(Array(String)) в чем может быть проблема?
Roman, [04.09.17 18:42] "ARRAY JOIN requires array argument" Roman, [04.09.17 18:50] При попытке скастить в not-nullable массив Cannot convert data from a nullable type to a non-nullable type Есть какой-нибудь по-любому workaround? Алексей, посоветуете какой-нибудь work around?

Рулон
04.09.2017
18:35:53
А чем лучше то ) быстрее? или место экономится?

Andrey
04.09.2017
18:38:45
А чем лучше то ) быстрее? или место экономится?
быстрее. ну и если данные можно уложить в тот же int, то лечше это сделать. как минимум для экономии места

Alexey
04.09.2017
18:39:56
просто where Field ='Word'
Сравнение строк в ClickHouse реализовано достаточно эффективно. Но в любом случае, работа со строками будет менее эффективна, чем с соответствующими Enum-ами или числами. По причине того, что строки надо разжать, десерализовать, пройтись по ним в оперативке при вычислениях. Насколько именно будет разница - трудно заранее сказать. Обычно до нескольких раз в худшем случае.

Roman
04.09.2017
18:41:46
Через map пробовал , то же ARRAY JOIN requires array argument

SELECT arrayJoin(arrayMap(x -> ifNull(x, 0), spl)) FROM ( select splitByChar(',', splitByChar('|', answers)[5]) spl from Events WHERE ... )

Alexey
04.09.2017
18:46:40
Попробуйте вместо ifNull(x, 0) написать assumeNotNull(x)

Roman
04.09.2017
18:48:17
Не помогает. Вероятно потому что массив, получающийся в результате все равно типа Nullable(Array(String))

Nikolai
04.09.2017
18:48:36
возможно, SELECT arrayMap(x -> ifNull(x, 0), arrayJoin(spl)) FROM ( select splitByChar(',', splitByChar('|', answers)[5]) spl from Events WHERE ... ) ?

Roman
04.09.2017
18:49:37
а он тогда разве применит не до arrayMap? Не помогает, в arrayJoin вероятно нельзя отправить Nullable(Array(String))

Google
Roman
04.09.2017
18:49:54
И надо его как-то превратить в не nullable, при том что у меня там всегда значения есть (

Nikolai
04.09.2017
18:50:29
да, неправильно сказал

SELECT arrayJoin(spl) FROM ( select arrayMap(x -> assumeNotNullable(x), splitByChar(',', splitByChar('|', answers)[5])) spl from Events WHERE ... ) ?

Roman
04.09.2017
18:57:29
arrayMap вернет nullable array, так тоже пробовал

Nikolai
04.09.2017
19:02:42
а вот такой запрос работает? select arrayJoin(vals) from (select ['a', 'b', Null] as vals)

Roman
04.09.2017
19:03:15
ага

Nikolai
04.09.2017
19:07:05
а такой ? SELECT splitByChar(',', toNullable('1,2,3'))

кстати, какая версия CH?

Roman
04.09.2017
19:08:05
ага, а arrayJoin на него уже не работает

Nikolai
04.09.2017
19:08:38
в последней версии не должен :)

Roman
04.09.2017
19:09:54
не, у нас не последняя (

Nikolai
04.09.2017
19:09:58
наверное, answers - это nullable строка, и можно попробовать снять с нее каст

SELECT arrayJoin(spl) FROM ( select splitByChar(',', splitByChar('|', assumeNotNullable(answers))[5]) spl from Events WHERE ... ) ?

Roman
04.09.2017
19:34:19
ооо, точно, не догадался Спасибо :)

Nikolai
04.09.2017
19:35:04
отлично :)

Konstantin
04.09.2017
20:19:10
@kochetovnicolai Спасибо вам еще раз за помощь со словарем, пришлось самому научится собирать пакет под centos, и закончил только сейччас, но оно того стоило, IP-гео парсятся просто чудесно =)

Nikolai
04.09.2017
21:38:36
вам спасибо, помогли найти баг

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