
Andrey
30.06.2017
14:28:18
Т.е. ковырять именно odbc. Спасибо

Alexey
30.06.2017
14:28:41

Alex
30.06.2017
14:29:33
это все понятно, как сделать вывод в UTC?

Alexey
30.06.2017
14:29:40

Google

Alexey
30.06.2017
14:30:23
Либо настроить часовой пояс сервера. Это можно сделать в конфигурационном файле (config.xml), добавив
<timezone>UTC</timezone>
Это повлияет и на форматирование даты-с-временем и на парсинг из текста.

Alexander
30.06.2017
14:46:59

Andrey
30.06.2017
15:05:22

Alex
30.06.2017
15:29:29
Не знаю насколько адекватно сюда задавать такой вопрос, но стоит такая задача: выбрать из таблицы COUNT для трёх полей, т.е. сейчас берётся просто COUNT() + GROUP BY EventDate, поле и так трижды, в итоге обрабатывает 203 милиона строк и это достаточно медленно.
Может есть какая-то хитрость, что бы посчитать все за раз? WHERE одинаковый. Или как-то всё прочитать в память как подзапрос, а дальше групировать уже оттуда
Джоинами поиграться может?

Andrey
30.06.2017
15:32:16
может countIf вам подойдет?

Alexey
30.06.2017
15:32:40
Сделать три разных GROUP BY над одинаковыми данными, делая только один проход по их чтению и фильтрации? Я как раз думал об этом - как можно было бы реализовать обработку нескольких запросов за один проход. И пока решения нет.
Если после фильтрации немного данных, то временная таблица - нормальный вариант.

Tima
30.06.2017
15:32:54
Я похожее делал как раз через countIf

Alex
30.06.2017
15:36:42
SELECT EventDate as date, UserCountry as country, COUNT() as impression
FROM impressions
WHERE row = 'qweqweqwe'
AND EventDate >= '2017-05-30'
AND EventDate <= '2017-07-01'
GROUP BY EventDate, countryПримерно так. Подсчёт показов для поля по странам, девайсам, браузерам

Andrey
30.06.2017
15:40:15

Google


Tatiana
30.06.2017
17:45:27
Я пользуюсь SQL Workbench/J, с версии 1.1.54242 возникает exception при попытке посмотреть список колонок. JDBC driver 0.1.14 и 0.1.25 одинаково ругаются
Code: 47, e.displayText() = DB::Exception: Unknown identifier: default_type, e.what() = DB::Exception
at ru.yandex.clickhouse.except.ClickHouseExceptionSpecifier.getException(ClickHouseExceptionSpecifier.java:82)
at ru.yandex.clickhouse.except.ClickHouseExceptionSpecifier.specify(ClickHouseExceptionSpecifier.java:51)
at ru.yandex.clickhouse.except.ClickHouseExceptionSpecifier.specify(ClickHouseExceptionSpecifier.java:28)
at ru.yandex.clickhouse.ClickHouseStatementImpl.getInputStream(ClickHouseStatementImpl.java:443)
at ru.yandex.clickhouse.ClickHouseStatementImpl.executeQuery(ClickHouseStatementImpl.java:77)
at ru.yandex.clickhouse.ClickHouseStatementImpl.executeQuery(ClickHouseStatementImpl.java:73)
at ru.yandex.clickhouse.ClickHouseDatabaseMetadata.request(ClickHouseDatabaseMetadata.java:620)
at ru.yandex.clickhouse.ClickHouseDatabaseMetadata.getColumns(ClickHouseDatabaseMetadata.java:782)
at workbench.db.JdbcTableDefinitionReader.getColumns(JdbcTableDefinitionReader.java:265)


Alexey
30.06.2017
18:54:13
Если я правильно помню, это должно быть починено в последнем JDBC драйвере.

Tatiana
30.06.2017
19:07:29
Пока 0.1.25 последний

Sergey
30.06.2017
19:27:28
default_type из system.columns начал запрашиваться с 0.1.13. Возможно эта колонка появилась в более поздней версии сервера, чем вы используете.
При этом default_type в драйвере похоже используется неправильно.
В новой версии сервера эта колонка system.columns теперь называется default_kind (было default_type). Нужно это учесть в драйвере.


