
Stas
04.09.2017
12:50:41

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

Stas
04.09.2017
12:52:05

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

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

Nikolai
04.09.2017
12:55:58

Stas
04.09.2017
12:56:26

Александр
04.09.2017
12:56:52

Konstantin
04.09.2017
12:57:18

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

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

Stas
04.09.2017
13:05:14

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

Konstantin
04.09.2017
13:06:02

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

Vladimir
04.09.2017
16:19:44

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

Vladimir
04.09.2017
16:22:22

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

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

Andrey
04.09.2017
18:38:45

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
вам спасибо, помогли найти баг