@clickhouse_ru

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

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

Alexey
30.06.2017
14:29:40
Как-то слишком страшно звучит. Бд под запись в одну таблицу? Проблемы конечно понятны, но мультитрединг, все дела. Если в диск упирается, но это не ясно проблемы кх или нет.
В ClickHouse нет явных ограничений связанных с одновременной вставкой в разные таблицы. (Никаких блокировок и тому подобного). Влияние может быть косвенным, через общий ресурс - диск и ZK.

Google
Alexey
30.06.2017
14:30:23
это все понятно, как сделать вывод в UTC?
Чтобы вывести тип DateTime в UTC, можно написать так: toString(..., 'UTC')

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

Alexander
30.06.2017
14:46:59
Допустим приложение в UTC, сервер в UTC+3. today() в сервере - 2017-06-29, т.е. 2016-06-29 00:00:00 UTC+3 = 2016-06-28 21:00:00 UTC, соответственно в приложении дата будет выглядеть как 2016-06-28.
Допустим сервер в UTC, а клиент в UTC-3. Тогда клиенту ВСЕГДА будет возвращаться дата на день меньше, если спрашивается именно дата

Andrey
30.06.2017
15:05:22
При загрузке словаря создаётся лог в tmp. И CH на него держит дескриптор
А что в логе? У вас случаем не трейсинг ли включен? Выключить можно через Trace = no

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

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
Временная таблица кстати весьма как вариант. Надо подумать над этим, спасибо за наводку
с новым релизом сессии сделали в http, так что да, будет совсем удобно

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 для анализа данных?

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

Andrey
01.07.2017
09:54:54
Aleksander
01.07.2017
10:14:35
А, да. Если машинное обучение то да)
Я очень боюсь, что сейчас заюзаю, а потом будет куча проблем, потому, что комьюнити не очень большое и мало инфы, по стековерфлоу ненагуглить

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
Какое-нибудь неожиданное для меня поведение и прочее
Если отсутствие UPDATE/DELETE и партиционирование жестко заданное по месяцам не пугает, то вперед!) Хотя и этот функционал уже есть в роадмапе

Google
Andrey
01.07.2017
10:20:01
Александр
01.07.2017
12:17:18
Какое-нибудь неожиданное для меня поведение и прочее
Скажу так, что неожиданного поведения было больше от любого другого софта чем от кх в процессе разработки продукта :)

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

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

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

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

Александр
02.07.2017
20:07:12
Ну это часть бизнес-логики я считаю

Это как unique индексы в mysql ))

У нас подобный кейс есть, только у нас не клики, а просто поток эвентов с действиями юзеров

И чаще всего сидят с планшетов и делают suspend, но сессия не протухает. Должен быть таймаут сессии на уровне приложения если разрыв между действиями больше 30 минут, но бывают исключения, например видео, которое длится больше 30 минут. Тут уж никак без предварительной подготовки данных

Admin


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

Но особо не разгуляешься, и достаточно много инфы приходится агрегировать после новой вставки данных в кх и класть их просто в mysql, но это все из-за сложной бизнес-логики

Какая то часть метрик считается напрямую в кх

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

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
В операторах сравнения что-то не видно в доке
Like есть вроде как, но медленный

В примерах с sequenceMatch есть использование этого оператора

Alexey
02.07.2017
22:04:32
Like есть вроде как, но медленный
Максим спрашивал про регистронезависимый LIKE (ILIKE). Также замечу, что LIKE не медленный (если найдёте быстрее - скажите).

Александр
02.07.2017
22:05:25
Максим спрашивал про регистронезависимый LIKE (ILIKE). Также замечу, что LIKE не медленный (если найдёте быстрее - скажите).
Прошу прощения :) привык к тому, что like как правило еле шевелится :) рад, что в кх с этим дела обстоят лучше!

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 в Виндоуз подключиться к КХ?

Roma
03.07.2017
10:33:42
https://github.com/hannesmuehleisen/clickhouse-r
К сожалению, не подключается. <simpleError in curl::curl_fetch_memory(conn@url, handle = h): Server returned nothing (no headers, no data)> Error: dbIsValid(con) is not TRUE

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



Почему происходит так?

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

Google
Vladimir
03.07.2017
10:47:46
потому что float так хранится в памяти

вопрос в том от тебя это будет абстрагировать система, понижая точность, либо нет

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