Aleksander
01.07.2017
09:38:35
Привет всем!! Сейчас занимаюсь проектом по сбору статистики с социальных сетей / медиа площадок. Проект только в зародыше, встал вопрос о том как все это хранить. Кейс такой, один раз в день собирается статистика по миллионам групп, каналов. Сначала думали юзать для этих целей хадуп и его стек. Но, недавно, поговорил со своим коллегой, и он посоветовал кх: я поизучал, вроде подходит под мой кейс. Вопрос в следующем, чем может обернуться внедрение кх и подходит ли она идеально под такой кейс использования: постоянные инсерты новых данных, и частые селекты с агрегацией данных, ну и огромные селекты через Apache Spark для анализа данных?


Andrey
01.07.2017
09:53:46
Привет всем!! Сейчас занимаюсь проектом по сбору статистики с социальных сетей / медиа площадок. Проект только в зародыше, встал вопрос о том как все это хранить. Кейс такой, один раз в день собирается статистика по миллионам групп, каналов. Сначала думали юзать для этих целей хадуп и его стек. Но, недавно, поговорил со своим коллегой, и он посоветовал кх: я поизучал, вроде подходит под мой кейс. Вопрос в следующем, чем может обернуться внедрение кх и подходит ли она идеально под такой кейс использования: постоянные инсерты новых данных, и частые селекты с агрегацией данных, ну и огромные селекты через Apache Spark для анализа данных?
Да. Только зачем Спарк? Всю аналитику можно сделать внутри CH

Александр
01.07.2017
09:54:06

Aleksander
01.07.2017
09:54:16
В спарке есть встроенные модели для машинного обучения

Andrey
01.07.2017
09:54:54

Aleksander
01.07.2017
10:14:35

Andrey
01.07.2017
10:15:21

Aleksander
01.07.2017
10:16:40
Какое-нибудь неожиданное для меня поведение и прочее

Andrey
01.07.2017
10:17:03
Для меня лично один из больших плюсов то что до выкладки в stable, релиз накатывается на прод метрики. Это уже означает что как минимум базовый функционал из метрики там работает.

Vladimir
01.07.2017
10:18:56
когда ты делаешь что-то крупное у тебя всегда есть шанс что будут проблемы о которых пока никто не в курсе
даже со старым продуктом

Aleksander
01.07.2017
10:19:16
Окей, понял! Если что сюда вопросы покидаю:))
Если вдруг что-то будет очень непонятое

Andrey
01.07.2017
10:19:51

Google

Andrey
01.07.2017
10:20:01

Александр
01.07.2017
12:17:18
Единственное с чем лично я столкнулся была неверная оптимизация запросов и broken pipe, на который быстро нашлось решение, а по первому вопросу пока неизвестно, но Алексею я уже передал всю необходимую информацию, надеюсь скоро и это пофиксят :)

Fike
01.07.2017
12:23:51
Какое-нибудь неожиданное для меня поведение и прочее
Непосредственно по объяснению принципов работы и разбору конкретных проблем это едва ли не самый теплый чат от мейнтейнеров продукта, который я видел. Команда кликхауса появляется здесь практически ежедневно.

Aleksander
01.07.2017
12:37:57

Alexey
02.07.2017
11:10:38
подскажите способ написать подобную кверю
SELECT
[2, 3] AS given_indices,
['str1', 'str2', 'str3'] AS original_array,
<magicHere>(original_array, given_indices) as filteredArray
-- ожидаемый результат ['str2', 'str3']
была идея сделать arrayMap( index -> original_array[index], indexArray)
но такой вариант у меня заработал только в случае, когда original_array массив чисел
в итоге получилось сделать через arrayFilter((x, i) -> has(given_indices, i), original_array, arrayEnumerate(original_array) , но мб есть варианты лучше?
была еще вот такая идея arrayMap((x,y) -> original_array[x], splitByString(“,” ,arrayJoin(given_indices)), given_indices)

Alexander
02.07.2017
15:15:18
Добрый день. Подскажите есть какие-то тулзы для repair или дока.
в логах вижу следующее
<Error> default.campaignsCalls (Merger): Part 20170628_20170630_26859638_27318511_907 intersects previous part

papa
02.07.2017
18:56:16
подскажите способ написать подобную кверю
SELECT
[2, 3] AS given_indices,
['str1', 'str2', 'str3'] AS original_array,
<magicHere>(original_array, given_indices) as filteredArray
-- ожидаемый результат ['str2', 'str3']
была идея сделать arrayMap( index -> original_array[index], indexArray)
но такой вариант у меня заработал только в случае, когда original_array массив чисел
SELECT arrayMap(i -> x[i], [2, 3]) AS f
FROM
(
SELECT ['a', 'b', 'c'] AS x
)
┌─f─────────┐
│ ['b','c'] │
└───────────┘ у меня не только для чисел работает.

Alexander
02.07.2017
19:39:12
Не всю :)
у меня сразу же кейс - схлопывание дубликатов эвентов, когда у эвента разный user_id и timestamp отличается в пределах секунды. правильно на КХ это сделать я не дотумкал, как

