
Александр
05.07.2017
18:49:07
Спасибо!
Только еще hostname в ответе интересный clickhouse%2Ds0r0:9000 )

Vitaliy
05.07.2017
19:25:47

Александр
05.07.2017
19:26:33
Супер! Очень полезная штука! Прям вот избавили от своего костыля для ddl

Google

ag0n1k
05.07.2017
19:54:39
Друзья, а подскажите пожалуйства про монтирование дисков.
хештеги для поиска, а то что-то не нашел, в документациях нашел только про "не использовать lvm"
#mount #disk #prod

Roman
05.07.2017
20:56:58
Подскажите, time - секунды в первичном ключ, это нормально?

Александр
05.07.2017
20:57:19
Если время с секундами, то не очень

Roman
05.07.2017
20:57:27
unixtime

Александр
05.07.2017
20:57:29
А если просто секунды в диапазоне от 0-60, то норм
А, не ) толку от такого ключа не будет
Я уже пробовал такой вариант, только DateTime

Alexey
05.07.2017
21:01:40
Вообще нормально и как раз используется, если нужно выбирать данные по диапазону времени - для логов. Для примера, так сделано в query_log в ClickHouse.

Александр
05.07.2017
21:18:44
Надо будет попробовать писать не так часто

Ilya
05.07.2017
23:13:36

Kirill
06.07.2017
03:49:57
По DateTime индекс работает отлично, но, раз про него заговорили то, вспомнилось: у нас есть таблица вида
CREATE TABLE metrics (
EventDate Date default toDate(EventTime),
EventTime DateTime,
ApplicationID UInt32,
SpotID UInt32,
Country FixedString(2),
DeviceID UInt8,
OsID UInt8,
BrowserID UInt8,
Clicks UInt64,
Impressions UInt64
) ENGINE = SummingMergeTree(
EventDate, (
EventTime,
ApplicationID,
SpotID,
Country,
OsID,
BrowserID,
DeviceID
), 8192, (
Clicks,
Impressions
)
);
мы из неё читаем в Grafana и строим графики, работает оно шустро, но если делать выборки с указанием EventTime и ApplicationID,
то сканируется столько же строк как и если просто указывать EventTime

[Anonymous]
06.07.2017
04:56:25
@FolderArchive - канал, где сливают платный полезный - образовательный контент и курсы, например можно скачать курсы "Нетологии" или все курсы "Бизнес Молодости".

Google

Alexandr
06.07.2017
06:00:46
Кто-нибудь автоматизировал добавление новой годы в кластер? С созданием таблицы и регистрацией в zk?

Mike
06.07.2017
07:04:18


Kirill
06.07.2017
07:11:02
По DateTime индекс работает отлично, но, раз про него заговорили то, вспомнилось: у нас есть таблица вида
CREATE TABLE metrics (
EventDate Date default toDate(EventTime),
EventTime DateTime,
ApplicationID UInt32,
SpotID UInt32,
Country FixedString(2),
DeviceID UInt8,
OsID UInt8,
BrowserID UInt8,
Clicks UInt64,
Impressions UInt64
) ENGINE = SummingMergeTree(
EventDate, (
EventTime,
ApplicationID,
SpotID,
Country,
OsID,
BrowserID,
DeviceID
), 8192, (
Clicks,
Impressions
)
);
мы из неё читаем в Grafana и строим графики, работает оно шустро, но если делать выборки с указанием EventTime и ApplicationID,
то сканируется столько же строк как и если просто указывать EventTime
А нет, всё работает, просто у нас так данные легли что по некоторым запросам сканируется почти все

Igor
06.07.2017
07:32:37

Mike
06.07.2017
07:33:15
Ой вей, а это где-то описано? Может быть есть еще что-то, чего я не знаю? :)

Igor
06.07.2017
07:35:50
Беда с докой у меня, все руки не дойдут описать все штуки tabix'a(((

Slach
06.07.2017
07:45:39

Roman
06.07.2017
07:59:22
А вот откуда у вас на винде ctrl+<left|right> переключает вкладки :) вы на Маке сидите
Подумайте о виндовых юзерах)

Igor
06.07.2017
08:18:35