Александр
02.07.2017
20:07:12
Ну это часть бизнес-логики я считаю
Это как unique индексы в mysql ))
У нас подобный кейс есть, только у нас не клики, а просто поток эвентов с действиями юзеров
И чаще всего сидят с планшетов и делают suspend, но сессия не протухает. Должен быть таймаут сессии на уровне приложения если разрыв между действиями больше 30 минут, но бывают исключения, например видео, которое длится больше 30 минут. Тут уж никак без предварительной подготовки данных

Alexander
02.07.2017
20:11:18

Александр
02.07.2017
20:12:26
Это надо поверх кх делать :) у нас эвенты пишутся в монгу по стандарту xapi, оттуда мы выгружаем из пачками и в потоке обработки делаем нужные пометки
Но особо не разгуляешься, и достаточно много инфы приходится агрегировать после новой вставки данных в кх и класть их просто в mysql, но это все из-за сложной бизнес-логики
Какая то часть метрик считается напрямую в кх


papa
02.07.2017
20:52:13
у меня сразу же кейс - схлопывание дубликатов эвентов, когда у эвента разный user_id и timestamp отличается в пределах секунды. правильно на КХ это сделать я не дотумкал, как
проблема сложная по нескольким причинам.
во-первых, есть разница между unique (user_id, timestamp) и "время отличается в пределах секунды". первое достаточно просто проверять, во второй интерпретации у вас дедупликатор в некоторых случаях становится недерминированным и зависит от того в каком порядке "почти последовательно" придут события в историю пользователя. также иногда получение больше одного события в секунду - это нормальный клиентский кейс и потом приходятся объяснять почему нет данных, про которые известно что они были отправлены.
во-вторых, это требует координации данных, чего по возможности стоит избегать. если вы дедуплицируетесь при записи, нужен какой-то буфер и какая-то гипотеза про локальность дубликатов во времени, если вы дедуплицируете при чтении, то вам нужно или чтобы данных было мало, т.е. group by user_id timestamp мог работать, или чтобы ReplacingMergeTree работал лучше чем написано в документации и например правильно вел себя в запросах с FINAL, что в любом случае не ускорит выполнение запроса. ну и на всякий случай желательно чтобы дубликаты приезжали в один шард и удалялись в фоне сами, что не гарантируется и напрямую не регулируется.

Google

Maxim
02.07.2017
21:32:04
есть ли ILIKE в CH?
В операторах сравнения что-то не видно в доке

Alexey
02.07.2017
21:38:00
positionCaseInsensitive(haystack, needle) != 0
или
positionCaseInsensitiveUTF8(haystack, needle) != 0

Александр
02.07.2017
22:02:09
В примерах с sequenceMatch есть использование этого оператора

Alexey
02.07.2017
22:04:32

Александр
02.07.2017
22:05:25

Vinah
03.07.2017
05:09:55
@FolderArchive - канал, где сливают платный полезный - образовательный контент и курсы, например можно скачать курсы "Нетологии" или все курсы "Бизнес Молодости".

Roman
03.07.2017
09:48:51
Есть какой-нибудь способ получить реальную дату начала недели по номеру недели из toRelativeWeekNum() ?
Можно отнимать от текущей даты день недели..

Roman
03.07.2017
10:10:36
toMonday() не подходит?
а, по номеру недели, не заметил )

Roma
03.07.2017
10:19:51
Привет. А не появилось библиотеки для R? Или чем можно из среды R в Виндоуз подключиться к КХ?

Tima
03.07.2017
10:24:57

Roma
03.07.2017
10:33:42

Дмитрий
03.07.2017
10:40:59
Всем привет, подскажите, пожалуйста, про странное поведение преобразования строки в Float64?
Почему происходит так?

Александр
03.07.2017
10:44:22
Ребят, как сказать кликхаусу что бы он данные из таблицы хранил в оперативе? )

Vladimir
03.07.2017
10:47:46

Google

Vladimir
03.07.2017
10:47:57
потому что float так хранится в памяти
вопрос в том от тебя это будет абстрагировать система, понижая точность, либо нет