Никита
06.07.2017
08:19:28
Всем привет. Есть вопрос. Вчера столкнулся с проблемой подсчёта косинуса. В чёрном - результат запроса SELECT cos(0.95880226199657), ниже - виндовый калькулятор.
Почему результаты могут так сильно отличаться?

Ефим
06.07.2017
08:20:22
Градусы и радианы?

Никита
06.07.2017
08:20:35
В обоих случаях радианы
Если я ничего не попутал, конечно

Vladislav
06.07.2017
08:22:48
в винде градусы, судя по результату

Никита
06.07.2017
08:24:33
Да, по всей видимости я накосячил(
Спасибо)


Aleksandr
06.07.2017
08:29:30
почему page_view меняется, дописываете клики? почему время float, почему user_id string? есть ли CH таблица с сессиями, с юзерами? какая топология кластера, какие впечатления у админов? какое отставание от реалтайма?
>> почему page_view меняется, дописываете клики?
Да, клики по блокам, клики по внешним ссылкам, e-commerce, custom variables, время просмотра страницы и т.д.
>> почему время float, почему user_id string?
Время float делали на момент проектирования, для более точной сортировки, но в данный момент это ничем не помогает - возможно откажемся от этого.
user_id - string потому что это структура данных, из которой можно достать некоторые параметры. По хорошему надо доставать эти параметры и записывать отдельно. Тоже будем допиливать.
>> есть ли CH таблица с сессиями, с юзерами?
Для статьи я намеренно упростил таблицу.
У нас одна большая таблица, под 100 колонок. Плюс несколько справочников, например для geo.
Отдельной таблицы сессий нет, сессия представлена айдишником. Количество сессий считается как uniqCombined(session_id).
>> какая топология кластера, какие впечатления у админов?
Вопрос про топологию поясните, пожалуйста. И какой кластер имеется в виду: CH, spark, kafka?
>> какое отставание от реалтайма?
Зависит от нагрузки. Мы сейчас переехали на новый кластер и из-за этого в пиках бывает до полутора часов. Это очень долго, оптимизируем и добавляем тачки. Тормозим не об кх.


Оля
06.07.2017
08:29:52

Google

Andrey
06.07.2017
08:30:59

Bulat
06.07.2017
08:37:56
была replicated таблица, сделал drop table, потом заново create table с тем же именем
в итоге в новой таблице оказались данные из старой таблицы :(

Valeriy
06.07.2017
08:38:18
Так это ж хорошо :)

Bulat
06.07.2017
08:38:30
для меня нет

Valeriy
06.07.2017
08:39:46
Вроде в этом же смысл. Надо было replicated с другом ключом в zk тогда создавать.

Bulat
06.07.2017
08:41:31
мне надо было пересоздать таблицу с другой схемой, но сохранить имя :)
коллеги подсказали что надо было drop партиции еще сделать.

Valeriy
06.07.2017
08:43:11
Так оно не по репликации тебе восстановилось?

Bulat
06.07.2017
08:43:54
а вот это хороший вопрос, я не знаю как оно востановилось

Alexey
06.07.2017
08:47:07
так команду drop table сделал на всех репликах?
или на одной сделал и тут же create?

Bulat
06.07.2017
08:52:13
на каждой drop и тут же create
наверное так не надо быдо делать

Alexey
06.07.2017
08:57:27
ну логично
сначала везде дроп
потом уже везде создание
все будет норм
проверено
а так, CH отработал штатно

Bulat
06.07.2017
08:59:32
я не знал что надо так делать. теперь буду знать :)

Google

Alexey
06.07.2017
09:00:58
CH это такой конструктор, в котором большая часть автоматизации вынесена за рамки DBMS. Это приносит некоторые дополнительные заботы, но в тож время дает очень большую гибкость
правда вот в последних релизах уже появляются фичи в сторону упрощения подобной рутины

Bulat
06.07.2017
09:01:27
в итоге у меня получился какой то трэш.
на самом деле
:)

Pavel
06.07.2017
10:25:10
мммм, немного не связанный вопрос, я тут помню были ребята из Тарантула
есть ли кто до сих пор? Вопрос по гео распределенному сетапу есть

Vladimir
06.07.2017
10:25:43

Pavel
06.07.2017
10:25:59
ой, спасибо)

Igor
06.07.2017
10:28:42

Kirill
06.07.2017
11:17:41
Может кто знает - можно ли сказать CH перестать считать после какого то предела? Задача узнать количество результатов в запросе и если это количество больше N то уже не важно. Типа "слишком много, фильтруйте дальше". Но что бы посчитать count(), CH вычитывает вообще все подходящие строки и говорит сколько там миллионов, хотя дальше тысячи уже неинтересно...

Tima
06.07.2017
11:22:44

Александр
06.07.2017
11:31:17

Kirill
06.07.2017
11:31:19
wow, как то я это пропустил. клевая штука, но не для этой задачи. у меня в запросу GROUP BY нет. Пока пришел к такой вот штуке. Выглядит уродливо, но чтение строк на 1000 обрывает:
select sum(c) from ( select 1 as c from ... limit 1000)


Vitaliy
06.07.2017
12:44:45
По DateTime индекс работает отлично, но, раз про него заговорили то, вспомнилось: у нас есть таблица вида
CREATE TABLE metrics (
EventDate Date default toDate(EventTime),
EventTime DateTime,
ApplicationID UInt32,
SpotID UInt32,
Country FixedString(2),
DeviceID UInt8,
OsID UInt8,
BrowserID UInt8,
Clicks UInt64,
Impressions UInt64
) ENGINE = SummingMergeTree(
EventDate, (
EventTime,
ApplicationID,
SpotID,
Country,
OsID,
BrowserID,
DeviceID
), 8192, (
Clicks,
Impressions
)
);
мы из неё читаем в Grafana и строим графики, работает оно шустро, но если делать выборки с указанием EventTime и ApplicationID,
то сканируется столько же строк как и если просто указывать EventTime
BTW Приблизительно можно проверить "эффективность" N-ой колонки индекса запросом
SELECT sum(if(c >= 8192, c, 0))/sum(c) FROM (SELECT count() AS c FROM table GROUP BY index_col1, index_col2, ..., index_colN )
, чем ближе к 1 - тем лучше

Kirill
06.07.2017
12:47:38
спасибо

Александр
06.07.2017
12:49:03
У меня по eventTime получился такой результат 0.000962078302459259 )
Собственно не эффективно я так полагаю

Kirill
06.07.2017
12:49:28
SELECT sum(if(c >= 8192, c, 0))/sum(c) FROM (SELECT count() AS c FROM metrics GROUP BY EventTime );
SELECT sum(if(c >= 8192, c, 0)) / sum(c)
FROM
(
SELECT count() AS c
FROM metrics
GROUP BY EventTime
)
┌─divide(sum(if(greaterOrEquals(c, 8192), c, 0)), sum(c))─┐
│ 0.9832048649885908 │
└─────────────────────────────────────────────────────────┘

Александр
06.07.2017
12:52:37

Google

Kirill
06.07.2017
12:53:00
Processed 368.42 million rows

Александр
06.07.2017
12:53:38
SELECT sum(if(c >= 8192, c, 0)) / sum(c)
FROM
(
SELECT count() AS c
FROM statements
GROUP BY eventTime
)
┌─divide(sum(if(greaterOrEquals(c, 8192), c, 0)), sum(c))─┐
│ 0.0009620680871880191 │
└─────────────────────────────────────────────────────────┘
Processed 828.79 million rows

Kirill
06.07.2017
12:55:20
А индекс как построен ? У нас
ENGINE = SummingMergeTree(EventDate, (EventTime, ApplicationID, SpotID, Country, OsID, BrowserID, DeviceID), 8192, (Clicks, Impressions))
У меня вопрос по Nullable полям в нативном протоколе, какова их структура, например для Nullable(UInt64), Nullable(String), Nullable(Array(Int32)) чтоб мне их передать на сервер и прочитать ?

Yuri
06.07.2017
13:40:06
Всем привет
на PGDay кто задавал вопрос про клиент Python для ClickHouse? отзовитесь, чем не устраивает? И каким пользуетесь?

Vitaliy
06.07.2017
13:54:05

Kirill
06.07.2017
14:12:29
там много смотреть, можно на пальцах: для Nullable в начало пишем UInt8 (зачем: 1 есть значение, 0 - нет ?) дальше если есть значение то пишем его как есть (например String: длина + сам текст в байтах), если значения нет то ничего не пишем ?
)

Igor
06.07.2017
14:13:47
в rowbinary именно так